diff --git a/BeefBoot/BeefBoot.vcxproj b/BeefBoot/BeefBoot.vcxproj index 0eba9b77..5a13fb11 100644 --- a/BeefBoot/BeefBoot.vcxproj +++ b/BeefBoot/BeefBoot.vcxproj @@ -106,7 +106,7 @@ Level3 Disabled _DEBUG;_CONSOLE;%(PreprocessorDefinitions) - ../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_11_0_0\llvm\include;..\extern\llvm_win64_11_0_0\include;..\extern\llvm-project_11_0_0\llvm\lib\Target;..\extern\llvm_win64_11_0_0\lib\Target\X86;..\extern\llvm-project_11_0_0\llvm\tools\clang\include + ../;../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 true false MultiThreadedDebug @@ -146,7 +146,7 @@ true NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true - ../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_11_0_0\llvm\include;..\extern\llvm_win64_11_0_0\include;..\extern\llvm-project_11_0_0\llvm\lib\Target;..\extern\llvm_win64_11_0_0\lib\Target\X86;..\extern\llvm\tools\clang\include + ../;../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\tools\clang\include MultiThreaded false diff --git a/BeefBoot/CMakeLists.txt b/BeefBoot/CMakeLists.txt index 9ceb3c88..08236d59 100644 --- a/BeefBoot/CMakeLists.txt +++ b/BeefBoot/CMakeLists.txt @@ -44,8 +44,8 @@ if (${APPLE}) ../BeefySysLib/ ../BeefySysLib/third_party ../BeefySysLib/third_party/freetype/include - ../extern/llvm-project_11_0_0/llvm/include - ../extern/llvm-project_11_0_0/llvm/lib/Target + ../extern/llvm-project_13_0_1/llvm/include + ../extern/llvm-project_13_0_1/llvm/lib/Target ../IDEHelper ../BeefySysLib/platform/osx @@ -57,8 +57,8 @@ else() ../BeefySysLib/ ../BeefySysLib/third_party ../BeefySysLib/third_party/freetype/include - ../extern/llvm-project_11_0_0/llvm/include - ../extern/llvm-project_11_0_0/llvm/lib/Target + ../extern/llvm-project_13_0_1/llvm/include + ../extern/llvm-project_13_0_1/llvm/lib/Target ../IDEHelper ../BeefySysLib/platform/linux @@ -74,18 +74,18 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug") -D_DEBUG ) include_directories( - ../extern/llvm_linux_11_0_0/include - ../extern/llvm_linux_11_0_0/lib/Target/X86 + ../extern/llvm_linux_13_0_1/include + ../extern/llvm_linux_13_0_1/lib/Target/X86 ) set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}") - set(LLVM_LIB "${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_11_0_0/lib") + set(LLVM_LIB "${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_13_0_1/lib") else() include_directories( - ../extern/llvm_linux_rel_11_0_0/include - ../extern/llvm_linux_rel_11_0_0/lib/Target/X86 + ../extern/llvm_linux_rel_13_0_1/include + ../extern/llvm_linux_rel_13_0_1/lib/Target/X86 ) set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/${OUTPUT_RELEASE}") - set(LLVM_LIB "${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_rel_11_0_0/lib") + set(LLVM_LIB "${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_rel_13_0_1/lib") endif() ################### Dependencies ################## @@ -134,7 +134,7 @@ add_executable(${PROJECT_NAME} ) execute_process( - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_11_0_0/bin/llvm-config --system-libs --link-static + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_13_0_1/bin/llvm-config --system-libs --link-static OUTPUT_VARIABLE LLVM_SYSTEM_LIBS OUTPUT_STRIP_TRAILING_WHITESPACE ) diff --git a/Debugger32/Debugger32.vcxproj b/Debugger32/Debugger32.vcxproj index c4bd07ae..9c1e17a8 100644 --- a/Debugger32/Debugger32.vcxproj +++ b/Debugger32/Debugger32.vcxproj @@ -145,7 +145,7 @@ Level3 Disabled BF_DBG_32;WIN32;_DEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions) - ../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_11_0_0\llvm\include;..\extern\llvm_win64_11_0_0\include;..\extern\llvm-project_11_0_0\llvm\lib\Target;..\extern\llvm_win64_11_0_0\lib\Target\X86;..\extern\llvm-project_11_0_0\llvm\tools\clang\include + ../;../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 false -D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions) false @@ -183,7 +183,7 @@ true true BF_DBG_32;WIN32;NDEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions) - ../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_11_0_0\llvm\include;..\extern\llvm_win64_11_0_0\include;..\extern\llvm-project_11_0_0\llvm\lib\Target;..\extern\llvm_win64_11_0_0\lib\Target\X86;..\extern\llvm-project_11_0_0\llvm\tools\clang\include + ../;../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 MultiThreaded false diff --git a/Debugger64/Debugger64.vcxproj b/Debugger64/Debugger64.vcxproj index 2c281774..57e46574 100644 --- a/Debugger64/Debugger64.vcxproj +++ b/Debugger64/Debugger64.vcxproj @@ -145,7 +145,7 @@ Level3 Disabled BF_DBG_64;WIN32;_DEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions) - ../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_11_0_0\llvm\include;..\extern\llvm_win64_11_0_0\include;..\extern\llvm-project_11_0_0\llvm\lib\Target;..\extern\llvm_win64_11_0_0\lib\Target\X86;..\extern\llvm-project_11_0_0\llvm\tools\clang\include + ../;../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 false -D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions) false @@ -183,7 +183,7 @@ true true BF_DBG_64;WIN32;NDEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions) - ../;../IDEHelper;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_11_0_0\llvm\include;..\extern\llvm_win64_11_0_0\include;..\extern\llvm-project_11_0_0\llvm\lib\Target;..\extern\llvm_win64_11_0_0\lib\Target\X86;..\extern\llvm-project_11_0_0\llvm\tools\clang\include + ../;../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 MultiThreaded false diff --git a/IDE/src/BuildContext.bf b/IDE/src/BuildContext.bf index 6a588245..9635200e 100644 --- a/IDE/src/BuildContext.bf +++ b/IDE/src/BuildContext.bf @@ -630,7 +630,7 @@ namespace IDE compilerExePath.Append(@"/upstream/emscripten/emcc.bat"); //linkLine.Append(" c:\\Beef\\wasm\\BeefRT.a -s STRICT=1 -s USE_PTHREADS=1 -s ALIASING_FUNCTION_POINTERS=1 -s ASSERTIONS=0 -s DISABLE_EXCEPTION_CATCHING=0 -s DEMANGLE_SUPPORT=0 -s EVAL_CTORS=1 -s WASM=1 -s \"EXPORTED_FUNCTIONS=['_BeefMain','_BeefDone','_pthread_mutexattr_init','_pthread_mutex_init','_emscripten_futex_wake','_calloc','_sbrk']\""); linkLine.Append(" ", gApp.mInstallDir); - linkLine.Append("..\\..\\wasm\\BeefRT.a -s STRICT=1 -s USE_PTHREADS=1 -s ALIASING_FUNCTION_POINTERS=1 -s ASSERTIONS=0 -s DISABLE_EXCEPTION_CATCHING=0 -s DEMANGLE_SUPPORT=0 -s EVAL_CTORS=1 -s WASM=1"); + linkLine.Append("..\\..\\wasm\\BeefRT.a -s STRICT=1 -s USE_PTHREADS=1 -s ASSERTIONS=0 -s DISABLE_EXCEPTION_CATCHING=0 -s DEMANGLE_SUPPORT=0 -s WASM=1"); String workingDir = scope String(); if (!llvmDir.IsEmpty) @@ -642,6 +642,8 @@ namespace IDE workingDir.Append(gApp.mInstallDir); } + linkLine.Replace('\\', '/'); + //linkLine.Append(" --no-entry --export-all"); var runCmd = gApp.QueueRun(compilerExePath, linkLine, workingDir, .UTF8); diff --git a/IDE/src/IDEApp.bf b/IDE/src/IDEApp.bf index 5adb831a..7e0865fb 100644 --- a/IDE/src/IDEApp.bf +++ b/IDE/src/IDEApp.bf @@ -8004,7 +8004,7 @@ namespace IDE } }*/ - const int cArgFileThreshold = 0x7800; + const int cArgFileThreshold = 0x2000 - 1; public ExecutionQueueCmd QueueRun(String fileName, String args, String workingDir, ArgsFileKind argsFileKind = .None) { @@ -8012,7 +8012,7 @@ namespace IDE executionQueueCmd.mFileName = new String(fileName); executionQueueCmd.mArgs = new String(args); executionQueueCmd.mWorkingDir = new String(workingDir); - if (args.Length > cArgFileThreshold) + if (fileName.Length + args.Length + 1 > cArgFileThreshold) { // Only use UTF16 if we absolutely need to if ((argsFileKind == .UTF16WithBom) && (!args.HasMultibyteChars())) @@ -9662,10 +9662,10 @@ namespace IDE case .Linux: newString.AppendF("./{} -lpthread -ldl -Wl,-rpath -Wl,$ORIGIN", rtName); case .Wasm: - newString.Append(mInstallDir); + /*newString.Append(mInstallDir); newString.Append("Beef", IDEApp.sRTVersionStr, "RT"); newString.Append((Workspace.PlatformType.GetPtrSizeByName(gApp.mPlatformName) == 4) ? "32" : "64"); - newString.Append("_wasm.lib"); + newString.Append("_wasm.lib");*/ default: } diff --git a/IDEHelper/Backend/BeIRCodeGen.cpp b/IDEHelper/Backend/BeIRCodeGen.cpp index 858cb985..9046a5f5 100644 --- a/IDEHelper/Backend/BeIRCodeGen.cpp +++ b/IDEHelper/Backend/BeIRCodeGen.cpp @@ -2669,7 +2669,8 @@ void BeIRCodeGen::HandleNextCmd() CMD_PARAM(int, line); CMD_PARAM(int, column); CMD_PARAM(BeMDNode*, diScope); - CMD_PARAM(BeMDNode*, diInlinedAt); + CMD_PARAM(BeMDNode*, diInlinedAt); + BF_ASSERT(diScope != NULL); mBeModule->SetCurrentDebugLocation(line - 1, column - 1, diScope, (BeDbgLoc*)diInlinedAt); } break; diff --git a/IDEHelper/CMakeLists.txt b/IDEHelper/CMakeLists.txt index a107fb24..0db952ad 100644 --- a/IDEHelper/CMakeLists.txt +++ b/IDEHelper/CMakeLists.txt @@ -49,8 +49,8 @@ if (${APPLE}) ../BeefySysLib/ ../BeefySysLib/third_party ../BeefySysLib/third_party/freetype/include - ../extern/llvm-project_11_0_0/llvm/include - ../extern/llvm-project_11_0_0/llvm/lib/Target + ../extern/llvm-project_13_0_1/llvm/include + ../extern/llvm-project_13_0_1/llvm/lib/Target ../BeefySysLib/platform/osx ) @@ -61,8 +61,8 @@ else() ../BeefySysLib/ ../BeefySysLib/third_party ../BeefySysLib/third_party/freetype/include - ../extern/llvm-project_11_0_0/llvm/include - ../extern/llvm-project_11_0_0/llvm/lib/Target + ../extern/llvm-project_13_0_1/llvm/include + ../extern/llvm-project_13_0_1/llvm/lib/Target ../BeefySysLib/platform/linux ) @@ -77,24 +77,24 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug") -D_DEBUG ) include_directories( - ../extern/llvm_linux_11_0_0/include - ../extern/llvm_linux_11_0_0/lib/Target/X86 - ../extern/llvm_linux_11_0_0/lib/Target/AArch64 + ../extern/llvm_linux_13_0_1/include + ../extern/llvm_linux_13_0_1/lib/Target/X86 + ../extern/llvm_linux_13_0_1/lib/Target/AArch64 ) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}") set(CMAKE_EXECUTABLE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}") - set(LLVM_LIB "${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_11_0_0/lib") + set(LLVM_LIB "${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_13_0_1/lib") else() include_directories( - ../extern/llvm_linux_rel_11_0_0/include - ../extern/llvm_linux_rel_11_0_0/lib/Target/X86 - ../extern/llvm_linux_rel_11_0_0/lib/Target/AArch64 + ../extern/llvm_linux_rel_13_0_1/include + ../extern/llvm_linux_rel_13_0_1/lib/Target/X86 + ../extern/llvm_linux_rel_13_0_1/lib/Target/AArch64 ) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_RELEASE}") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_RELEASE}") set(CMAKE_EXECUTABLE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_RELEASE}") - set(LLVM_LIB "${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_rel_11_0_0/lib") + set(LLVM_LIB "${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_rel_13_0_1/lib") endif() ################### Dependencies ################## @@ -192,15 +192,16 @@ add_library(${PROJECT_NAME} SHARED ) execute_process( - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_11_0_0/bin/llvm-config --system-libs --link-static + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../extern/llvm_linux_13_0_1/bin/llvm-config --system-libs --link-static OUTPUT_VARIABLE LLVM_SYSTEM_LIBS - OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_STRIP_TRAILING_WHITESPACE ) set(TARGET_LIBS_OS "${LLVM_SYSTEM_LIBS}") if (HAVE_BACKTRACE_HEADERS) string(APPEND TARGET_LIBS_OS " -lbacktrace") + string(STRIP ${TARGET_LIBS_OS} TARGET_LIBS_OS) endif() list(APPEND LLVM_LIBS @@ -217,7 +218,7 @@ list(APPEND LLVM_LIBS ${LLVM_LIB}/libLLVMInstCombine.a ${LLVM_LIB}/libLLVMSelectionDAG.a ${LLVM_LIB}/libLLVMProfileData.a - ${LLVM_LIB}/libLLVMTransformUtils.a + ${LLVM_LIB}/libLLVMAnalysis.a ${LLVM_LIB}/libLLVMAsmPrinter.a ${LLVM_LIB}/libLLVMBitWriter.a @@ -226,8 +227,9 @@ list(APPEND LLVM_LIBS ${LLVM_LIB}/libLLVMInstrumentation.a ${LLVM_LIB}/libLLVMDebugInfoDWARF.a ${LLVM_LIB}/libLLVMDebugInfoPDB.a - ${LLVM_LIB}/libLLVMDebugInfoCodeView.a + ${LLVM_LIB}/libLLVMDebugInfoCodeView.a ${LLVM_LIB}/libLLVMGlobalISel.a + ${LLVM_LIB}/libLLVMTransformUtils.a ${LLVM_LIB}/libLLVMBinaryFormat.a ${LLVM_LIB}/libLLVMIRReader.a ${LLVM_LIB}/libLLVMLinker.a @@ -263,6 +265,7 @@ list(APPEND LLVM_LIBS ${LLVM_LIB}/libLLVMWebAssemblyCodeGen.a ${LLVM_LIB}/libLLVMWebAssemblyAsmParser.a ${LLVM_LIB}/libLLVMWebAssemblyDisassembler.a + ${LLVM_LIB}/libLLVMWebAssemblyUtils.a ${LLVM_LIB}/libLLVMSupport.a ${LLVM_LIB}/libLLVMDemangle.a) diff --git a/IDEHelper/Compiler/BfCompiler.cpp b/IDEHelper/Compiler/BfCompiler.cpp index 160518da..34f2e7c8 100644 --- a/IDEHelper/Compiler/BfCompiler.cpp +++ b/IDEHelper/Compiler/BfCompiler.cpp @@ -1794,7 +1794,7 @@ void BfCompiler::CreateVData(BfVDataModule* bfModule) auto res = bfModule->mBfIRBuilder->CreateCall(mainFunc, args); args.clear(); bfModule->mBfIRBuilder->CreateCall(shutdownFunc, args); - if (mainHasArgs) + if (mainHasRet) bfModule->mBfIRBuilder->CreateRet(res); else bfModule->mBfIRBuilder->CreateRetVoid(); @@ -1815,7 +1815,7 @@ void BfCompiler::CreateVData(BfVDataModule* bfModule) } } - if ((mOptions.mPlatformType != BfPlatformType_Windows) && + if ((mOptions.mPlatformType != BfPlatformType_Windows) && (mainHasArgs) && ((targetType == BfTargetType_BeefConsoleApplication) || (targetType == BfTargetType_BeefTest))) { SmallVector paramTypes; @@ -1827,11 +1827,8 @@ void BfCompiler::CreateVData(BfVDataModule* bfModule) bfModule->SetupIRMethod(NULL, setCmdLineFunc, false); SmallVector args; - if (mainHasArgs) - { - args.push_back(bfModule->mBfIRBuilder->GetArgument(0)); - args.push_back(bfModule->mBfIRBuilder->GetArgument(1)); - } + args.push_back(bfModule->mBfIRBuilder->GetArgument(0)); + args.push_back(bfModule->mBfIRBuilder->GetArgument(1)); bfModule->mBfIRBuilder->CreateCall(setCmdLineFunc, args); } diff --git a/IDEHelper/Compiler/BfIRBuilder.cpp b/IDEHelper/Compiler/BfIRBuilder.cpp index 5944533d..57aba0e6 100644 --- a/IDEHelper/Compiler/BfIRBuilder.cpp +++ b/IDEHelper/Compiler/BfIRBuilder.cpp @@ -5396,6 +5396,7 @@ void BfIRBuilder::UpdateDebugLocation(BfIRValue inst) void BfIRBuilder::SetCurrentDebugLocation(int line, int column, BfIRMDNode diScope, BfIRMDNode diInlinedAt) { + BF_ASSERT(diScope); if (mDbgVerifyCodeGen && gDebugDbgLoc) { OutputDebugStrF("SetCurrentDebugLocation %d %d:%d\n", diScope.mId, line, column); diff --git a/IDEHelper/Compiler/BfIRCodeGen.cpp b/IDEHelper/Compiler/BfIRCodeGen.cpp index 0853ceda..f31f3119 100644 --- a/IDEHelper/Compiler/BfIRCodeGen.cpp +++ b/IDEHelper/Compiler/BfIRCodeGen.cpp @@ -486,6 +486,12 @@ void BfIRCodeGen::FixValues(llvm::StructType* structType, llvm::SmallVectorgetType()->getScalarSizeInBits() > mPtrSize * 8) + val = mIRBuilder->CreateIntCast(val, llvm::Type::getInt32Ty(*mLLVMContext), false); +} + BfTypeCode BfIRCodeGen::GetTypeCode(llvm::Type* type, bool isSigned) { if (type->isIntegerTy()) @@ -674,7 +680,9 @@ void BfIRCodeGen::SetResult(int id, llvm::MDNode* md) void BfIRCodeGen::ProcessBfIRData(const BfSizedArray& 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 +696,7 @@ void BfIRCodeGen::ProcessBfIRData(const BfSizedArray& buffer) } } }; - mLLVMContext->setInlineAsmDiagnosticHandler(InlineAsmErrorHook::StaticHandler, this); + mLLVMContext->setInlineAsmDiagnosticHandler(InlineAsmErrorHook::StaticHandler, this);*/ BF_ASSERT(mStream == NULL); mStream = new ChunkedDataBuffer(); @@ -924,7 +932,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 +1281,7 @@ llvm::Value* BfIRCodeGen::TryToVector(llvm::Value* value, llvm::Type* elemType) return mIRBuilder->CreateAlignedLoad(ptrVal0, llvm::MaybeAlign(1)); } - if (auto vecType = llvm::dyn_cast(ptrElemType)) + if (auto vecType = llvm::dyn_cast(ptrElemType)) { if (vecType->getElementType() == elemType) return mIRBuilder->CreateAlignedLoad(value, llvm::MaybeAlign(1)); @@ -1567,7 +1575,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 +1594,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 +1613,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 +1632,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; @@ -1670,7 +1678,9 @@ void BfIRCodeGen::InitTarget() else if (mCodeGenOptions.mOptLevel == BfOptLevel_O3) optLvl = llvm::CodeGenOpt::Aggressive; - if (mCodeGenOptions.mSIMDSetting == BfSIMDSetting_SSE) + if (theTriple.isWasm()) + featuresStr = "+atomics,+bulk-memory,+mutable-globals,+sign-ext"; + else if (mCodeGenOptions.mSIMDSetting == BfSIMDSetting_SSE) featuresStr = "+sse"; else if (mCodeGenOptions.mSIMDSetting == BfSIMDSetting_SSE2) featuresStr = "+sse2"; @@ -1683,7 +1693,7 @@ void BfIRCodeGen::InitTarget() else if (mCodeGenOptions.mSIMDSetting == BfSIMDSetting_AVX) featuresStr = "+avx"; else if (mCodeGenOptions.mSIMDSetting == BfSIMDSetting_AVX2) - featuresStr = "+avx2"; + featuresStr = "+avx2"; llvm::Optional relocModel; llvm::CodeModel::Model cmModel = llvm::CodeModel::Small; @@ -1787,7 +1797,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 +2321,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 +2334,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: @@ -2338,7 +2348,7 @@ void BfIRCodeGen::HandleNextCmd() SetResult(curId, mIRBuilder->CreateBitCast(gepResult, val->getType())); break; } - + FixIndexer(idx0); SetResult(curId, mIRBuilder->CreateInBoundsGEP(val, idx0)); } break; @@ -2347,6 +2357,8 @@ void BfIRCodeGen::HandleNextCmd() CMD_PARAM(llvm::Value*, val); CMD_PARAM(llvm::Value*, idx0); CMD_PARAM(llvm::Value*, idx1); + FixIndexer(idx0); + FixIndexer(idx1); llvm::Value* indices[2] = { idx0, idx1 }; SetResult(curId, FixGEP(val, mIRBuilder->CreateInBoundsGEP(val, llvm::makeArrayRef(indices)))); } @@ -3112,7 +3124,7 @@ void BfIRCodeGen::HandleNextCmd() if (result != NULL) { - if (auto vecType = llvm::dyn_cast(result->getType())) + if (auto vecType = llvm::dyn_cast(result->getType())) { if (auto intType = llvm::dyn_cast(vecType->getElementType())) { @@ -3180,7 +3192,7 @@ void BfIRCodeGen::HandleNextCmd() if (result != NULL) { - if (auto vecType = llvm::dyn_cast(result->getType())) + if (auto vecType = llvm::dyn_cast(result->getType())) { if (auto intType = llvm::dyn_cast(vecType->getElementType())) { @@ -3336,7 +3348,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 +3559,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 +3788,17 @@ void BfIRCodeGen::HandleNextCmd() CMD_PARAM(int, argIdx); BfIRAttribute attribute = (BfIRAttribute)mStream->Read(); BF_ASSERT(llvm::isa(callInst)); - ((llvm::CallInst*)callInst)->addAttribute(argIdx, LLVMMapAttribute(attribute)); + auto attr = LLVMMapAttribute(attribute); + if (attr == llvm::Attribute::StructRet) + { + auto funcType = ((llvm::CallInst*)callInst)->getFunctionType(); + llvm::Attribute sret = llvm::Attribute::getWithStructRetType(*mLLVMContext, funcType->getFunctionParamType(argIdx - 1)->getPointerElementType()); + ((llvm::CallInst*)callInst)->addAttribute(argIdx, sret); + } + else + { + ((llvm::CallInst*)callInst)->addAttribute(argIdx, attr); + } } break; case BfIRCmd_Call_AddAttribute1: @@ -3794,12 +3816,11 @@ void BfIRCodeGen::HandleNextCmd() } else if (attribute == BfIRAttribute_ByVal) { - 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); + auto funcType = ((llvm::CallInst*)callInst)->getFunctionType(); + llvm::Attribute byValAttr = llvm::Attribute::getWithByValType(*mLLVMContext, funcType->getFunctionParamType(argIdx - 1)->getPointerElementType()); + llvm::Attribute alignAttr = llvm::Attribute::getWithAlignment(*mLLVMContext, llvm::Align(arg)); + ((llvm::CallInst*)callInst)->addAttribute(argIdx, byValAttr); + ((llvm::CallInst*)callInst)->addAttribute(argIdx, alignAttr); } } } @@ -3854,7 +3875,13 @@ void BfIRCodeGen::HandleNextCmd() else { auto attr = LLVMMapAttribute(attribute); - if (attr != llvm::Attribute::None) + if (attr == llvm::Attribute::StructRet) + { + auto funcType = func->getFunctionType(); + llvm::Attribute sret = llvm::Attribute::getWithStructRetType(*mLLVMContext, funcType->getFunctionParamType(argIdx - 1)->getPointerElementType()); + func->addAttribute(argIdx, sret); + } + else if (attr != llvm::Attribute::None) func->addAttribute(argIdx, attr); } } @@ -3871,12 +3898,11 @@ void BfIRCodeGen::HandleNextCmd() } else if (attribute == BfIRAttribute_ByVal) { - 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); + auto funcType = func->getFunctionType(); + llvm::Attribute byValAttr = llvm::Attribute::getWithByValType(*mLLVMContext, funcType->getFunctionParamType(argIdx - 1)->getPointerElementType()); + llvm::Attribute alignAttr = llvm::Attribute::getWithAlignment(*mLLVMContext, llvm::Align(arg)); + func->addAttribute(argIdx, byValAttr); + func->addAttribute(argIdx, alignAttr); } } break; @@ -3966,7 +3992,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 +5205,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 +5369,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 +5394,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 +5464,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(); diff --git a/IDEHelper/Compiler/BfIRCodeGen.h b/IDEHelper/Compiler/BfIRCodeGen.h index 2fcda96f..b2c7721c 100644 --- a/IDEHelper/Compiler/BfIRCodeGen.h +++ b/IDEHelper/Compiler/BfIRCodeGen.h @@ -125,6 +125,7 @@ public: public: void InitTarget(); void FixValues(llvm::StructType* structType, llvm::SmallVector& values); + void FixIndexer(llvm::Value*& val); BfTypeCode GetTypeCode(llvm::Type* type, bool isSigned); llvm::Type* GetLLVMType(BfTypeCode typeCode, bool& isSigned); BfIRTypeEntry& GetTypeEntry(int typeId); diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 9eed862d..7ca94ec6 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -2614,9 +2614,13 @@ void BfModule::UpdateSrcPos(BfAstNode* astNode, BfSrcPosFlags flags, int debugLo if (mCurMethodState->mCrossingMixin) inlineAt = BfIRMDNode(); - if ((!useDIScope) && (mIsComptimeModule)) + if ((!useDIScope) && (mIsComptimeModule)) useDIScope = wantDIFile; - mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, column, useDIScope, inlineAt); + + if (!useDIScope) + mBfIRBuilder->ClearDebugLocation(); + else + mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, column, useDIScope, inlineAt); if ((flags & BfSrcPosFlag_Expression) == 0) mBfIRBuilder->CreateStatementStart(); } @@ -2639,15 +2643,19 @@ void BfModule::SetIllegalSrcPos(BfSrcPosFlags flags) { if ((mBfIRBuilder->DbgHasInfo()) && (mCurMethodState != NULL)) { - if ((mCurMethodState->mCurScope->mDIInlinedAt) && (mCompiler->mOptions.IsCodeView())) + auto curScope = mCurMethodState->mCurScope->mDIScope; + if (curScope) { - // Currently, CodeView does not record column positions so we can't use an illegal column position as an "invalid" marker - mBfIRBuilder->SetCurrentDebugLocation(0, 0, mCurMethodState->mCurScope->mDIScope, mCurMethodState->mCurScope->mDIInlinedAt); - } - else - { - // Set to whatever it previously was but at column zero, which we will know to be illegal - mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, 0, mCurMethodState->mCurScope->mDIScope, mCurMethodState->mCurScope->mDIInlinedAt); + if ((mCurMethodState->mCurScope->mDIInlinedAt) && (mCompiler->mOptions.IsCodeView())) + { + // Currently, CodeView does not record column positions so we can't use an illegal column position as an "invalid" marker + mBfIRBuilder->SetCurrentDebugLocation(0, 0, curScope, mCurMethodState->mCurScope->mDIInlinedAt); + } + else + { + // Set to whatever it previously was but at column zero, which we will know to be illegal + mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, 0, curScope, mCurMethodState->mCurScope->mDIInlinedAt); + } } if ((flags & BfSrcPosFlag_Expression) == 0) diff --git a/IDEHelper/Compiler/BfStmtEvaluator.cpp b/IDEHelper/Compiler/BfStmtEvaluator.cpp index 00cd1665..6c528bba 100644 --- a/IDEHelper/Compiler/BfStmtEvaluator.cpp +++ b/IDEHelper/Compiler/BfStmtEvaluator.cpp @@ -148,7 +148,8 @@ bool BfModule::AddDeferredCallEntry(BfDeferredCallEntry* deferredCallEntry, BfSc mBfIRBuilder->SetInsertPointAtStart(mCurMethodState->mIRInitBlock); auto scopeHead = &mCurMethodState->mHeadScope; - mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, 0, scopeHead->mDIScope, BfIRMDNode()); + if (scopeHead->mDIScope) + mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, 0, scopeHead->mDIScope, BfIRMDNode()); if (WantsLifetimes()) mBfIRBuilder->CreateLifetimeStart(listEntry->mDynCallTail); @@ -164,7 +165,8 @@ bool BfModule::AddDeferredCallEntry(BfDeferredCallEntry* deferredCallEntry, BfSc mBfIRBuilder->SetInsertPoint(mCurMethodState->mIRInitBlock); - mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, 0, scopeHead->mDIScope, BfIRMDNode()); + if (scopeHead->mDIScope) + mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, 0, scopeHead->mDIScope, BfIRMDNode()); mBfIRBuilder->CreateStatementStart(); //TODO: Make this work for LLVM - we need a proper debug location diff --git a/IDEHelper/IDEHelper.vcxproj b/IDEHelper/IDEHelper.vcxproj index f2e39a4f..dca41ae5 100644 --- a/IDEHelper/IDEHelper.vcxproj +++ b/IDEHelper/IDEHelper.vcxproj @@ -160,7 +160,7 @@ Level3 Disabled WIN32;_DEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions) - ../;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_11_0_0\llvm\include;..\extern\llvm_win64_11_0_0\include;..\extern\llvm-project_11_0_0\llvm\lib\Target;..\extern\llvm_win64_11_0_0\lib\Target\AArch64;..\extern\llvm_win64_11_0_0\lib\Target\X86;..\extern\llvm-project_11_0_0\llvm\tools\clang\include;..\extern\curl\builds\libcurl-vc15-x64-release-static-zlib-static-ipv6-sspi-winssl\include + ../;../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 false -D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions) MultiThreadedDebug @@ -171,8 +171,8 @@ Windows DebugFull $(SolutionDir)\IDE\dist\$(TargetName).dll - 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) - ..\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 + 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) + ..\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 false $(SolutionDir)\IDE\dist\$(TargetName).lib MSVCRT @@ -219,7 +219,7 @@ true true zBP_DISABLED;WIN32;NDEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions) - ../;../BeefySysLib/platform/win;../BeefySysLib/third_party;..\extern\llvm-project_11_0_0\llvm\include;..\extern\llvm_win64_11_0_0\include;..\extern\llvm-project_11_0_0\llvm\lib\Target;..\extern\llvm_win64_11_0_0\lib\Target\X86;..\extern\llvm-project_11_0_0\llvm\tools\clang\include;..\extern\curl\builds\libcurl-vc15-x64-release-static-zlib-static-ipv6-sspi-winssl\include + ../;../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 MultiThreaded false @@ -229,8 +229,8 @@ true true $(SolutionDir)\IDE\dist\$(TargetName).dll - ..\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 - 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) + ..\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 + 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) false true $(SolutionDir)\IDE\dist\$(TargetName).lib diff --git a/IDEHelper/X64.cpp b/IDEHelper/X64.cpp index 66817941..feebc3d2 100644 --- a/IDEHelper/X64.cpp +++ b/IDEHelper/X64.cpp @@ -835,9 +835,14 @@ X64CPU::X64CPU() : return; mInstrInfo = TheX86_64Target.createMCInstrInfo(); + + mMCContext = new MCContext(Triple(triple), mAsmInfo, mRegisterInfo, mSubtargetInfo); - mMCObjectFileInfo = new MCObjectFileInfo(); - mMCContext = new MCContext(mAsmInfo, mRegisterInfo, mMCObjectFileInfo); + mMCObjectFileInfo = TheX86_64Target.createMCObjectFileInfo(*mMCContext, false); + if (!mMCObjectFileInfo) + return; + + mMCContext->setObjectFileInfo(mMCObjectFileInfo); MCDisassembler *disAsm = TheX86_64Target.createMCDisassembler(*mSubtargetInfo, *mMCContext); mDisAsm = disAsm; diff --git a/IDEHelper/X86.cpp b/IDEHelper/X86.cpp index 0881bdac..0b38a3c1 100644 --- a/IDEHelper/X86.cpp +++ b/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; diff --git a/bin/build.bat b/bin/build.bat index e8c89a1f..a887c62e 100644 --- a/bin/build.bat +++ b/bin/build.bat @@ -14,7 +14,7 @@ PUSHD %~dp0..\ mkdir stats :STATS_HAS -@IF EXIST extern\llvm-project_11_0_0 GOTO LLVM_HAS +@IF EXIST extern\llvm_win64_13_0_1\_Done.txt GOTO LLVM_HAS call extern\llvm_build.bat @IF %ERRORLEVEL% NEQ 0 GOTO HADERROR :LLVM_HAS diff --git a/bin/build.sh b/bin/build.sh index 5c99230f..22c3b141 100755 --- a/bin/build.sh +++ b/bin/build.sh @@ -20,7 +20,7 @@ if [ ! -f ../BeefySysLib/third_party/libffi/Makefile ]; then cd $SCRIPTPATH fi -if [ ! -d ../extern/llvm_linux_11_0_0/bin ]; then +if [ ! -f ../extern/llvm_linux_13_0_1/_Done.txt ]; then echo Building LLVM... cd ../extern ./llvm_build.sh diff --git a/bin/build_wasm.bat b/bin/build_wasm.bat index d3ffc43c..c7db0417 100644 --- a/bin/build_wasm.bat +++ b/bin/build_wasm.bat @@ -1,4 +1,4 @@ mkdir ..\wasm cd ..\wasm -call emcc ..\BeefRT\rt\Math.cpp ..\BeefRT\rt\Object.cpp ..\BeefRT\rt\Thread.cpp ..\BeefRT\rt\Internal.cpp ..\BeefySysLib\platform\wasm\WasmCommon.cpp ..\BeefySysLib\Common.cpp ..\BeefySysLib\util\String.cpp ..\BeefySysLib\util\UTF8.cpp ..\BeefySysLib\third_party\utf8proc\utf8proc.c -I..\ -I..\BeefySysLib -I..\BeefySysLib\platform\wasm -g -DBF_DISABLE_FFI -c -DBF_SMALL -s WASM=1 -s USE_PTHREADS=1 +call emcc ..\BeefRT\rt\Math.cpp ..\BeefRT\rt\Object.cpp ..\BeefRT\rt\Thread.cpp ..\BeefRT\rt\Internal.cpp ..\BeefySysLib\platform\wasm\WasmCommon.cpp ..\BeefySysLib\Common.cpp ..\BeefySysLib\util\String.cpp ..\BeefySysLib\util\UTF8.cpp ..\BeefySysLib\third_party\utf8proc\utf8proc.c -I..\ -I..\BeefySysLib -I..\BeefySysLib\platform\wasm -g -DBF_DISABLE_FFI -c -s WASM=1 -s USE_PTHREADS=1 emar r BeefRT.a Common.o Internal.o Math.o Object.o String.o Thread.o UTF8.o utf8proc.o WasmCommon.o \ No newline at end of file diff --git a/extern/llvm_build.bat b/extern/llvm_build.bat index 21e5ca0c..b9fc41ef 100644 --- a/extern/llvm_build.bat +++ b/extern/llvm_build.bat @@ -1,25 +1,29 @@ PUSHD %~dp0 -@IF EXIST llvm-project_11_0_0 GOTO LLVM_HAS -git clone --depth 1 --branch llvmorg-11.0.0 --config core.autocrlf=false https://github.com/llvm/llvm-project.git llvm-project_11_0_0 -@rem pushd llvm-project_11_0_0 +@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 %ERRORLEVEL% NEQ 0 GOTO HADERROR :LLVM_HAS -@IF EXIST llvm_win64_11_0_0 GOTO HAS_CONFIG -mkdir llvm_win64_11_0_0 -cd llvm_win64_11_0_0 -cmake ../llvm-project_11_0_0/llvm -G"Visual Studio 16 2019" -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_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 16 2019" -Ax64 -Thost=x64 -DLLVM_USE_CRT_DEBUG:STRING="MTd" -DLLVM_USE_CRT_RELEASE:STRING="MT" -DLLVM_TARGETS_TO_BUILD="AArch64;ARM;X86;WebAssembly" +@IF %ERRORLEVEL% NEQ 0 GOTO HADERROR @GOTO DOBUILD :HAS_CONFIG -cd llvm_win64_11_0_0 +cd llvm_win64_13_0_1 @GOTO DOBUILD :DOBUILD set /p LLVM_TARGETS=<../llvm_targets.txt cmake --build . -t %LLVM_TARGETS% --config Debug +@IF %ERRORLEVEL% NEQ 0 GOTO HADERROR cmake --build . -t %LLVM_TARGETS% --config Release +@IF %ERRORLEVEL% NEQ 0 GOTO HADERROR +echo done > _Done.txt :SUCCESS @ECHO SUCCESS! diff --git a/extern/llvm_build.sh b/extern/llvm_build.sh index 0f0876df..261e8062 100755 --- a/extern/llvm_build.sh +++ b/extern/llvm_build.sh @@ -1,34 +1,34 @@ #!/bin/bash set -e -if [ ! -d llvm-project_11_0_0 ]; then - if [ -f llvm-11.0.0.src.tar.xz ]; then # if user downloaded llvm-11.0.0.src.tar.xz then use it instead - tar -xf llvm-11.0.0.src.tar.xz - mkdir llvm-project_11_0_0 - mv llvm-11.0.0.src llvm-project_11_0_0/llvm - else # shallow git clone llvm repo if llvm-11.0.0.src.tar.xz does not exists - git clone --depth 1 --branch llvmorg-11.0.0 https://github.com/llvm/llvm-project.git llvm-project_11_0_0 +if [ ! -d llvm-project_13_0_1 ]; then + if [ -f llvm-13.0.1.src.tar.xz ]; then # if user downloaded llvm-13.0.1.src.tar.xz then use it instead + tar -xf llvm-13.0.1.src.tar.xz + mkdir llvm-project_13_0_1 + mv llvm-13.0.1.src llvm-project_13_0_1/llvm + else # shallow git clone llvm repo if llvm-13.0.1.src.tar.xz does not exists + git clone --depth 1 --branch llvmorg-13.0.1 https://github.com/llvm/llvm-project.git llvm-project_13_0_1 fi -fi #end if llvm-project_11_0_0 exists +fi #end if llvm-project_13_0_1 exists -if [ ! -d llvm_linux_11_0_0 ]; then - mkdir llvm_linux_11_0_0 +if [ ! -d llvm_linux_13_0_1 ]; then + mkdir llvm_linux_13_0_1 fi -if [ ! -d llvm_linux_11_0_0/bin ]; then - cd llvm_linux_11_0_0 - cmake ../llvm-project_11_0_0/llvm -DLLVM_TARGETS_TO_BUILD="AArch64;ARM;X86;WebAssembly" -DCMAKE_BUILD_TYPE:String="Debug" +if [ ! -d llvm_linux_13_0_1/bin ]; then + cd llvm_linux_13_0_1 + cmake ../llvm-project_13_0_1/llvm -DLLVM_TARGETS_TO_BUILD="AArch64;ARM;X86;WebAssembly" -DCMAKE_BUILD_TYPE:String="Debug" cmake --build . -t $(cat ../llvm_targets.txt) cd .. fi -if [ ! -d llvm_linux_rel_11_0_0 ]; then - mkdir llvm_linux_rel_11_0_0 +if [ ! -d llvm_linux_rel_13_0_1 ]; then + mkdir llvm_linux_rel_13_0_1 fi -if [ ! -d llvm_linux_rel_11_0_0/bin ]; then - cd llvm_linux_rel_11_0_0 - cmake ../llvm-project_11_0_0/llvm -DLLVM_TARGETS_TO_BUILD="AArch64;ARM;X86;WebAssembly" -DCMAKE_BUILD_TYPE:String="Release" +if [ ! -d llvm_linux_rel_13_0_1/bin ]; then + cd llvm_linux_rel_13_0_1 + cmake ../llvm-project_13_0_1/llvm -DLLVM_TARGETS_TO_BUILD="AArch64;ARM;X86;WebAssembly" -DCMAKE_BUILD_TYPE:String="Release" cmake --build . -t $(cat ../llvm_targets.txt) cd .. fi @@ -37,5 +37,6 @@ if [ ! -d ../IDE/dist/llvm/bin ]; then mkdir ../IDE/dist/llvm mkdir ../IDE/dist/llvm/bin fi -cp llvm_linux_rel_11_0_0/bin/llvm-ar ../IDE/dist/llvm/bin +cp llvm_linux_rel_13_0_1/bin/llvm-ar ../IDE/dist/llvm/bin +echo done > llvm_linux_13_0_1/_Done.txt \ No newline at end of file diff --git a/extern/llvm_targets.txt b/extern/llvm_targets.txt index 73b650c2..7edd2b4b 100644 --- a/extern/llvm_targets.txt +++ b/extern/llvm_targets.txt @@ -1 +1 @@ -llvm-ar llvm-config gtest_main LLVMX86Disassembler LLVMMCDisassembler LLVMSupport LLVMX86Info LLVMX86Desc LLVMMC LLVMObject LLVMCore LLVMBitReader LLVMAsmParser LLVMMCParser LLVMCodeGen LLVMTarget LLVMX86CodeGen LLVMScalarOpts LLVMInstCombine LLVMSelectionDAG LLVMProfileData LLVMTransformUtils LLVMAnalysis LLVMX86AsmParser LLVMAsmPrinter LLVMBitWriter LLVMVectorize LLVMipo LLVMInstrumentation LLVMDebugInfoDWARF LLVMDebugInfoPDB LLVMDebugInfoCodeView LLVMGlobalISel LLVMBinaryFormat LLVMCoverage LLVMDebugInfoGSYM LLVMDWARFLinker LLVMRuntimeDyld LLVMExecutionEngine LLVMMCJIT LLVMFuzzMutate LLVMInterpreter LLVMLineEditor LLVMExtensions LLVMObjCARCOpts LLVMCoroutines LLVMPasses LLVMLTO LLVMMCA LLVMMIRParser LLVMObjectYAML LLVMJITLink LLVMOrcError LLVMOrcJIT LLVMSymbolize LLVMTestingSupport LLVMWindowsManifest LLVMXRay LLVMARMCodeGen LLVMARMDisassembler LLVMAArch64CodeGen LLVMAArch64Disassembler LLVMWebAssemblyCodeGen LLVMWebAssemblyDisassembler +llvm-ar llvm-config gtest_main LLVMX86Disassembler LLVMMCDisassembler LLVMSupport LLVMX86Info LLVMX86Desc LLVMMC LLVMObject LLVMCore LLVMBitReader LLVMAsmParser LLVMMCParser LLVMCodeGen LLVMTarget LLVMX86CodeGen LLVMScalarOpts LLVMInstCombine LLVMSelectionDAG LLVMProfileData LLVMTransformUtils LLVMAnalysis LLVMX86AsmParser LLVMAsmPrinter LLVMBitWriter LLVMVectorize LLVMipo LLVMInstrumentation LLVMDebugInfoDWARF LLVMDebugInfoPDB LLVMDebugInfoCodeView LLVMGlobalISel LLVMBinaryFormat LLVMCoverage LLVMDebugInfoGSYM LLVMDWARFLinker LLVMRuntimeDyld LLVMExecutionEngine LLVMMCJIT LLVMFuzzMutate LLVMInterpreter LLVMLineEditor LLVMExtensions LLVMObjCARCOpts LLVMCoroutines LLVMPasses LLVMLTO LLVMMCA LLVMMIRParser LLVMObjectYAML LLVMJITLink LLVMSymbolize LLVMTestingSupport LLVMWindowsManifest LLVMXRay LLVMARMCodeGen LLVMARMDisassembler LLVMAArch64CodeGen LLVMAArch64Disassembler LLVMWebAssemblyCodeGen LLVMWebAssemblyDisassembler LLVMWebAssemblyUtils LLVMFileCheck LLVMInterfaceStub LLVMFrontendOpenACC LLVMDWP LLVMOrcJIT