浏览代码

Initial LLVM 18.1.4 support

Brian Fiete 1 年之前
父节点
当前提交
2dd6423fab

+ 6 - 2
Debugger32/Debugger32.vcxproj

@@ -133,6 +133,7 @@
       <AdditionalIncludeDirectories>../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;C:\llvm-3.8\llvm\include;C:\llvm-3.8\bin64\include;C:\llvm-3.8\llvm\lib\Target;C:\llvm-3.8\bin64\lib\Target\X86;C:\llvm-3.8\llvm\tools\clang\include</AdditionalIncludeDirectories>
       <SupportJustMyCode>false</SupportJustMyCode>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -146,12 +147,13 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>BF_DBG_32;WIN32;_DEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_13_0_1\llvm\include;..\extern\llvm_win64_13_0_1\include;..\extern\llvm-project_13_0_1\llvm\lib\Target;..\extern\llvm_win64_13_0_1\lib\Target\X86;..\extern\llvm-project_13_0_1\llvm\tools\clang\include</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_18_1_4\llvm\include;..\extern\llvm_win64_18_1_4\include;..\extern\llvm-project_18_1_4\llvm\lib\Target;..\extern\llvm_win64_18_1_4\lib\Target\X86;..\extern\llvm-project_18_1_4\llvm\tools\clang\include</AdditionalIncludeDirectories>
       <BufferSecurityCheck>false</BufferSecurityCheck>
       <AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions>
       <SupportJustMyCode>false</SupportJustMyCode>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -169,6 +171,7 @@
       <PreprocessorDefinitions>BF_DBG_32;WIN32;NDEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;C:\llvm-3.8\llvm\include;C:\llvm-3.8\bin64\include;C:\llvm-3.8\llvm\lib\Target;C:\llvm-3.8\bin64\lib\Target\X86;C:\llvm-3.8\llvm\tools\clang\include</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -186,10 +189,11 @@
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>BF_DBG_32;WIN32;NDEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_13_0_1\llvm\include;..\extern\llvm_win64_13_0_1\include;..\extern\llvm-project_13_0_1\llvm\lib\Target;..\extern\llvm_win64_13_0_1\lib\Target\X86;..\extern\llvm-project_13_0_1\llvm\tools\clang\include</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_18_1_4\llvm\include;..\extern\llvm_win64_18_1_4\include;..\extern\llvm-project_18_1_4\llvm\lib\Target;..\extern\llvm_win64_18_1_4\lib\Target\X86;..\extern\llvm-project_18_1_4\llvm\tools\clang\include</AdditionalIncludeDirectories>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <BufferSecurityCheck>false</BufferSecurityCheck>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>

+ 6 - 2
Debugger64/Debugger64.vcxproj

@@ -133,6 +133,7 @@
       <AdditionalIncludeDirectories>../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;C:\llvm-3.8\llvm\include;C:\llvm-3.8\bin64\include;C:\llvm-3.8\llvm\lib\Target;C:\llvm-3.8\bin64\lib\Target\X86;C:\llvm-3.8\llvm\tools\clang\include</AdditionalIncludeDirectories>
       <SupportJustMyCode>false</SupportJustMyCode>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -146,12 +147,13 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>BF_DBG_64;WIN32;_DEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_13_0_1\llvm\include;..\extern\llvm_win64_13_0_1\include;..\extern\llvm-project_13_0_1\llvm\lib\Target;..\extern\llvm_win64_13_0_1\lib\Target\X86;..\extern\llvm-project_13_0_1\llvm\tools\clang\include</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_18_1_4\llvm\include;..\extern\llvm_win64_18_1_4\include;..\extern\llvm-project_18_1_4\llvm\lib\Target;..\extern\llvm_win64_18_1_4\lib\Target\X86;..\extern\llvm-project_18_1_4\llvm\tools\clang\include</AdditionalIncludeDirectories>
       <BufferSecurityCheck>false</BufferSecurityCheck>
       <AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions>
       <SupportJustMyCode>false</SupportJustMyCode>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -169,6 +171,7 @@
       <PreprocessorDefinitions>BF_DBG_64;WIN32;NDEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;C:\llvm-3.8\llvm\include;C:\llvm-3.8\bin64\include;C:\llvm-3.8\llvm\lib\Target;C:\llvm-3.8\bin64\lib\Target\X86;C:\llvm-3.8\llvm\tools\clang\include</AdditionalIncludeDirectories>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -186,10 +189,11 @@
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>BF_DBG_64;WIN32;NDEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_13_0_1\llvm\include;..\extern\llvm_win64_13_0_1\include;..\extern\llvm-project_13_0_1\llvm\lib\Target;..\extern\llvm_win64_13_0_1\lib\Target\X86;..\extern\llvm-project_13_0_1\llvm\tools\clang\include</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_18_1_4\llvm\include;..\extern\llvm_win64_18_1_4\include;..\extern\llvm-project_18_1_4\llvm\lib\Target;..\extern\llvm_win64_18_1_4\lib\Target\X86;..\extern\llvm-project_18_1_4\llvm\tools\clang\include</AdditionalIncludeDirectories>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <BufferSecurityCheck>false</BufferSecurityCheck>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>

+ 1 - 0
IDEHelper/Backend/BeCOFFObject.cpp

@@ -5,6 +5,7 @@
 #include "BeefySysLib/MemStream.h"
 #include "codeview/cvinfo.h"
 #include "BeefySysLib/util/BeefPerf.h"
+#include "llvm/IR/DIBuilder.h"
 
 #include "BeefySysLib/util/AllocDebug.h"
 

+ 1 - 0
IDEHelper/Backend/BeIRCodeGen.cpp

@@ -2,6 +2,7 @@
 #include "../Compiler/BfIRCodeGen.h"
 #include "BeDbgModule.h"
 #include "BeefySysLib/util/BeefPerf.h"
+#include "llvm/IR/DIBuilder.h"
 
 #include "BeefySysLib/util/AllocDebug.h"
 #include "BeefySysLib/util/Hash.h"

