Browse Source

LLVM 13.0.1 fixes

disarray2077 3 years ago
parent
commit
43d4be6be8
4 changed files with 63 additions and 33 deletions
  1. 47 27
      IDEHelper/Compiler/BfIRCodeGen.cpp
  2. 2 2
      IDEHelper/IDEHelper.vcxproj
  3. 7 2
      IDEHelper/X64.cpp
  4. 7 2
      IDEHelper/X86.cpp

+ 47 - 27
IDEHelper/Compiler/BfIRCodeGen.cpp

@@ -674,7 +674,9 @@ void BfIRCodeGen::SetResult(int id, llvm::MDNode* md)
 
 void BfIRCodeGen::ProcessBfIRData(const BfSizedArray<uint8>& buffer)
 {
-	struct InlineAsmErrorHook
+    // Diagnostic handlers were unified in LLVM change 5de2d189e6ad, so starting
+    // with LLVM 13 this function is gone.
+	/*struct InlineAsmErrorHook
 	{		
 		static void StaticHandler(const llvm::SMDiagnostic& diag, void *context, unsigned locCookie)
 		{
@@ -688,7 +690,7 @@ void BfIRCodeGen::ProcessBfIRData(const BfSizedArray<uint8>& buffer)
 			}
 		}		
 	};	
-	mLLVMContext->setInlineAsmDiagnosticHandler(InlineAsmErrorHook::StaticHandler, this);
+	mLLVMContext->setInlineAsmDiagnosticHandler(InlineAsmErrorHook::StaticHandler, this);*/
 
 	BF_ASSERT(mStream == NULL);
 	mStream = new ChunkedDataBuffer();
@@ -924,7 +926,7 @@ void BfIRCodeGen::Read(llvm::Value*& llvmValue, BfIRCodeGenEntry** codeGenEntry,
 				llvm::ConstantInt::get(llvm::Type::getInt32Ty(*mLLVMContext), idx0),
 				llvm::ConstantInt::get(llvm::Type::getInt32Ty(*mLLVMContext), idx1)};
 
-			llvmValue = FixGEP(target, llvm::ConstantExpr::getInBoundsGetElementPtr(NULL, target, gepArgs));
+			llvmValue = FixGEP(target, llvm::ConstantExpr::getInBoundsGetElementPtr(target->getType()->getPointerElementType(), target, gepArgs));
 			return;
 		}
 		else if (constType == BfConstType_ExtractValue)
@@ -1273,7 +1275,7 @@ llvm::Value* BfIRCodeGen::TryToVector(llvm::Value* value, llvm::Type* elemType)
 			return mIRBuilder->CreateAlignedLoad(ptrVal0, llvm::MaybeAlign(1));
 		}
 
