1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 19:48:20 +02:00

Merge pull request #1415 from disarray2077/llvm1301

Fixes to upgrade LLVM version to 13.0.1
This commit is contained in:
Brian Fiete 2022-02-08 11:40:05 -08:00 committed by GitHub
commit 2ab072ee20
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 193 additions and 137 deletions

View file

@ -106,7 +106,7 @@
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../;../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</AdditionalIncludeDirectories>
<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>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<SupportJustMyCode>false</SupportJustMyCode>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -146,7 +146,7 @@
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<AdditionalIncludeDirectories>../;../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</AdditionalIncludeDirectories>
<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\tools\clang\include</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>

View file

@ -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
)

View file

@ -145,7 +145,7 @@
<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_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</AdditionalIncludeDirectories>
<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>
<BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions>
<SupportJustMyCode>false</SupportJustMyCode>
@ -183,7 +183,7 @@
<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_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</AdditionalIncludeDirectories>
<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>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>

View file

@ -145,7 +145,7 @@
<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_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</AdditionalIncludeDirectories>
<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>
<BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions>
<SupportJustMyCode>false</SupportJustMyCode>
@ -183,7 +183,7 @@
<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_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</AdditionalIncludeDirectories>
<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>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>

View file

@ -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);

View file

@ -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:
}

View file

@ -2670,6 +2670,7 @@ void BeIRCodeGen::HandleNextCmd()
CMD_PARAM(int, column);
CMD_PARAM(BeMDNode*, diScope);
CMD_PARAM(BeMDNode*, diInlinedAt);
BF_ASSERT(diScope != NULL);
mBeModule->SetCurrentDebugLocation(line - 1, column - 1, diScope, (BeDbgLoc*)diInlinedAt);
}
break;

View file

@ -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,7 +192,7 @@ 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
)
@ -201,6 +201,7 @@ 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
@ -228,6 +229,7 @@ list(APPEND LLVM_LIBS
${LLVM_LIB}/libLLVMDebugInfoPDB.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)

View file

@ -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<BfIRType, 2> paramTypes;
@ -1827,11 +1827,8 @@ void BfCompiler::CreateVData(BfVDataModule* bfModule)
bfModule->SetupIRMethod(NULL, setCmdLineFunc, false);
SmallVector<BfIRValue, 2> args;
if (mainHasArgs)
{
args.push_back(bfModule->mBfIRBuilder->GetArgument(0));
args.push_back(bfModule->mBfIRBuilder->GetArgument(1));
}
bfModule->mBfIRBuilder->CreateCall(setCmdLineFunc, args);
}

View file

@ -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);

View file

@ -486,6 +486,12 @@ void BfIRCodeGen::FixValues(llvm::StructType* structType, llvm::SmallVector<llvm
}
}
void BfIRCodeGen::FixIndexer(llvm::Value*& val)
{
if ((int)val->getType()->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<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 +696,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 +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<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 +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";
@ -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<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 +3192,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 +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<llvm::CallInst>(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();

View file

@ -125,6 +125,7 @@ public:
public:
void InitTarget();
void FixValues(llvm::StructType* structType, llvm::SmallVector<llvm::Value*, 8>& values);
void FixIndexer(llvm::Value*& val);
BfTypeCode GetTypeCode(llvm::Type* type, bool isSigned);
llvm::Type* GetLLVMType(BfTypeCode typeCode, bool& isSigned);
BfIRTypeEntry& GetTypeEntry(int typeId);

View file

@ -2616,6 +2616,10 @@ void BfModule::UpdateSrcPos(BfAstNode* astNode, BfSrcPosFlags flags, int debugLo
if ((!useDIScope) && (mIsComptimeModule))
useDIScope = wantDIFile;
if (!useDIScope)
mBfIRBuilder->ClearDebugLocation();
else
mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, column, useDIScope, inlineAt);
if ((flags & BfSrcPosFlag_Expression) == 0)
mBfIRBuilder->CreateStatementStart();
@ -2638,16 +2642,20 @@ void BfModule::UseDefaultSrcPos(BfSrcPosFlags flags, int debugLocOffset)
void BfModule::SetIllegalSrcPos(BfSrcPosFlags flags)
{
if ((mBfIRBuilder->DbgHasInfo()) && (mCurMethodState != NULL))
{
auto curScope = mCurMethodState->mCurScope->mDIScope;
if (curScope)
{
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, mCurMethodState->mCurScope->mDIScope, mCurMethodState->mCurScope->mDIInlinedAt);
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, mCurMethodState->mCurScope->mDIScope, mCurMethodState->mCurScope->mDIInlinedAt);
mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, 0, curScope, mCurMethodState->mCurScope->mDIInlinedAt);
}
}
if ((flags & BfSrcPosFlag_Expression) == 0)

View file

@ -148,6 +148,7 @@ bool BfModule::AddDeferredCallEntry(BfDeferredCallEntry* deferredCallEntry, BfSc
mBfIRBuilder->SetInsertPointAtStart(mCurMethodState->mIRInitBlock);
auto scopeHead = &mCurMethodState->mHeadScope;
if (scopeHead->mDIScope)
mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, 0, scopeHead->mDIScope, BfIRMDNode());
if (WantsLifetimes())
@ -164,6 +165,7 @@ bool BfModule::AddDeferredCallEntry(BfDeferredCallEntry* deferredCallEntry, BfSc
mBfIRBuilder->SetInsertPoint(mCurMethodState->mIRInitBlock);
if (scopeHead->mDIScope)
mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, 0, scopeHead->mDIScope, BfIRMDNode());
mBfIRBuilder->CreateStatementStart();

View file

@ -160,7 +160,7 @@
<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_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</AdditionalIncludeDirectories>
<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>
<BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -171,8 +171,8 @@
<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>
<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>
<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>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<ImportLibrary>$(SolutionDir)\IDE\dist\$(TargetName).lib</ImportLibrary>
<IgnoreSpecificDefaultLibraries>MSVCRT</IgnoreSpecificDefaultLibraries>
@ -219,7 +219,7 @@
<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_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</AdditionalIncludeDirectories>
<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>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
@ -229,8 +229,8 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<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>
<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>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<FullProgramDatabaseFile>true</FullProgramDatabaseFile>
<ImportLibrary>$(SolutionDir)\IDE\dist\$(TargetName).lib</ImportLibrary>

View file

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

View file

@ -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;

View file

@ -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

View file

@ -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

View file

@ -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

20
extern/llvm_build.bat vendored
View file

@ -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!

39
extern/llvm_build.sh vendored
View file

@ -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

View file

@ -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