+ 1 - 0
IDEHelper/Backend/BeModule.cpp

@@ -4,6 +4,7 @@
 #include "BeefySysLib/util/BeefPerf.h"
 #include "BeefySysLib/util/StackHelper.h"
 #include "../Compiler/BfIRCodeGen.h"
+#include "llvm/IR/DIBuilder.h"
 
 #include "BeefySysLib/util/AllocDebug.h"
 

+ 1 - 0
IDEHelper/Clang/CDepChecker.h

@@ -3,6 +3,7 @@
 #include "../Compiler/BfSystem.h"
 #include "../Compiler/BfParser.h"
 #include "../Compiler/BfReducer.h"
+#include <map>
 
 NS_BF_BEGIN
 

+ 13 - 6
IDEHelper/Compiler/BfCompiler.cpp

@@ -11,6 +11,13 @@
 #include "BeefySysLib/util/AllocDebug.h"
 
 #include "llvm/Support/Compiler.h"
+#include "llvm/Support/Compiler.h"
+#include "llvm/IR/IRBuilder.h"
+#include "llvm/IR/Type.h"
+#include "llvm/IR/DIBuilder.h"
+#include "llvm/IR/DebugInfo.h"
+#include "llvm/IR/Argument.h"
+#include "llvm/IR/Constants.h"
 
 #include "BfCompiler.h"
 #include "BfSystem.h"
@@ -55,11 +62,11 @@ void pt(llvm::Type* t)
 	os << " isSized: " << t->isSized() << "\n";
 	os.flush();
 
-	if (auto pointerType = llvm::dyn_cast<llvm::PointerType>(t))
-	{
-		Beefy::OutputDebugStrF("Element: ");
-		pt(pointerType->getElementType());
-	}
+// 	if (auto pointerType = llvm::dyn_cast<llvm::PointerType>(t))
+// 	{
+// 		Beefy::OutputDebugStrF("Element: ");
+// 		pt(pointerType->getElementType());
+// 	}
 }
 
 void ppt(llvm::Type* t)
@@ -70,7 +77,7 @@ void ppt(llvm::Type* t)
 		Beefy::OutputDebugStrF("Not a pointer type");
 		return;
 	}
-	pt(pointerType->getElementType());
+	//pt(pointerType->getElementType());
 }
 
 void pt(llvm::DINode* t)

+ 2 - 2
IDEHelper/Compiler/BfCompiler.h

@@ -15,13 +15,13 @@
 #include "BeefySysLib/util/String.h"
 #include "BfAst.h"
 #include "BfSystem.h"
-#include "llvm/Support/Compiler.h"
+/*#include "llvm/Support/Compiler.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/Type.h"
 #include "llvm/IR/DIBuilder.h"
 #include "llvm/IR/DebugInfo.h"
 #include "llvm/IR/Argument.h"
-#include "llvm/IR/Constants.h"
+#include "llvm/IR/Constants.h"*/
 #include "BfResolvedTypeUtils.h"
 #include <unordered_set>
 #include "BfContext.h"

+ 5 - 4
IDEHelper/Compiler/BfIRBuilder.cpp

@@ -29,6 +29,7 @@
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/IR/InlineAsm.h"
 #include "llvm/Support/FileSystem.h"
+#include "llvm/IR/DIBuilder.h"
 
 #pragma warning(pop)
 
@@ -1894,11 +1895,11 @@ String BfIRBuilder::ToString(BfIRType irType)
 		{
 			auto& typeEntry = mBfIRCodeGen->GetTypeEntry(irType.mId);
 			if (irType.mKind == BfIRType::TypeKind::TypeKind_TypeId)
-				llvmType = typeEntry.mLLVMType;
+				llvmType = typeEntry.mType->mLLVMType;
 			else if (irType.mKind == BfIRType::TypeKind::TypeKind_TypeInstId)
-				llvmType = typeEntry.mInstLLVMType;
+				llvmType = typeEntry.mInstType->mLLVMType;
 			else if (irType.mKind == BfIRType::TypeKind::TypeKind_TypeInstPtrId)
-				llvmType = typeEntry.mInstLLVMType->getPointerTo();
+				llvmType = typeEntry.mInstType->mLLVMType->getPointerTo();
 		}
 
 		if (llvmType == NULL)
@@ -1910,7 +1911,7 @@ String BfIRBuilder::ToString(BfIRType irType)
 		if (auto pointerType = llvm::dyn_cast<llvm::PointerType>(llvmType))
 		{
 			strStream << "\n ElementType: ";
-			pointerType->getElementType()->print(strStream);
+			//pointerType->getElementType()->print(strStream);
 		}
 		strStream.flush();
 		return outStr;

文件差异内容过多而无法显示
+ 438 - 189
IDEHelper/Compiler/BfIRCodeGen.cpp


+ 66 - 20
IDEHelper/Compiler/BfIRCodeGen.h

@@ -31,17 +31,40 @@ enum BfIRCodeGenEntryKind
 	BfIRCodeGenEntryKind_LLVMValue,
 	BfIRCodeGenEntryKind_LLVMValue_Aligned,
 	BfIRCodeGenEntryKind_LLVMType,
+	BfIRCodeGenEntryKind_TypedValue,
+	BfIRCodeGenEntryKind_TypedValue_Aligned,
+	BfIRCodeGenEntryKind_TypeEx,
 	BfIRCodeGenEntryKind_LLVMBasicBlock,
 	BfIRCodeGenEntryKind_LLVMMetadata,
 	BfIRCodeGenEntryKind_IntrinsicData,
 };
 
+class BfIRTypeEx;
+
 class BfIRIntrinsicData
 {
 public:
 	String mName;
 	BfIRIntrinsic mIntrinsic;
-	llvm::Type* mReturnType;
+	BfIRTypeEx* mReturnType;
+};
+
+class BfIRTypeEx
+{
+public:
+	llvm::Type* mLLVMType;
+	SizedArray<BfIRTypeEx*, 1> mMembers;
+
+	BfIRTypeEx()
+	{
+		mLLVMType = NULL;
+	}
+};
+
+struct BfIRTypedValue
+{
+	llvm::Value* mValue;
+	BfIRTypeEx* mTypeEx;
 };
 
 struct BfIRCodeGenEntry