-		if (auto vecType = llvm::dyn_cast<llvm::VectorType>(ptrElemType))
+		if (auto vecType = llvm::dyn_cast<llvm::FixedVectorType>(ptrElemType))
 		{
 			if (vecType->getElementType() == elemType)
 				return mIRBuilder->CreateAlignedLoad(value, llvm::MaybeAlign(1));
@@ -1567,7 +1569,7 @@ void BfIRCodeGen::CreateMemSet(llvm::Value* addr, llvm::Value* val, llvm::Value*
 						headVal = mIRBuilder->CreateBitCast(addr, intTy->getPointerTo());
 					llvm::Value* ptrVal = headVal;
 					if (curOffset != 0)
-						ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(NULL, headVal, curOffset / 8);
+						ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(intTy, headVal, curOffset / 8);
 					mIRBuilder->CreateStore(constVal, ptrVal, isVolatile);
 
 					curOffset += 8;
@@ -1586,7 +1588,7 @@ void BfIRCodeGen::CreateMemSet(llvm::Value* addr, llvm::Value* val, llvm::Value*
 						headVal = mIRBuilder->CreateBitCast(addr, intTy->getPointerTo());
 					llvm::Value* ptrVal = headVal;
 					if (curOffset != 0)
-						ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(NULL, headVal, curOffset / 4);
+						ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(intTy, headVal, curOffset / 4);
 					mIRBuilder->CreateStore(constVal, ptrVal, isVolatile);
 
 					curOffset += 4;
@@ -1605,7 +1607,7 @@ void BfIRCodeGen::CreateMemSet(llvm::Value* addr, llvm::Value* val, llvm::Value*
 						headVal = mIRBuilder->CreateBitCast(addr, intTy->getPointerTo());
 					llvm::Value* ptrVal = headVal;
 					if (curOffset != 0)
-						ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(NULL, headVal, curOffset / 2);
+						ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(intTy, headVal, curOffset / 2);
 					mIRBuilder->CreateStore(constVal, ptrVal, isVolatile);
 
 					curOffset += 2;
@@ -1624,7 +1626,7 @@ void BfIRCodeGen::CreateMemSet(llvm::Value* addr, llvm::Value* val, llvm::Value*
 						headVal = mIRBuilder->CreateBitCast(addr, intTy->getPointerTo());
 					llvm::Value* ptrVal = headVal;
 					if (curOffset != 0)
-						ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(NULL, headVal, curOffset / 1);
+						ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(intTy, headVal, curOffset / 1);
 					mIRBuilder->CreateStore(constVal, ptrVal, isVolatile);
 
 					curOffset += 1;
@@ -1787,7 +1789,7 @@ void BfIRCodeGen::HandleNextCmd()
 		{
 			CMD_PARAM(String, fileName);
 			std::error_code ec;
-			llvm::raw_fd_ostream outStream(fileName.c_str(), ec, llvm::sys::fs::OpenFlags::F_Text);
+			llvm::raw_fd_ostream outStream(fileName.c_str(), ec, llvm::sys::fs::OpenFlags::OF_Text);
 			if (ec)
 			{
 				Fail("Failed writing IR '" + fileName + "': " + ec.message());
@@ -2311,12 +2313,12 @@ void BfIRCodeGen::HandleNextCmd()
 
 			if (auto alignedPtr = GetAlignedPtr(val))
 			{
-				auto gepResult = mIRBuilder->CreateConstInBoundsGEP1_32(NULL, alignedPtr, idx0);
+				auto gepResult = mIRBuilder->CreateConstInBoundsGEP1_32(alignedPtr->getType()->getPointerElementType(), alignedPtr, idx0);
 				SetResult(curId, mIRBuilder->CreateBitCast(gepResult, val->getType()));
 				break;
 			}
 
-			SetResult(curId, mIRBuilder->CreateConstInBoundsGEP1_32(NULL, val, idx0));
+			SetResult(curId, mIRBuilder->CreateConstInBoundsGEP1_32(val->getType()->getPointerElementType(), val, idx0));
 		}
 		break;
 	case BfIRCmd_InboundsGEP2_32:
@@ -2324,7 +2326,7 @@ void BfIRCodeGen::HandleNextCmd()
 			CMD_PARAM(llvm::Value*, val);
 			CMD_PARAM(int, idx0);
 			CMD_PARAM(int, idx1);
-			SetResult(curId, FixGEP(val, mIRBuilder->CreateConstInBoundsGEP2_32(NULL, val, idx0, idx1)));
+			SetResult(curId, FixGEP(val, mIRBuilder->CreateConstInBoundsGEP2_32(val->getType()->getPointerElementType(), val, idx0, idx1)));
 		}
 		break;
 	case BfIRCmd_InBoundsGEP1:
@@ -3112,7 +3114,7 @@ void BfIRCodeGen::HandleNextCmd()
 
 								if (result != NULL)
 								{
-									if (auto vecType = llvm::dyn_cast<llvm::VectorType>(result->getType()))
+									if (auto vecType = llvm::dyn_cast<llvm::FixedVectorType>(result->getType()))
 									{
 										if (auto intType = llvm::dyn_cast<llvm::IntegerType>(vecType->getElementType()))
 										{
@@ -3180,7 +3182,7 @@ void BfIRCodeGen::HandleNextCmd()
 
 								if (result != NULL)
 								{
-									if (auto vecType = llvm::dyn_cast<llvm::VectorType>(result->getType()))
+									if (auto vecType = llvm::dyn_cast<llvm::FixedVectorType>(result->getType()))
 									{
 										if (auto intType = llvm::dyn_cast<llvm::IntegerType>(vecType->getElementType()))
 										{
@@ -3336,7 +3338,7 @@ void BfIRCodeGen::HandleNextCmd()
 							}
 						}
 
-						auto inst = mIRBuilder->CreateAtomicCmpXchg(args[0], args[1], args[2], successOrdering, failOrdering);
+						auto inst = mIRBuilder->CreateAtomicCmpXchg(args[0], args[1], args[2], llvm::MaybeAlign(), successOrdering, failOrdering);
 						if (intrinsicData->mIntrinsic == BfIRIntrinsic_AtomicCmpStore_Weak)
 							inst->setWeak(true);
 						if ((memoryKind & BfIRAtomicOrdering_Volatile) != 0)
@@ -3547,7 +3549,7 @@ void BfIRCodeGen::HandleNextCmd()
 							break;
 						}
 												
-						auto atomicRMW = mIRBuilder->CreateAtomicRMW(op, args[0], args[1], ordering);
+						auto atomicRMW = mIRBuilder->CreateAtomicRMW(op, args[0], args[1], llvm::MaybeAlign(), ordering);
 						if ((memoryKind & BfIRAtomicOrdering_Volatile) != 0)
 							atomicRMW->setVolatile(true);
 						llvm::Value* result = atomicRMW;
@@ -3776,7 +3778,17 @@ void BfIRCodeGen::HandleNextCmd()
 			CMD_PARAM(int, argIdx);
 			BfIRAttribute attribute = (BfIRAttribute)mStream->Read();
 			BF_ASSERT(llvm::isa<llvm::CallInst>(callInst));
-			((llvm::CallInst*)callInst)->addAttribute(argIdx, LLVMMapAttribute(attribute));
+			auto attr = LLVMMapAttribute(attribute);
+			if (attr == llvm::Attribute::StructRet)
+			{
+				// FIXME: StructRet changed from EnumAttr to TypeAttr
+				//llvm::Attribute sret = llvm::Attribute::getWithStructRetType(*mLLVMContext, srt);
+				//((llvm::CallInst*)callInst)->addAttribute(argIdx, sret);
+			}
+			else
+			{
+				((llvm::CallInst*)callInst)->addAttribute(argIdx, attr);
+			}
 		}
 		break;
 	case BfIRCmd_Call_AddAttribute1:
@@ -3794,12 +3806,13 @@ void BfIRCodeGen::HandleNextCmd()
 				}
 				else if (attribute == BfIRAttribute_ByVal)
 				{
-					llvm::AttrBuilder B;
+					// FIXME: Adding integer/type attribute without an argument.
+					/*llvm::AttrBuilder B;
 					B.addAttribute(llvm::Attribute::ByVal);
 					B.addAlignmentAttr(arg);
 					auto attrList = ((llvm::CallInst*)callInst)->getAttributes();
 					attrList = attrList.addAttributes(*mLLVMContext, argIdx, B);
-					((llvm::CallInst*)callInst)->setAttributes(attrList);
+					((llvm::CallInst*)callInst)->setAttributes(attrList);*/
 				}
 			}
 		}
@@ -3854,7 +3867,13 @@ void BfIRCodeGen::HandleNextCmd()
 			else
 			{
 				auto attr = LLVMMapAttribute(attribute);
-				if (attr != llvm::Attribute::None)
+				if (attr == llvm::Attribute::StructRet)
+				{
+					// FIXME: StructRet changed from EnumAttr to TypeAttr
+					//llvm::Attribute sret = llvm::Attribute::getWithStructRetType(*mLLVMContext, srt);
+					//func->addAttribute(argIdx, sret);
+				}
+				else if (attr != llvm::Attribute::None)
 					func->addAttribute(argIdx, attr);
 			}
 		}
@@ -3871,12 +3890,13 @@ void BfIRCodeGen::HandleNextCmd()
 			}
 			else if (attribute == BfIRAttribute_ByVal)
 			{
-				llvm::AttrBuilder B;
+				// FIXME: Adding integer/type attribute without an argument.
+				/*llvm::AttrBuilder B;
 				B.addAttribute(llvm::Attribute::ByVal);
 				B.addAlignmentAttr(arg);
 				auto attrList = ((llvm::Function*)func)->getAttributes();
 				attrList = attrList.addAttributes(*mLLVMContext, argIdx, B);
-				((llvm::Function*)func)->setAttributes(attrList);				
+				((llvm::Function*)func)->setAttributes(attrList);*/			
 			}
 		}
 		break;
@@ -3966,7 +3986,7 @@ void BfIRCodeGen::HandleNextCmd()
 			CMD_PARAM(int, column);
 			CMD_PARAM(llvm::MDNode*, diScope);
 			CMD_PARAM(llvm::MDNode*, diInlinedAt);
-			mDebugLoc = llvm::DebugLoc::get(line, column, diScope, diInlinedAt);			
+			mDebugLoc = llvm::DILocation::get(*mLLVMContext, line, column, diScope, diInlinedAt);
 		}
 		break;
 	case BfIRCmd_Nop:
@@ -5179,7 +5199,7 @@ static void PopulateModulePassManager(llvm::legacy::PassManagerBase &MPM, const
 	// convert to more optimized IR using more aggressive simplify CFG options.
 	// The extra sinking transform can create larger basic blocks, so do this
 	// before SLP vectorization.
-	MPM.add(llvm::createCFGSimplificationPass(1, true, true, false, true));
+	MPM.add(llvm::createCFGSimplificationPass({ 1, true, true, false, false, true }));
 
 	if (options.mRunSLPAfterLoopVectorization && options.mSLPVectorize) {
 		MPM.add(llvm::createSLPVectorizerPass()); // Vectorize parallel scalar chains.
@@ -5343,7 +5363,7 @@ bool BfIRCodeGen::WriteObjectFile(const StringImpl& outFileName)
 	}
 		
 	std::error_code EC;
-	llvm::sys::fs::OpenFlags OpenFlags = llvm::sys::fs::F_None;
+	llvm::sys::fs::OpenFlags OpenFlags = llvm::sys::fs::OF_None;
 
 	llvm::raw_fd_ostream out(outFileName.c_str(), EC, OpenFlags);
 
@@ -5368,7 +5388,7 @@ bool BfIRCodeGen::WriteObjectFile(const StringImpl& outFileName)
 	if ((enableLTO) || (mCodeGenOptions.mWriteBitcode))
 	{
 		std::error_code ec;
-		outStream = new llvm::raw_fd_ostream(outFileName.c_str(), ec, llvm::sys::fs::F_None);
+		outStream = new llvm::raw_fd_ostream(outFileName.c_str(), ec, llvm::sys::fs::OF_None);
 		if (outStream->has_error())
 		{
 			return false;
@@ -5438,7 +5458,7 @@ bool BfIRCodeGen::WriteObjectFile(const StringImpl& outFileName)
 bool BfIRCodeGen::WriteIR(const StringImpl& outFileName, StringImpl& error)
 {
 	std::error_code ec;	
-	llvm::raw_fd_ostream outStream(outFileName.c_str(), ec, llvm::sys::fs::OpenFlags::F_Text);
+	llvm::raw_fd_ostream outStream(outFileName.c_str(), ec, llvm::sys::fs::OpenFlags::OF_Text);
 	if (ec)
 	{
 	 	error = ec.message();

+ 2 - 2
IDEHelper/IDEHelper.vcxproj

@@ -171,7 +171,7 @@
       <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;%(AdditionalDependencies)</AdditionalDependencies>
+      <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_11_0_0\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>
@@ -230,7 +230,7 @@
       <OptimizeReferences>true</OptimizeReferences>
       <OutputFile>$(SolutionDir)\IDE\dist\$(TargetName).dll</OutputFile>
       <AdditionalLibraryDirectories>..\extern\llvm_win64_11_0_0\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;%(AdditionalDependencies)</AdditionalDependencies>
+      <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>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <FullProgramDatabaseFile>true</FullProgramDatabaseFile>
       <ImportLibrary>$(SolutionDir)\IDE\dist\$(TargetName).lib</ImportLibrary>

+ 7 - 2
IDEHelper/X64.cpp

@@ -835,9 +835,14 @@ X64CPU::X64CPU() :
 		return;
 
 	mInstrInfo = TheX86_64Target.createMCInstrInfo();
+	
+	mMCContext = new MCContext(Triple(triple), mAsmInfo, mRegisterInfo, mSubtargetInfo);
+
+	mMCObjectFileInfo = TheX86_64Target.createMCObjectFileInfo(*mMCContext, false);
+	if (!mMCObjectFileInfo)
+		return;
 
-	mMCObjectFileInfo = new MCObjectFileInfo();
-	mMCContext = new MCContext(mAsmInfo, mRegisterInfo, mMCObjectFileInfo);
+	mMCContext->setObjectFileInfo(mMCObjectFileInfo);
 
 	MCDisassembler *disAsm = TheX86_64Target.createMCDisassembler(*mSubtargetInfo, *mMCContext);
 	mDisAsm = disAsm;

+ 7 - 2
IDEHelper/X86.cpp

@@ -443,8 +443,13 @@ X86CPU::X86CPU() :
 
 	mInstrInfo = TheX86_32Target.createMCInstrInfo();
 
-	mMCObjectFileInfo = new MCObjectFileInfo();
-	mMCContext = new MCContext(mAsmInfo, mRegisterInfo, mMCObjectFileInfo);
+	mMCContext = new MCContext(Triple(triple), mAsmInfo, mRegisterInfo, mSubtargetInfo);
+
+	mMCObjectFileInfo = TheX86_32Target.createMCObjectFileInfo(*mMCContext, false);
+	if (!mMCObjectFileInfo)
+		return;
+
+	mMCContext->setObjectFileInfo(mMCObjectFileInfo);
 
 	MCDisassembler *disAsm = TheX86_32Target.createMCDisassembler(*mSubtargetInfo, *mMCContext);
 	mDisAsm = disAsm;