@@ -51,9 +74,11 @@ struct BfIRCodeGenEntry
 	{
 		llvm::Value* mLLVMValue;
 		llvm::Type* mLLVMType;
+		BfIRTypeEx* mTypeEx;
 		llvm::BasicBlock* mLLVMBlock;
 		llvm::MDNode* mLLVMMetadata;
 		BfIRIntrinsicData* mIntrinsicData;
+		BfIRTypedValue mTypedValue;
 	};
 };
 
@@ -65,9 +90,9 @@ public:
 	int mAlign;
 	llvm::DIType* mDIType;
 	llvm::DIType* mInstDIType;
-	llvm::Type* mLLVMType;
-	llvm::Type* mAlignLLVMType;
-	llvm::Type* mInstLLVMType;
+	BfIRTypeEx* mType;
+	BfIRTypeEx* mAlignType;
+	BfIRTypeEx* mInstType;
 
 public:
 	BfIRTypeEntry()
@@ -77,9 +102,9 @@ public:
 		mAlign = -1;
 		mDIType = NULL;
 		mInstDIType = NULL;
-		mLLVMType = NULL;
-		mAlignLLVMType = NULL;
-		mInstLLVMType = NULL;
+		mType = NULL;
+		mAlignType = NULL;
+		mInstType = NULL;
 	}
 };
 
@@ -112,6 +137,7 @@ public:
 	llvm::LLVMContext* mLLVMContext;
 	llvm::Module* mLLVMModule;
 	llvm::Function* mActiveFunction;
+	BfIRTypeEx* mActiveFunctionType;
 	llvm::IRBuilder<>* mIRBuilder;
 	llvm::AttributeList* mAttrSet;
 	llvm::DIBuilder* mDIBuilder;
@@ -129,42 +155,57 @@ public:
 	int mConstValIdx;
 
 	int mCmdCount;
+	int mCurLine;
 	Dictionary<int, BfIRCodeGenEntry> mResults;
 	Dictionary<int, BfIRTypeEntry> mTypes;
 	Dictionary<int, llvm::Function*> mIntrinsicMap;
+	Dictionary<BfTypeCode, BfIRTypeEx*> mTypeCodeTypeExMap;
+	Dictionary<llvm::Type*, BfIRTypeEx*> mLLVMTypeExMap;
+	Dictionary<BfIRTypeEx*, BfIRTypeEx*> mPointerTypeExMap;
 	Dictionary<llvm::Function*, int> mIntrinsicReverseMap;
 	Array<llvm::Constant*> mConfigConsts32;
 	Array<llvm::Constant*> mConfigConsts64;
-	Dictionary<llvm::Type*, llvm::Value*> mReflectDataMap;
-	Dictionary<llvm::Type*, llvm::Type*> mAlignedTypeToNormalType;
-	Dictionary<llvm::Type*, int> mTypeToTypeIdMap;
+	Dictionary<BfIRTypeEx*, BfIRTypedValue> mReflectDataMap;
+	Dictionary<BfIRTypeEx*, BfIRTypeEx*> mAlignedTypeToNormalType;
+	Dictionary<BfIRTypeEx*, int> mTypeToTypeIdMap;
 	HashSet<llvm::BasicBlock*> mLockedBlocks;
 	OwnedArray<BfIRIntrinsicData> mIntrinsicData;
 	Dictionary<llvm::Function*, BfIRSimdType> mFunctionsUsingSimd;
+	Array<BfIRTypeEx*> mIRTypeExs;
+	BfIRTypedValue mLastFuncCalled;
 
 public:
 	void InitTarget();
 	void FixValues(llvm::StructType* structType, llvm::SmallVector<llvm::Value*, 8>& values);
 	void FixIndexer(llvm::Value*& val);
+	void FixTypedValue(BfIRTypedValue& typedValue);
 	BfTypeCode GetTypeCode(llvm::Type* type, bool isSigned);
 	llvm::Type* GetLLVMType(BfTypeCode typeCode, bool& isSigned);
+	BfIRTypeEx* GetTypeEx(llvm::Type* llvmType);
+	BfIRTypeEx* CreateTypeEx(llvm::Type* llvmType);
+	BfIRTypeEx* GetTypeEx(BfTypeCode typeCode, bool& isSigned);
+	BfIRTypeEx* GetPointerTypeEx(BfIRTypeEx* typeEx);
+	BfIRTypeEx* GetTypeMember(BfIRTypeEx* typeEx, int idx);
 	BfIRTypeEntry& GetTypeEntry(int typeId);
-	BfIRTypeEntry* GetTypeEntry(llvm::Type* type);
+	BfIRTypeEntry* GetTypeEntry(BfIRTypeEx* type);
 	void SetResult(int id, llvm::Value* value);
+	void SetResult(int id, const BfIRTypedValue& value);
 	void SetResultAligned(int id, llvm::Value* value);
+	void SetResultAligned(int id, const BfIRTypedValue& value);
 	void SetResult(int id, llvm::Type* value);
+	void SetResult(int id, BfIRTypeEx* typeEx);
 	void SetResult(int id, llvm::BasicBlock* value);
 	void SetResult(int id, llvm::MDNode* value);
 	void CreateMemSet(llvm::Value* addr, llvm::Value* val, llvm::Value* size, int alignment, bool isVolatile = false);
 	void AddNop();
-	llvm::Value* TryToVector(llvm::Value* value);
-	llvm::Value* TryToVector(llvm::Value* value, llvm::Type* elemType);
-	llvm::Type* GetElemType(llvm::Value* value);
-	bool TryMemCpy(llvm::Value* ptr, llvm::Value* val);
-	bool TryVectorCpy(llvm::Value* ptr, llvm::Value* val);
-	llvm::Type* GetSizeAlignedType(BfIRTypeEntry* typeEntry);
-	llvm::Value* GetAlignedPtr(llvm::Value* val);
-	llvm::Value* FixGEP(llvm::Value* fromValue, llvm::Value* result);
+	llvm::Value* TryToVector(const BfIRTypedValue& value);	
+	bool TryMemCpy(const BfIRTypedValue& ptr, llvm::Value* val);
+	bool TryVectorCpy(const BfIRTypedValue& ptr, llvm::Value* val);
+
+	llvm::Type* GetLLVMPointerElementType(BfIRTypeEx* typeEx);	
+
+	BfIRTypeEx* GetSizeAlignedType(BfIRTypeEntry* typeEntry);
+	BfIRTypedValue GetAlignedPtr(const BfIRTypedValue& val);	
 	llvm::Value* DoCheckedIntrinsic(llvm::Intrinsic::ID intrin, llvm::Value* lhs, llvm::Value* rhs, bool useAsm);
 
 public:
@@ -186,11 +227,15 @@ public:
 	void Read(bool& val);
 	void Read(int8& val);
 	void Read(BfIRTypeEntry*& type);
+	void Read(BfIRTypeEx*& typeEx, BfIRTypeEntry** outTypeEntry = NULL);
 	void Read(llvm::Type*& llvmType, BfIRTypeEntry** outTypeEntry = NULL);
 	void Read(llvm::FunctionType*& llvmType);
+	void ReadFunctionType(BfIRTypeEx*& typeEx);
+	void Read(BfIRTypedValue& llvmValue, BfIRCodeGenEntry** codeGenEntry = NULL, BfIRSizeAlignKind sizeAlignKind = BfIRSizeAlignKind_Original);
 	void Read(llvm::Value*& llvmValue, BfIRCodeGenEntry** codeGenEntry = NULL, BfIRSizeAlignKind sizeAlignKind = BfIRSizeAlignKind_Original);
-	void Read(llvm::Constant*& llvmConstant, BfIRSizeAlignKind sizeAlignKind = BfIRSizeAlignKind_Original);
+	void Read(llvm::Constant*& llvmConstant, BfIRSizeAlignKind sizeAlignKind = BfIRSizeAlignKind_Original);	
 	void Read(llvm::Function*& llvmFunc);
+	void ReadFunction(BfIRTypedValue& typeEx);
 	void Read(llvm::BasicBlock*& llvmBlock);
 	void Read(llvm::MDNode*& llvmMD);
 	void Read(llvm::Metadata*& llvmMD);
@@ -237,6 +282,7 @@ public:
 	String GetSimdTypeString(BfIRSimdType type);
 	BfIRSimdType GetSimdTypeFromFunction(llvm::Function* function);
 
+	BfIRTypedValue GetTypedValue(int streamId);
 	llvm::Value* GetLLVMValue(int streamId);
 	llvm::Type* GetLLVMType(int streamId);
 	llvm::BasicBlock* GetLLVMBlock(int streamId);

+ 11 - 2
IDEHelper/Compiler/BfModule.cpp

@@ -29,6 +29,15 @@
 #include <fcntl.h>
 #include <time.h>
 
+#pragma warning (disable:4267)
+//#include "llvm/Support/Compiler.h"
+//#include "llvm/IR/IRBuilder.h"
+//#include "llvm/IR/Type.h"
+#include "llvm/IR/DIBuilder.h"
+//#include "llvm/IR/DebugInfo.h"
+//#include "llvm/IR/Argument.h"
+//#include "llvm/IR/Constants.h"
+
 #pragma warning(pop)
 
 //////////////////////////////////////////////////////////////////////////
@@ -1249,8 +1258,8 @@ void BfModule::SetupIRBuilder(bool dbgVerifyCodeGen)
 		//  code as we walk the AST
 		//mBfIRBuilder->mDbgVerifyCodeGen = true;
 		if (
-			(mModuleName == "-")
-			//|| (mModuleName == "BeefTest2_ClearColorValue")
+			(mModuleName == "BeefTest_LLVMType")
+			|| (mModuleName == "System_ValueType")
 			//|| (mModuleName == "Tests_FuncRefs")
 			)
 			mBfIRBuilder->mDbgVerifyCodeGen = true;

+ 1 - 0
IDEHelper/Compiler/BfStmtEvaluator.cpp

@@ -27,6 +27,7 @@
 #pragma warning(disable:4800)
 #pragma warning(disable:4996)
 
+#include "llvm/IR/DIBuilder.h"
 #include "llvm/IR/Module.h"
 #include "llvm/IR/Constants.h"
 #include "llvm/IR/GlobalValue.h"

+ 3 - 3
IDEHelper/DebugManager.cpp

@@ -585,10 +585,10 @@ void ShowMemoryUsage()
 	return HeapAlloc(hHeap, dwFlags, dwBytes);
 }*/
 
-static void BfFatalErrorHandler(void *user_data, const std::string& reason, bool gen_crash_diag)
+static void BfFatalErrorHandler(void *user_data, const char* reason, bool gen_crash_diag)
 {
-	BF_FATAL(reason.c_str());
-	OutputDebugStrF("LLVM ERROR: %s\n", reason.c_str());
+	BF_FATAL(reason);
+	OutputDebugStrF("LLVM ERROR: %s\n", reason);
 }
 
 #ifdef BF_PLATFORM_WINDOWS

+ 12 - 6
IDEHelper/IDEHelper.vcxproj

@@ -140,6 +140,7 @@
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <SupportJustMyCode>false</SupportJustMyCode>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -161,20 +162,21 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_13_0_1\llvm\include;..\extern\llvm_win64_13_0_1\include;..\extern\llvm-project_13_0_1\llvm\lib\Target;..\extern\llvm_win64_13_0_1\lib\Target\AArch64;..\extern\llvm_win64_13_0_1\lib\Target\X86;..\extern\llvm-project_13_0_1\llvm\tools\clang\include;..\extern\curl\builds\libcurl-vc15-x64-release-static-zlib-static-ipv6-sspi-winssl\include</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_18_1_4\llvm\include;..\extern\llvm_win64_18_1_4\include;..\extern\llvm-project_18_1_4\llvm\lib\Target;..\extern\llvm_win64_18_1_4\lib\Target\AArch64;..\extern\llvm_win64_18_1_4\lib\Target\X86;..\extern\llvm-project_18_1_4\llvm\tools\clang\include;..\extern\curl\builds\libcurl-vc15-x64-release-static-zlib-static-ipv6-sspi-winssl\include</AdditionalIncludeDirectories>
       <BufferSecurityCheck>false</BufferSecurityCheck>
       <AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions>
       <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
       <SupportJustMyCode>false</SupportJustMyCode>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
       <GenerateDebugInformation>DebugFull</GenerateDebugInformation>
       <OutputFile>$(SolutionDir)\IDE\dist\$(TargetName).dll</OutputFile>
-      <AdditionalDependencies>rpcrt4.lib;cabinet.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;libcurl_a.lib;wininet.lib;LLVMMCDisassembler.lib;LLVMSupport.lib;LLVMMC.lib;LLVMObject.lib;LLVMCore.lib;LLVMBitReader.lib;LLVMAsmParser.lib;LLVMMCParser.lib;LLVMCodeGen.lib;LLVMTarget.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMSelectionDAG.lib;LLVMProfileData.lib;LLVMAnalysis.lib;LLVMAsmPrinter.lib;LLVMBitWriter.lib;LLVMVectorize.lib;LLVMipo.lib;LLVMInstrumentation.lib;LLVMDebugInfoDWARF.lib;LLVMDebugInfoPDB.lib;LLVMDebugInfoCodeView.lib;LLVMGlobalISel.lib;LLVMBinaryFormat.lib;LLVMBitstreamReader.lib;LLVMLTO.lib;LLVMPasses.lib;LLVMLinker.lib;LLVMIRReader.lib;LLVMDemangle.lib;LLVMTransformUtils.lib;LLVMAggressiveInstCombine.lib;LLVMCFGuard.lib;LLVMTextAPI.lib;LLVMRemarks.lib;LLVMX86Info.lib;LLVMX86Desc.lib;LLVMX86CodeGen.lib;LLVMX86AsmParser.lib;LLVMX86Disassembler.lib;LLVMAArch64Info.lib;LLVMAArch64Utils.lib;LLVMAArch64Desc.lib;LLVMAArch64CodeGen.lib;LLVMAArch64AsmParser.lib;LLVMAArch64Disassembler.lib;LLVMARMInfo.lib;LLVMARMUtils.lib;LLVMARMDesc.lib;LLVMARMCodeGen.lib;LLVMARMAsmParser.lib;LLVMARMDisassembler.lib;LLVMWebAssemblyInfo.lib;LLVMWebAssemblyDesc.lib;LLVMWebAssemblyCodeGen.lib;LLVMWebAssemblyAsmParser.lib;LLVMWebAssemblyDisassembler.lib;LLVMWebAssemblyUtils.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>..\extern\llvm_win64_13_0_1\Debug\lib; ..\extern\curl\builds\libcurl-vc15-x64-release-static-zlib-static-ipv6-sspi-winssl\lib;..\extern\curl\deps\lib;..\extern\jemalloc_win\x64\debug</AdditionalLibraryDirectories>
+      <AdditionalDependencies>rpcrt4.lib;cabinet.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;libcurl_a.lib;wininet.lib;LLVMMCDisassembler.lib;LLVMSupport.lib;LLVMMC.lib;LLVMObject.lib;LLVMCore.lib;LLVMBitReader.lib;LLVMAsmParser.lib;LLVMMCParser.lib;LLVMCodeGen.lib;LLVMTarget.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMSelectionDAG.lib;LLVMProfileData.lib;LLVMAnalysis.lib;LLVMAsmPrinter.lib;LLVMBitWriter.lib;LLVMVectorize.lib;LLVMipo.lib;LLVMInstrumentation.lib;LLVMDebugInfoDWARF.lib;LLVMDebugInfoPDB.lib;LLVMDebugInfoCodeView.lib;LLVMGlobalISel.lib;LLVMBinaryFormat.lib;LLVMBitstreamReader.lib;LLVMLTO.lib;LLVMPasses.lib;LLVMLinker.lib;LLVMIRReader.lib;LLVMDemangle.lib;LLVMTransformUtils.lib;LLVMAggressiveInstCombine.lib;LLVMCFGuard.lib;LLVMTextAPI.lib;LLVMRemarks.lib;LLVMX86Info.lib;LLVMX86Desc.lib;LLVMX86CodeGen.lib;LLVMX86AsmParser.lib;LLVMX86Disassembler.lib;LLVMAArch64Info.lib;LLVMAArch64Utils.lib;LLVMAArch64Desc.lib;LLVMAArch64CodeGen.lib;LLVMAArch64Disassembler.lib;LLVMARMInfo.lib;LLVMARMUtils.lib;LLVMARMDesc.lib;LLVMARMCodeGen.lib;LLVMARMDisassembler.lib;LLVMWebAssemblyInfo.lib;LLVMWebAssemblyDesc.lib;LLVMWebAssemblyCodeGen.lib;LLVMWebAssemblyDisassembler.lib;LLVMWebAssemblyUtils.lib;LLVMTargetParser.lib;LLVMIRPrinter.lib;LLVMWebAssemblyAsmParser.lib;LLVMObjCARCOpts.lib;LLVMCodeGenTypes.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>..\extern\llvm_win64_18_1_4\Debug\lib; ..\extern\curl\builds\libcurl-vc15-x64-release-static-zlib-static-ipv6-sspi-winssl\lib;..\extern\curl\deps\lib;..\extern\jemalloc_win\x64\debug</AdditionalLibraryDirectories>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <ImportLibrary>$(SolutionDir)\IDE\dist\$(TargetName).lib</ImportLibrary>
       <IgnoreSpecificDefaultLibraries>MSVCRT</IgnoreSpecificDefaultLibraries>
@@ -200,6 +202,7 @@
       <AdditionalIncludeDirectories>../;../BeefySysLib/platform/win;../BeefySysLib/third_party;C:\llvm-3.8\llvm\include;C:\llvm-3.8\bin\include;C:\llvm-3.8\llvm\lib\Target;C:\llvm-3.8\bin\lib\Target\X86;C:\llvm-3.8\llvm\tools\clang\include</AdditionalIncludeDirectories>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -222,10 +225,11 @@
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>zBP_DISABLED;WIN32;NDEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_13_0_1\llvm\include;..\extern\llvm_win64_13_0_1\include;..\extern\llvm-project_13_0_1\llvm\lib\Target;..\extern\llvm_win64_13_0_1\lib\Target\X86;..\extern\llvm-project_13_0_1\llvm\tools\clang\include;..\extern\curl\builds\libcurl-vc15-x64-release-static-zlib-static-ipv6-sspi-winssl\include</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>../;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_18_1_4\llvm\include;..\extern\llvm_win64_18_1_4\include;..\extern\llvm-project_18_1_4\llvm\lib\Target;..\extern\llvm_win64_18_1_4\lib\Target\X86;..\extern\llvm-project_18_1_4\llvm\tools\clang\include;..\extern\curl\builds\libcurl-vc15-x64-release-static-zlib-static-ipv6-sspi-winssl\include</AdditionalIncludeDirectories>
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
       <BufferSecurityCheck>false</BufferSecurityCheck>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -233,8 +237,8 @@
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <OutputFile>$(SolutionDir)\IDE\dist\$(TargetName).dll</OutputFile>
-      <AdditionalLibraryDirectories>..\extern\llvm_win64_13_0_1\Release\lib; ..\extern\curl\builds\libcurl-vc15-x64-release-static-zlib-static-ipv6-sspi-winssl\lib;..\extern\curl\deps\lib;..\extern\jemalloc_win\x64\release</AdditionalLibraryDirectories>
-      <AdditionalDependencies>rpcrt4.lib;cabinet.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;libcurl_a.lib;wininet.lib;LLVMMCDisassembler.lib;LLVMSupport.lib;LLVMMC.lib;LLVMObject.lib;LLVMCore.lib;LLVMBitReader.lib;LLVMAsmParser.lib;LLVMMCParser.lib;LLVMCodeGen.lib;LLVMTarget.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMSelectionDAG.lib;LLVMProfileData.lib;LLVMAnalysis.lib;LLVMAsmPrinter.lib;LLVMBitWriter.lib;LLVMVectorize.lib;LLVMipo.lib;LLVMInstrumentation.lib;LLVMDebugInfoDWARF.lib;LLVMDebugInfoPDB.lib;LLVMDebugInfoCodeView.lib;LLVMGlobalISel.lib;LLVMBinaryFormat.lib;LLVMBitstreamReader.lib;LLVMLTO.lib;LLVMPasses.lib;LLVMLinker.lib;LLVMIRReader.lib;LLVMDemangle.lib;LLVMTransformUtils.lib;LLVMAggressiveInstCombine.lib;LLVMCFGuard.lib;LLVMTextAPI.lib;LLVMRemarks.lib;LLVMX86Info.lib;LLVMX86Desc.lib;LLVMX86CodeGen.lib;LLVMX86AsmParser.lib;LLVMX86Disassembler.lib;LLVMAArch64Info.lib;LLVMAArch64Utils.lib;LLVMAArch64Desc.lib;LLVMAArch64CodeGen.lib;LLVMAArch64AsmParser.lib;LLVMAArch64Disassembler.lib;LLVMARMInfo.lib;LLVMARMUtils.lib;LLVMARMDesc.lib;LLVMARMCodeGen.lib;LLVMARMAsmParser.lib;LLVMARMDisassembler.lib;LLVMWebAssemblyInfo.lib;LLVMWebAssemblyDesc.lib;LLVMWebAssemblyCodeGen.lib;LLVMWebAssemblyAsmParser.lib;LLVMWebAssemblyDisassembler.lib;LLVMWebAssemblyUtils.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>..\extern\llvm_win64_18_1_4\Release\lib; ..\extern\curl\builds\libcurl-vc15-x64-release-static-zlib-static-ipv6-sspi-winssl\lib;..\extern\curl\deps\lib;..\extern\jemalloc_win\x64\release</AdditionalLibraryDirectories>
+      <AdditionalDependencies>rpcrt4.lib;cabinet.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;libcurl_a.lib;wininet.lib;LLVMMCDisassembler.lib;LLVMSupport.lib;LLVMMC.lib;LLVMObject.lib;LLVMCore.lib;LLVMBitReader.lib;LLVMAsmParser.lib;LLVMMCParser.lib;LLVMCodeGen.lib;LLVMTarget.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMSelectionDAG.lib;LLVMProfileData.lib;LLVMAnalysis.lib;LLVMAsmPrinter.lib;LLVMBitWriter.lib;LLVMVectorize.lib;LLVMipo.lib;LLVMInstrumentation.lib;LLVMDebugInfoDWARF.lib;LLVMDebugInfoPDB.lib;LLVMDebugInfoCodeView.lib;LLVMGlobalISel.lib;LLVMBinaryFormat.lib;LLVMBitstreamReader.lib;LLVMLTO.lib;LLVMPasses.lib;LLVMLinker.lib;LLVMIRReader.lib;LLVMDemangle.lib;LLVMTransformUtils.lib;LLVMAggressiveInstCombine.lib;LLVMCFGuard.lib;LLVMTextAPI.lib;LLVMRemarks.lib;LLVMX86Info.lib;LLVMX86Desc.lib;LLVMX86CodeGen.lib;LLVMX86AsmParser.lib;LLVMX86Disassembler.lib;LLVMAArch64Info.lib;LLVMAArch64Utils.lib;LLVMAArch64Desc.lib;LLVMAArch64CodeGen.lib;LLVMAArch64Disassembler.lib;LLVMARMInfo.lib;LLVMARMUtils.lib;LLVMARMDesc.lib;LLVMARMCodeGen.lib;LLVMARMDisassembler.lib;LLVMWebAssemblyInfo.lib;LLVMWebAssemblyDesc.lib;LLVMWebAssemblyCodeGen.lib;LLVMWebAssemblyDisassembler.lib;LLVMWebAssemblyUtils.lib;LLVMTargetParser.lib;LLVMIRPrinter.lib;LLVMWebAssemblyAsmParser.lib;LLVMObjCARCOpts.lib;LLVMCodeGenTypes.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <FullProgramDatabaseFile>true</FullProgramDatabaseFile>
       <ImportLibrary>$(SolutionDir)\IDE\dist\$(TargetName).lib</ImportLibrary>
@@ -255,6 +259,7 @@
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../;../BeefySysLib/platform/win;../BeefySysLib/third_party;C:\llvm\llvm\include;C:\llvm\src\include;C:\llvm\llvm\lib\Target;C:\llvm\src\lib\Target\X86;C:\llvm\llvm\tools\clang\include</AdditionalIncludeDirectories>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -279,6 +284,7 @@
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>../;../BeefySysLib/platform/win;../BeefySysLib/third_party;C:\llvm\llvm\include;C:\llvm\src\include;C:\llvm\llvm\lib\Target;C:\llvm\src\lib\Target\X86;C:\llvm\llvm\tools\clang\include</AdditionalIncludeDirectories>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <LanguageStandard>stdcpp17</LanguageStandard>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>

+ 10 - 7
IDEHelper/X64.cpp

@@ -14,7 +14,10 @@
 #include "llvm/Support/SourceMgr.h"
 #include "llvm/MC/MCContext.h"
 #include "llvm/ADT/StringRef.h"
-#include "llvm/Support/TargetRegistry.h"
+#include "llvm/MC/TargetRegistry.h"
+#include "llvm/MC/MCInstrInfo.h"
+#include "llvm/MC/MCRegisterInfo.h"
+#include "llvm/MC/MCSubtargetInfo.h"
 #include "llvm/IR/InlineAsm.h"
 //#include "llvm/Support/MemoryObject.h"
 #include "llvm/Target/TargetOptions.h"
@@ -363,8 +366,8 @@ bool X64Instr::IsLoadAddress()
 	const MCInstrDesc &instDesc = mX64->mInstrInfo->get(mMCInst.getOpcode());
 	if (instDesc.NumOperands >= 6)
 	{
-		if ((instDesc.OpInfo[0].OperandType == MCOI::OPERAND_REGISTER) &&
-			(instDesc.OpInfo[4].OperandType == MCOI::OPERAND_MEMORY))
+		if ((instDesc.operands()[0].OperandType == MCOI::OPERAND_REGISTER) &&
+			(instDesc.operands()[4].OperandType == MCOI::OPERAND_MEMORY))
 			return true;
 	}
 
@@ -724,7 +727,7 @@ uint64 X64Instr::GetTarget(Debugger* debugger, X64CPURegisters* registers)
 	auto operand = mMCInst.getOperand(0);
 	if (mMCInst.getNumOperands() > 4)
 	{
-		if ((instDesc.OpInfo[0].OperandType == MCOI::OPERAND_REGISTER) && (instDesc.OpInfo[4].OperandType == MCOI::OPERAND_MEMORY))
+		if ((instDesc.operands()[0].OperandType == MCOI::OPERAND_REGISTER) && (instDesc.operands()[4].OperandType == MCOI::OPERAND_MEMORY))
 		{
 			opIdx = 4;
 			operand = mMCInst.getOperand(opIdx);
@@ -734,7 +737,7 @@ uint64 X64Instr::GetTarget(Debugger* debugger, X64CPURegisters* registers)
 	if (operand.isImm())
 	{
 		auto targetAddr = (uint64)operand.getImm();
-		if (instDesc.OpInfo[opIdx].OperandType == MCOI::OPERAND_PCREL)
+		if (instDesc.operands()[opIdx].OperandType == MCOI::OPERAND_PCREL)
 			targetAddr += mAddress + mSize;
 		return targetAddr;
 	}
@@ -1109,8 +1112,8 @@ void X64CPU::GetClobbersForMnemonic(const StringImpl& mnemonic, int argCount, Ar
 		if (!outMayClobberMem && desc.mayStore())
 			outMayClobberMem = true;
 
-		int numImplicits = desc.getNumImplicitDefs();
-		auto impPtr = desc.getImplicitDefs();
+		int numImplicits = (int)desc.implicit_defs().size();
+		auto& impPtr = desc.implicit_defs();
 		for (int iImp = 0; iImp<numImplicits; ++iImp)
 			impRegs.Add(impPtr[iImp]);
 	}

+ 11 - 7
IDEHelper/X86.cpp

@@ -12,13 +12,17 @@
 #include "llvm/Support/SourceMgr.h"
 #include "llvm/MC/MCContext.h"
 #include "llvm/ADT/StringRef.h"
-#include "llvm/Support/TargetRegistry.h"
+#include "llvm/MC/TargetRegistry.h"
 #include "llvm/Target/TargetOptions.h"
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/IR/InlineAsm.h"
 //#include "llvm/Target/TargetSubtargetInfo.h"
 //#include "llvm/Target/TargetInstrInfo.h"
 #include "llvm/MC/MCAsmInfo.h"
+#include "llvm/MC/MCInstrDesc.h"
+#include "llvm/MC/MCSubtargetInfo.h"
+#include "llvm/MC/MCInstrInfo.h"
+#include "llvm/MC/MCRegisterInfo.h"
 #include "llvm/MC/MCStreamer.h"
 #include "llvm/MC/MCDisassembler/MCDisassembler.h"
 #include "llvm/MC/MCParser/MCAsmParser.h"
@@ -212,8 +216,8 @@ bool X86Instr::IsLoadAddress()
 	const MCInstrDesc &instDesc = mX86->mInstrInfo->get(mMCInst.getOpcode());
 	if (instDesc.NumOperands >= 6)
 	{
-		if ((instDesc.OpInfo[0].OperandType == MCOI::OPERAND_REGISTER) &&
-			(instDesc.OpInfo[4].OperandType == MCOI::OPERAND_MEMORY))
+		if ((instDesc.operands()[0].OperandType == MCOI::OPERAND_REGISTER) &&
+			(instDesc.operands()[4].OperandType == MCOI::OPERAND_MEMORY))
 			return true;
 	}
 
@@ -384,7 +388,7 @@ uint32 X86Instr::GetTarget(Debugger* debugger, X86CPURegisters* registers)
 
 	int opIdx = 0;
 	auto operand = mMCInst.getOperand(0);
-	if ((mMCInst.getNumOperands() >= 5) && (instDesc.OpInfo[0].OperandType == MCOI::OPERAND_REGISTER) && (instDesc.OpInfo[4].OperandType == MCOI::OPERAND_MEMORY))
+	if ((mMCInst.getNumOperands() >= 5) && (instDesc.operands()[0].OperandType == MCOI::OPERAND_REGISTER) && (instDesc.operands()[4].OperandType == MCOI::OPERAND_MEMORY))
 	{
 		opIdx = 4;
 		operand = mMCInst.getOperand(opIdx);
@@ -396,7 +400,7 @@ uint32 X86Instr::GetTarget(Debugger* debugger, X86CPURegisters* registers)
 		//TODO: LLVM3.8 - add changes to MCInst?
 		/*if (instDesc.OpInfo[opIdx].OperandType == MCOI::OPERAND_PCREL)
 			targetAddr += mMCInst.getPCAddr() + mMCInst.getInstLength();*/
-		if (instDesc.OpInfo[opIdx].OperandType == MCOI::OPERAND_PCREL)
+		if (instDesc.operands()[opIdx].OperandType == MCOI::OPERAND_PCREL)
 			targetAddr += mAddress + mSize;
 		return targetAddr;
 	}
@@ -699,8 +703,8 @@ void X86CPU::GetClobbersForMnemonic(const StringImpl& mnemonic, int argCount, Ar
 		if (!outMayClobberMem && desc.mayStore())
 			outMayClobberMem = true;
 
-		int numImplicits = desc.getNumImplicitDefs();
-		auto impPtr = desc.getImplicitDefs();
+		int numImplicits = (int)desc.implicit_defs().size();
+		auto impPtr = desc.implicit_defs();
 		for (int iImp=0; iImp<numImplicits; ++iImp)
 			impRegs.Add(impPtr[iImp]);
 	}

+ 3 - 3
IDEHelper/X86Target.cpp

@@ -11,7 +11,7 @@
 #include "llvm/Support/SourceMgr.h"
 #include "llvm/MC/MCContext.h"
 #include "llvm/ADT/StringRef.h"
-#include "llvm/Support/TargetRegistry.h"
+#include "llvm/MC/TargetRegistry.h"
 //#include "llvm/Support/MemoryObject.h"
 #include "llvm/Target/TargetOptions.h"
 #include "llvm/Target/TargetMachine.h"
@@ -29,8 +29,8 @@
 #include "llvm/Support/TargetSelect.h"
 
 #include "llvm/Transforms/Scalar.h"
-#include "llvm-c/Initialization.h"
-#include "llvm-c/Transforms/Scalar.h"
+//#include "llvm-c/Initialization.h"
+//#include "llvm-c/Transforms/Scalar.h"
 #include "llvm/Analysis/BasicAliasAnalysis.h"
 #include "llvm/Analysis/Passes.h"
 #include "llvm/Analysis/ScopedNoAliasAA.h"

+ 7 - 7
extern/llvm_build.bat

@@ -1,20 +1,20 @@
 PUSHD %~dp0
 
-@IF EXIST llvm-project_13_0_1 GOTO LLVM_HAS
-git clone --depth 1 --branch llvmorg-13.0.1 --config core.autocrlf=false https://github.com/llvm/llvm-project.git llvm-project_13_0_1
+@IF EXIST llvm-project_18_1_4 GOTO LLVM_HAS
+git clone --depth 1 --branch llvmorg-18.1.4 --config core.autocrlf=false https://github.com/llvm/llvm-project.git llvm-project_18_1_4
 @IF %ERRORLEVEL% NEQ 0 GOTO HADERROR
 
 :LLVM_HAS
 
-@IF EXIST llvm_win64_13_0_1 GOTO HAS_CONFIG
-mkdir llvm_win64_13_0_1
-cd llvm_win64_13_0_1
-cmake ../llvm-project_13_0_1/llvm -G"Visual Studio 17 2022" -Ax64 -Thost=x64 -DLLVM_USE_CRT_DEBUG:STRING="MTd" -DLLVM_USE_CRT_RELEASE:STRING="MT" -DLLVM_TARGETS_TO_BUILD="AArch64;ARM;X86;WebAssembly"
+@IF EXIST llvm_win64_18_1_4 GOTO HAS_CONFIG
+mkdir llvm_win64_18_1_4
+cd llvm_win64_18_1_4
+cmake ../llvm-project_18_1_4/llvm -G"Visual Studio 17 2022" -Ax64 -Thost=x64 -D CMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded$<$<CONFIG:Debug>:Debug>" -DLLVM_TARGETS_TO_BUILD="AArch64;ARM;X86;WebAssembly"
 @IF %ERRORLEVEL% NEQ 0 GOTO HADERROR
 @GOTO DOBUILD
 
 :HAS_CONFIG
-cd llvm_win64_13_0_1
+cd llvm_win64_18_1_4
 @GOTO DOBUILD
 
 :DOBUILD

部分文件因为文件数量过多而无法显示