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

View file

@ -44,8 +44,8 @@ if (${APPLE})
../BeefySysLib/ ../BeefySysLib/
../BeefySysLib/third_party ../BeefySysLib/third_party
../BeefySysLib/third_party/freetype/include ../BeefySysLib/third_party/freetype/include
../extern/llvm-project_11_0_0/llvm/include ../extern/llvm-project_13_0_1/llvm/include
../extern/llvm-project_11_0_0/llvm/lib/Target ../extern/llvm-project_13_0_1/llvm/lib/Target
../IDEHelper ../IDEHelper
../BeefySysLib/platform/osx ../BeefySysLib/platform/osx
@ -57,8 +57,8 @@ else()
../BeefySysLib/ ../BeefySysLib/
../BeefySysLib/third_party ../BeefySysLib/third_party
../BeefySysLib/third_party/freetype/include ../BeefySysLib/third_party/freetype/include
../extern/llvm-project_11_0_0/llvm/include ../extern/llvm-project_13_0_1/llvm/include
../extern/llvm-project_11_0_0/llvm/lib/Target ../extern/llvm-project_13_0_1/llvm/lib/Target
../IDEHelper ../IDEHelper
../BeefySysLib/platform/linux ../BeefySysLib/platform/linux
@ -74,18 +74,18 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug")
-D_DEBUG -D_DEBUG
) )
include_directories( include_directories(
../extern/llvm_linux_11_0_0/include ../extern/llvm_linux_13_0_1/include
../extern/llvm_linux_11_0_0/lib/Target/X86 ../extern/llvm_linux_13_0_1/lib/Target/X86
) )
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}") 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() else()
include_directories( include_directories(
../extern/llvm_linux_rel_11_0_0/include ../extern/llvm_linux_rel_13_0_1/include
../extern/llvm_linux_rel_11_0_0/lib/Target/X86 ../extern/llvm_linux_rel_13_0_1/lib/Target/X86
) )
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/${OUTPUT_RELEASE}") 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() endif()
################### Dependencies ################## ################### Dependencies ##################
@ -134,7 +134,7 @@ add_executable(${PROJECT_NAME}
) )
execute_process( 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_VARIABLE LLVM_SYSTEM_LIBS
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_STRIP_TRAILING_WHITESPACE
) )

View file

@ -145,7 +145,7 @@
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>BF_DBG_32;WIN32;_DEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions> <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> <BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions>
<SupportJustMyCode>false</SupportJustMyCode> <SupportJustMyCode>false</SupportJustMyCode>
@ -183,7 +183,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>BF_DBG_32;WIN32;NDEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions> <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> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile> </ClCompile>

View file

@ -145,7 +145,7 @@
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>BF_DBG_64;WIN32;_DEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions> <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> <BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions>
<SupportJustMyCode>false</SupportJustMyCode> <SupportJustMyCode>false</SupportJustMyCode>
@ -183,7 +183,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>BF_DBG_64;WIN32;NDEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions> <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> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile> </ClCompile>

View file

@ -630,7 +630,7 @@ namespace IDE
compilerExePath.Append(@"/upstream/emscripten/emcc.bat"); 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(" 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(" ", 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(); String workingDir = scope String();
if (!llvmDir.IsEmpty) if (!llvmDir.IsEmpty)
@ -642,6 +642,8 @@ namespace IDE
workingDir.Append(gApp.mInstallDir); workingDir.Append(gApp.mInstallDir);
} }
linkLine.Replace('\\', '/');
//linkLine.Append(" --no-entry --export-all"); //linkLine.Append(" --no-entry --export-all");
var runCmd = gApp.QueueRun(compilerExePath, linkLine, workingDir, .UTF8); 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) public ExecutionQueueCmd QueueRun(String fileName, String args, String workingDir, ArgsFileKind argsFileKind = .None)
{ {
@ -8012,7 +8012,7 @@ namespace IDE
executionQueueCmd.mFileName = new String(fileName); executionQueueCmd.mFileName = new String(fileName);
executionQueueCmd.mArgs = new String(args); executionQueueCmd.mArgs = new String(args);
executionQueueCmd.mWorkingDir = new String(workingDir); executionQueueCmd.mWorkingDir = new String(workingDir);
if (args.Length > cArgFileThreshold) if (fileName.Length + args.Length + 1 > cArgFileThreshold)
{ {
// Only use UTF16 if we absolutely need to // Only use UTF16 if we absolutely need to
if ((argsFileKind == .UTF16WithBom) && (!args.HasMultibyteChars())) if ((argsFileKind == .UTF16WithBom) && (!args.HasMultibyteChars()))
@ -9662,10 +9662,10 @@ namespace IDE
case .Linux: case .Linux:
newString.AppendF("./{} -lpthread -ldl -Wl,-rpath -Wl,$ORIGIN", rtName); newString.AppendF("./{} -lpthread -ldl -Wl,-rpath -Wl,$ORIGIN", rtName);
case .Wasm: case .Wasm:
newString.Append(mInstallDir); /*newString.Append(mInstallDir);
newString.Append("Beef", IDEApp.sRTVersionStr, "RT"); newString.Append("Beef", IDEApp.sRTVersionStr, "RT");
newString.Append((Workspace.PlatformType.GetPtrSizeByName(gApp.mPlatformName) == 4) ? "32" : "64"); newString.Append((Workspace.PlatformType.GetPtrSizeByName(gApp.mPlatformName) == 4) ? "32" : "64");
newString.Append("_wasm.lib"); newString.Append("_wasm.lib");*/
default: default:
} }

View file

@ -2670,6 +2670,7 @@ void BeIRCodeGen::HandleNextCmd()
CMD_PARAM(int, column); CMD_PARAM(int, column);
CMD_PARAM(BeMDNode*, diScope); 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); mBeModule->SetCurrentDebugLocation(line - 1, column - 1, diScope, (BeDbgLoc*)diInlinedAt);
} }
break; break;

View file

@ -49,8 +49,8 @@ if (${APPLE})
../BeefySysLib/ ../BeefySysLib/
../BeefySysLib/third_party ../BeefySysLib/third_party
../BeefySysLib/third_party/freetype/include ../BeefySysLib/third_party/freetype/include
../extern/llvm-project_11_0_0/llvm/include ../extern/llvm-project_13_0_1/llvm/include
../extern/llvm-project_11_0_0/llvm/lib/Target ../extern/llvm-project_13_0_1/llvm/lib/Target
../BeefySysLib/platform/osx ../BeefySysLib/platform/osx
) )
@ -61,8 +61,8 @@ else()
../BeefySysLib/ ../BeefySysLib/
../BeefySysLib/third_party ../BeefySysLib/third_party
../BeefySysLib/third_party/freetype/include ../BeefySysLib/third_party/freetype/include
../extern/llvm-project_11_0_0/llvm/include ../extern/llvm-project_13_0_1/llvm/include
../extern/llvm-project_11_0_0/llvm/lib/Target ../extern/llvm-project_13_0_1/llvm/lib/Target
../BeefySysLib/platform/linux ../BeefySysLib/platform/linux
) )
@ -77,24 +77,24 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug")
-D_DEBUG -D_DEBUG
) )
include_directories( include_directories(
../extern/llvm_linux_11_0_0/include ../extern/llvm_linux_13_0_1/include
../extern/llvm_linux_11_0_0/lib/Target/X86 ../extern/llvm_linux_13_0_1/lib/Target/X86
../extern/llvm_linux_11_0_0/lib/Target/AArch64 ../extern/llvm_linux_13_0_1/lib/Target/AArch64
) )
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_DEBUG}")
set(CMAKE_ARCHIVE_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(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() else()
include_directories( include_directories(
../extern/llvm_linux_rel_11_0_0/include ../extern/llvm_linux_rel_13_0_1/include
../extern/llvm_linux_rel_11_0_0/lib/Target/X86 ../extern/llvm_linux_rel_13_0_1/lib/Target/X86
../extern/llvm_linux_rel_11_0_0/lib/Target/AArch64 ../extern/llvm_linux_rel_13_0_1/lib/Target/AArch64
) )
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_RELEASE}") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${OUTPUT_RELEASE}")
set(CMAKE_ARCHIVE_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(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() endif()
################### Dependencies ################## ################### Dependencies ##################
@ -192,7 +192,7 @@ add_library(${PROJECT_NAME} SHARED
) )
execute_process( 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_VARIABLE LLVM_SYSTEM_LIBS
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_STRIP_TRAILING_WHITESPACE
) )
@ -201,6 +201,7 @@ set(TARGET_LIBS_OS "${LLVM_SYSTEM_LIBS}")
if (HAVE_BACKTRACE_HEADERS) if (HAVE_BACKTRACE_HEADERS)
string(APPEND TARGET_LIBS_OS " -lbacktrace") string(APPEND TARGET_LIBS_OS " -lbacktrace")
string(STRIP ${TARGET_LIBS_OS} TARGET_LIBS_OS)
endif() endif()
list(APPEND LLVM_LIBS list(APPEND LLVM_LIBS
@ -217,7 +218,7 @@ list(APPEND LLVM_LIBS
${LLVM_LIB}/libLLVMInstCombine.a ${LLVM_LIB}/libLLVMInstCombine.a
${LLVM_LIB}/libLLVMSelectionDAG.a ${LLVM_LIB}/libLLVMSelectionDAG.a
${LLVM_LIB}/libLLVMProfileData.a ${LLVM_LIB}/libLLVMProfileData.a
${LLVM_LIB}/libLLVMTransformUtils.a
${LLVM_LIB}/libLLVMAnalysis.a ${LLVM_LIB}/libLLVMAnalysis.a
${LLVM_LIB}/libLLVMAsmPrinter.a ${LLVM_LIB}/libLLVMAsmPrinter.a
${LLVM_LIB}/libLLVMBitWriter.a ${LLVM_LIB}/libLLVMBitWriter.a
@ -228,6 +229,7 @@ list(APPEND LLVM_LIBS
${LLVM_LIB}/libLLVMDebugInfoPDB.a ${LLVM_LIB}/libLLVMDebugInfoPDB.a
${LLVM_LIB}/libLLVMDebugInfoCodeView.a ${LLVM_LIB}/libLLVMDebugInfoCodeView.a
${LLVM_LIB}/libLLVMGlobalISel.a ${LLVM_LIB}/libLLVMGlobalISel.a
${LLVM_LIB}/libLLVMTransformUtils.a
${LLVM_LIB}/libLLVMBinaryFormat.a ${LLVM_LIB}/libLLVMBinaryFormat.a
${LLVM_LIB}/libLLVMIRReader.a ${LLVM_LIB}/libLLVMIRReader.a
${LLVM_LIB}/libLLVMLinker.a ${LLVM_LIB}/libLLVMLinker.a
@ -263,6 +265,7 @@ list(APPEND LLVM_LIBS
${LLVM_LIB}/libLLVMWebAssemblyCodeGen.a ${LLVM_LIB}/libLLVMWebAssemblyCodeGen.a
${LLVM_LIB}/libLLVMWebAssemblyAsmParser.a ${LLVM_LIB}/libLLVMWebAssemblyAsmParser.a
${LLVM_LIB}/libLLVMWebAssemblyDisassembler.a ${LLVM_LIB}/libLLVMWebAssemblyDisassembler.a
${LLVM_LIB}/libLLVMWebAssemblyUtils.a
${LLVM_LIB}/libLLVMSupport.a ${LLVM_LIB}/libLLVMSupport.a
${LLVM_LIB}/libLLVMDemangle.a) ${LLVM_LIB}/libLLVMDemangle.a)

View file

@ -1794,7 +1794,7 @@ void BfCompiler::CreateVData(BfVDataModule* bfModule)
auto res = bfModule->mBfIRBuilder->CreateCall(mainFunc, args); auto res = bfModule->mBfIRBuilder->CreateCall(mainFunc, args);
args.clear(); args.clear();
bfModule->mBfIRBuilder->CreateCall(shutdownFunc, args); bfModule->mBfIRBuilder->CreateCall(shutdownFunc, args);
if (mainHasArgs) if (mainHasRet)
bfModule->mBfIRBuilder->CreateRet(res); bfModule->mBfIRBuilder->CreateRet(res);
else else
bfModule->mBfIRBuilder->CreateRetVoid(); 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))) ((targetType == BfTargetType_BeefConsoleApplication) || (targetType == BfTargetType_BeefTest)))
{ {
SmallVector<BfIRType, 2> paramTypes; SmallVector<BfIRType, 2> paramTypes;
@ -1827,11 +1827,8 @@ void BfCompiler::CreateVData(BfVDataModule* bfModule)
bfModule->SetupIRMethod(NULL, setCmdLineFunc, false); bfModule->SetupIRMethod(NULL, setCmdLineFunc, false);
SmallVector<BfIRValue, 2> args; SmallVector<BfIRValue, 2> args;
if (mainHasArgs)
{
args.push_back(bfModule->mBfIRBuilder->GetArgument(0)); args.push_back(bfModule->mBfIRBuilder->GetArgument(0));
args.push_back(bfModule->mBfIRBuilder->GetArgument(1)); args.push_back(bfModule->mBfIRBuilder->GetArgument(1));
}
bfModule->mBfIRBuilder->CreateCall(setCmdLineFunc, args); 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) void BfIRBuilder::SetCurrentDebugLocation(int line, int column, BfIRMDNode diScope, BfIRMDNode diInlinedAt)
{ {
BF_ASSERT(diScope);
if (mDbgVerifyCodeGen && gDebugDbgLoc) if (mDbgVerifyCodeGen && gDebugDbgLoc)
{ {
OutputDebugStrF("SetCurrentDebugLocation %d %d:%d\n", diScope.mId, line, column); 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) BfTypeCode BfIRCodeGen::GetTypeCode(llvm::Type* type, bool isSigned)
{ {
if (type->isIntegerTy()) if (type->isIntegerTy())
@ -674,7 +680,9 @@ void BfIRCodeGen::SetResult(int id, llvm::MDNode* md)
void BfIRCodeGen::ProcessBfIRData(const BfSizedArray<uint8>& buffer) 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) 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); BF_ASSERT(mStream == NULL);
mStream = new ChunkedDataBuffer(); 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), idx0),
llvm::ConstantInt::get(llvm::Type::getInt32Ty(*mLLVMContext), idx1)}; 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; return;
} }
else if (constType == BfConstType_ExtractValue) 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)); 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) if (vecType->getElementType() == elemType)
return mIRBuilder->CreateAlignedLoad(value, llvm::MaybeAlign(1)); 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()); headVal = mIRBuilder->CreateBitCast(addr, intTy->getPointerTo());
llvm::Value* ptrVal = headVal; llvm::Value* ptrVal = headVal;
if (curOffset != 0) if (curOffset != 0)
ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(NULL, headVal, curOffset / 8); ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(intTy, headVal, curOffset / 8);
mIRBuilder->CreateStore(constVal, ptrVal, isVolatile); mIRBuilder->CreateStore(constVal, ptrVal, isVolatile);
curOffset += 8; curOffset += 8;
@ -1586,7 +1594,7 @@ void BfIRCodeGen::CreateMemSet(llvm::Value* addr, llvm::Value* val, llvm::Value*
headVal = mIRBuilder->CreateBitCast(addr, intTy->getPointerTo()); headVal = mIRBuilder->CreateBitCast(addr, intTy->getPointerTo());
llvm::Value* ptrVal = headVal; llvm::Value* ptrVal = headVal;
if (curOffset != 0) if (curOffset != 0)
ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(NULL, headVal, curOffset / 4); ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(intTy, headVal, curOffset / 4);
mIRBuilder->CreateStore(constVal, ptrVal, isVolatile); mIRBuilder->CreateStore(constVal, ptrVal, isVolatile);
curOffset += 4; curOffset += 4;
@ -1605,7 +1613,7 @@ void BfIRCodeGen::CreateMemSet(llvm::Value* addr, llvm::Value* val, llvm::Value*
headVal = mIRBuilder->CreateBitCast(addr, intTy->getPointerTo()); headVal = mIRBuilder->CreateBitCast(addr, intTy->getPointerTo());
llvm::Value* ptrVal = headVal; llvm::Value* ptrVal = headVal;
if (curOffset != 0) if (curOffset != 0)
ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(NULL, headVal, curOffset / 2); ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(intTy, headVal, curOffset / 2);
mIRBuilder->CreateStore(constVal, ptrVal, isVolatile); mIRBuilder->CreateStore(constVal, ptrVal, isVolatile);
curOffset += 2; curOffset += 2;
@ -1624,7 +1632,7 @@ void BfIRCodeGen::CreateMemSet(llvm::Value* addr, llvm::Value* val, llvm::Value*
headVal = mIRBuilder->CreateBitCast(addr, intTy->getPointerTo()); headVal = mIRBuilder->CreateBitCast(addr, intTy->getPointerTo());
llvm::Value* ptrVal = headVal; llvm::Value* ptrVal = headVal;
if (curOffset != 0) if (curOffset != 0)
ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(NULL, headVal, curOffset / 1); ptrVal = mIRBuilder->CreateConstInBoundsGEP1_32(intTy, headVal, curOffset / 1);
mIRBuilder->CreateStore(constVal, ptrVal, isVolatile); mIRBuilder->CreateStore(constVal, ptrVal, isVolatile);
curOffset += 1; curOffset += 1;
@ -1670,7 +1678,9 @@ void BfIRCodeGen::InitTarget()
else if (mCodeGenOptions.mOptLevel == BfOptLevel_O3) else if (mCodeGenOptions.mOptLevel == BfOptLevel_O3)
optLvl = llvm::CodeGenOpt::Aggressive; 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"; featuresStr = "+sse";
else if (mCodeGenOptions.mSIMDSetting == BfSIMDSetting_SSE2) else if (mCodeGenOptions.mSIMDSetting == BfSIMDSetting_SSE2)
featuresStr = "+sse2"; featuresStr = "+sse2";
@ -1787,7 +1797,7 @@ void BfIRCodeGen::HandleNextCmd()
{ {
CMD_PARAM(String, fileName); CMD_PARAM(String, fileName);
std::error_code ec; 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) if (ec)
{ {
Fail("Failed writing IR '" + fileName + "': " + ec.message()); Fail("Failed writing IR '" + fileName + "': " + ec.message());
@ -2311,12 +2321,12 @@ void BfIRCodeGen::HandleNextCmd()
if (auto alignedPtr = GetAlignedPtr(val)) 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())); SetResult(curId, mIRBuilder->CreateBitCast(gepResult, val->getType()));
break; break;
} }
SetResult(curId, mIRBuilder->CreateConstInBoundsGEP1_32(NULL, val, idx0)); SetResult(curId, mIRBuilder->CreateConstInBoundsGEP1_32(val->getType()->getPointerElementType(), val, idx0));
} }
break; break;
case BfIRCmd_InboundsGEP2_32: case BfIRCmd_InboundsGEP2_32:
@ -2324,7 +2334,7 @@ void BfIRCodeGen::HandleNextCmd()
CMD_PARAM(llvm::Value*, val); CMD_PARAM(llvm::Value*, val);
CMD_PARAM(int, idx0); CMD_PARAM(int, idx0);
CMD_PARAM(int, idx1); 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; break;
case BfIRCmd_InBoundsGEP1: case BfIRCmd_InBoundsGEP1:
@ -2338,7 +2348,7 @@ void BfIRCodeGen::HandleNextCmd()
SetResult(curId, mIRBuilder->CreateBitCast(gepResult, val->getType())); SetResult(curId, mIRBuilder->CreateBitCast(gepResult, val->getType()));
break; break;
} }
FixIndexer(idx0);
SetResult(curId, mIRBuilder->CreateInBoundsGEP(val, idx0)); SetResult(curId, mIRBuilder->CreateInBoundsGEP(val, idx0));
} }
break; break;
@ -2347,6 +2357,8 @@ void BfIRCodeGen::HandleNextCmd()
CMD_PARAM(llvm::Value*, val); CMD_PARAM(llvm::Value*, val);
CMD_PARAM(llvm::Value*, idx0); CMD_PARAM(llvm::Value*, idx0);
CMD_PARAM(llvm::Value*, idx1); CMD_PARAM(llvm::Value*, idx1);
FixIndexer(idx0);
FixIndexer(idx1);
llvm::Value* indices[2] = { idx0, idx1 }; llvm::Value* indices[2] = { idx0, idx1 };
SetResult(curId, FixGEP(val, mIRBuilder->CreateInBoundsGEP(val, llvm::makeArrayRef(indices)))); SetResult(curId, FixGEP(val, mIRBuilder->CreateInBoundsGEP(val, llvm::makeArrayRef(indices))));
} }
@ -3112,7 +3124,7 @@ void BfIRCodeGen::HandleNextCmd()
if (result != NULL) 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())) if (auto intType = llvm::dyn_cast<llvm::IntegerType>(vecType->getElementType()))
{ {
@ -3180,7 +3192,7 @@ void BfIRCodeGen::HandleNextCmd()
if (result != NULL) 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())) 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) if (intrinsicData->mIntrinsic == BfIRIntrinsic_AtomicCmpStore_Weak)
inst->setWeak(true); inst->setWeak(true);
if ((memoryKind & BfIRAtomicOrdering_Volatile) != 0) if ((memoryKind & BfIRAtomicOrdering_Volatile) != 0)
@ -3547,7 +3559,7 @@ void BfIRCodeGen::HandleNextCmd()
break; 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) if ((memoryKind & BfIRAtomicOrdering_Volatile) != 0)
atomicRMW->setVolatile(true); atomicRMW->setVolatile(true);
llvm::Value* result = atomicRMW; llvm::Value* result = atomicRMW;
@ -3776,7 +3788,17 @@ void BfIRCodeGen::HandleNextCmd()
CMD_PARAM(int, argIdx); CMD_PARAM(int, argIdx);
BfIRAttribute attribute = (BfIRAttribute)mStream->Read(); BfIRAttribute attribute = (BfIRAttribute)mStream->Read();
BF_ASSERT(llvm::isa<llvm::CallInst>(callInst)); 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; break;
case BfIRCmd_Call_AddAttribute1: case BfIRCmd_Call_AddAttribute1:
@ -3794,12 +3816,11 @@ void BfIRCodeGen::HandleNextCmd()
} }
else if (attribute == BfIRAttribute_ByVal) else if (attribute == BfIRAttribute_ByVal)
{ {
llvm::AttrBuilder B; auto funcType = ((llvm::CallInst*)callInst)->getFunctionType();
B.addAttribute(llvm::Attribute::ByVal); llvm::Attribute byValAttr = llvm::Attribute::getWithByValType(*mLLVMContext, funcType->getFunctionParamType(argIdx - 1)->getPointerElementType());
B.addAlignmentAttr(arg); llvm::Attribute alignAttr = llvm::Attribute::getWithAlignment(*mLLVMContext, llvm::Align(arg));
auto attrList = ((llvm::CallInst*)callInst)->getAttributes(); ((llvm::CallInst*)callInst)->addAttribute(argIdx, byValAttr);
attrList = attrList.addAttributes(*mLLVMContext, argIdx, B); ((llvm::CallInst*)callInst)->addAttribute(argIdx, alignAttr);
((llvm::CallInst*)callInst)->setAttributes(attrList);
} }
} }
} }
@ -3854,7 +3875,13 @@ void BfIRCodeGen::HandleNextCmd()
else else
{ {
auto attr = LLVMMapAttribute(attribute); 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); func->addAttribute(argIdx, attr);
} }
} }
@ -3871,12 +3898,11 @@ void BfIRCodeGen::HandleNextCmd()
} }
else if (attribute == BfIRAttribute_ByVal) else if (attribute == BfIRAttribute_ByVal)
{ {
llvm::AttrBuilder B; auto funcType = func->getFunctionType();
B.addAttribute(llvm::Attribute::ByVal); llvm::Attribute byValAttr = llvm::Attribute::getWithByValType(*mLLVMContext, funcType->getFunctionParamType(argIdx - 1)->getPointerElementType());
B.addAlignmentAttr(arg); llvm::Attribute alignAttr = llvm::Attribute::getWithAlignment(*mLLVMContext, llvm::Align(arg));
auto attrList = ((llvm::Function*)func)->getAttributes(); func->addAttribute(argIdx, byValAttr);
attrList = attrList.addAttributes(*mLLVMContext, argIdx, B); func->addAttribute(argIdx, alignAttr);
((llvm::Function*)func)->setAttributes(attrList);
} }
} }
break; break;
@ -3966,7 +3992,7 @@ void BfIRCodeGen::HandleNextCmd()
CMD_PARAM(int, column); CMD_PARAM(int, column);
CMD_PARAM(llvm::MDNode*, diScope); CMD_PARAM(llvm::MDNode*, diScope);
CMD_PARAM(llvm::MDNode*, diInlinedAt); CMD_PARAM(llvm::MDNode*, diInlinedAt);
mDebugLoc = llvm::DebugLoc::get(line, column, diScope, diInlinedAt); mDebugLoc = llvm::DILocation::get(*mLLVMContext, line, column, diScope, diInlinedAt);
} }
break; break;
case BfIRCmd_Nop: 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. // convert to more optimized IR using more aggressive simplify CFG options.
// The extra sinking transform can create larger basic blocks, so do this // The extra sinking transform can create larger basic blocks, so do this
// before SLP vectorization. // 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) { if (options.mRunSLPAfterLoopVectorization && options.mSLPVectorize) {
MPM.add(llvm::createSLPVectorizerPass()); // Vectorize parallel scalar chains. MPM.add(llvm::createSLPVectorizerPass()); // Vectorize parallel scalar chains.
@ -5343,7 +5369,7 @@ bool BfIRCodeGen::WriteObjectFile(const StringImpl& outFileName)
} }
std::error_code EC; 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); llvm::raw_fd_ostream out(outFileName.c_str(), EC, OpenFlags);
@ -5368,7 +5394,7 @@ bool BfIRCodeGen::WriteObjectFile(const StringImpl& outFileName)
if ((enableLTO) || (mCodeGenOptions.mWriteBitcode)) if ((enableLTO) || (mCodeGenOptions.mWriteBitcode))
{ {
std::error_code ec; 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()) if (outStream->has_error())
{ {
return false; return false;
@ -5438,7 +5464,7 @@ bool BfIRCodeGen::WriteObjectFile(const StringImpl& outFileName)
bool BfIRCodeGen::WriteIR(const StringImpl& outFileName, StringImpl& error) bool BfIRCodeGen::WriteIR(const StringImpl& outFileName, StringImpl& error)
{ {
std::error_code ec; 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) if (ec)
{ {
error = ec.message(); error = ec.message();

View file

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

View file

@ -2616,6 +2616,10 @@ void BfModule::UpdateSrcPos(BfAstNode* astNode, BfSrcPosFlags flags, int debugLo
if ((!useDIScope) && (mIsComptimeModule)) if ((!useDIScope) && (mIsComptimeModule))
useDIScope = wantDIFile; useDIScope = wantDIFile;
if (!useDIScope)
mBfIRBuilder->ClearDebugLocation();
else
mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, column, useDIScope, inlineAt); mBfIRBuilder->SetCurrentDebugLocation(mCurFilePosition.mCurLine + 1, column, useDIScope, inlineAt);
if ((flags & BfSrcPosFlag_Expression) == 0) if ((flags & BfSrcPosFlag_Expression) == 0)
mBfIRBuilder->CreateStatementStart(); mBfIRBuilder->CreateStatementStart();
@ -2638,16 +2642,20 @@ void BfModule::UseDefaultSrcPos(BfSrcPosFlags flags, int debugLocOffset)
void BfModule::SetIllegalSrcPos(BfSrcPosFlags flags) void BfModule::SetIllegalSrcPos(BfSrcPosFlags flags)
{ {
if ((mBfIRBuilder->DbgHasInfo()) && (mCurMethodState != NULL)) if ((mBfIRBuilder->DbgHasInfo()) && (mCurMethodState != NULL))
{
auto curScope = mCurMethodState->mCurScope->mDIScope;
if (curScope)
{ {
if ((mCurMethodState->mCurScope->mDIInlinedAt) && (mCompiler->mOptions.IsCodeView())) 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 // 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 else
{ {
// Set to whatever it previously was but at column zero, which we will know to be illegal // 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) if ((flags & BfSrcPosFlag_Expression) == 0)

View file

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

View file

@ -160,7 +160,7 @@
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions> <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> <BufferSecurityCheck>false</BufferSecurityCheck>
<AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -171,8 +171,8 @@
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<GenerateDebugInformation>DebugFull</GenerateDebugInformation> <GenerateDebugInformation>DebugFull</GenerateDebugInformation>
<OutputFile>$(SolutionDir)\IDE\dist\$(TargetName).dll</OutputFile> <OutputFile>$(SolutionDir)\IDE\dist\$(TargetName).dll</OutputFile>
<AdditionalDependencies>rpcrt4.lib;cabinet.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;libcurl_a.lib;wininet.lib;LLVMMCDisassembler.lib;LLVMSupport.lib;LLVMMC.lib;LLVMObject.lib;LLVMCore.lib;LLVMBitReader.lib;LLVMAsmParser.lib;LLVMMCParser.lib;LLVMCodeGen.lib;LLVMTarget.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMSelectionDAG.lib;LLVMProfileData.lib;LLVMAnalysis.lib;LLVMAsmPrinter.lib;LLVMBitWriter.lib;LLVMVectorize.lib;LLVMipo.lib;LLVMInstrumentation.lib;LLVMDebugInfoDWARF.lib;LLVMDebugInfoPDB.lib;LLVMDebugInfoCodeView.lib;LLVMGlobalISel.lib;LLVMBinaryFormat.lib;LLVMBitstreamReader.lib;LLVMLTO.lib;LLVMPasses.lib;LLVMLinker.lib;LLVMIRReader.lib;LLVMDemangle.lib;LLVMTransformUtils.lib;LLVMAggressiveInstCombine.lib;LLVMCFGuard.lib;LLVMTextAPI.lib;LLVMRemarks.lib;LLVMX86Info.lib;LLVMX86Desc.lib;LLVMX86CodeGen.lib;LLVMX86AsmParser.lib;LLVMX86Disassembler.lib;LLVMAArch64Info.lib;LLVMAArch64Utils.lib;LLVMAArch64Desc.lib;LLVMAArch64CodeGen.lib;LLVMAArch64AsmParser.lib;LLVMAArch64Disassembler.lib;LLVMARMInfo.lib;LLVMARMUtils.lib;LLVMARMDesc.lib;LLVMARMCodeGen.lib;LLVMARMAsmParser.lib;LLVMARMDisassembler.lib;LLVMWebAssemblyInfo.lib;LLVMWebAssemblyDesc.lib;LLVMWebAssemblyCodeGen.lib;LLVMWebAssemblyAsmParser.lib;LLVMWebAssemblyDisassembler.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>rpcrt4.lib;cabinet.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;libcurl_a.lib;wininet.lib;LLVMMCDisassembler.lib;LLVMSupport.lib;LLVMMC.lib;LLVMObject.lib;LLVMCore.lib;LLVMBitReader.lib;LLVMAsmParser.lib;LLVMMCParser.lib;LLVMCodeGen.lib;LLVMTarget.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMSelectionDAG.lib;LLVMProfileData.lib;LLVMAnalysis.lib;LLVMAsmPrinter.lib;LLVMBitWriter.lib;LLVMVectorize.lib;LLVMipo.lib;LLVMInstrumentation.lib;LLVMDebugInfoDWARF.lib;LLVMDebugInfoPDB.lib;LLVMDebugInfoCodeView.lib;LLVMGlobalISel.lib;LLVMBinaryFormat.lib;LLVMBitstreamReader.lib;LLVMLTO.lib;LLVMPasses.lib;LLVMLinker.lib;LLVMIRReader.lib;LLVMDemangle.lib;LLVMTransformUtils.lib;LLVMAggressiveInstCombine.lib;LLVMCFGuard.lib;LLVMTextAPI.lib;LLVMRemarks.lib;LLVMX86Info.lib;LLVMX86Desc.lib;LLVMX86CodeGen.lib;LLVMX86AsmParser.lib;LLVMX86Disassembler.lib;LLVMAArch64Info.lib;LLVMAArch64Utils.lib;LLVMAArch64Desc.lib;LLVMAArch64CodeGen.lib;LLVMAArch64AsmParser.lib;LLVMAArch64Disassembler.lib;LLVMARMInfo.lib;LLVMARMUtils.lib;LLVMARMDesc.lib;LLVMARMCodeGen.lib;LLVMARMAsmParser.lib;LLVMARMDisassembler.lib;LLVMWebAssemblyInfo.lib;LLVMWebAssemblyDesc.lib;LLVMWebAssemblyCodeGen.lib;LLVMWebAssemblyAsmParser.lib;LLVMWebAssemblyDisassembler.lib;LLVMWebAssemblyUtils.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\extern\llvm_win64_11_0_0\Debug\lib; ..\extern\curl\builds\libcurl-vc15-x64-release-static-zlib-static-ipv6-sspi-winssl\lib;..\extern\curl\deps\lib;..\extern\jemalloc_win\x64\debug</AdditionalLibraryDirectories> <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> <RandomizedBaseAddress>false</RandomizedBaseAddress>
<ImportLibrary>$(SolutionDir)\IDE\dist\$(TargetName).lib</ImportLibrary> <ImportLibrary>$(SolutionDir)\IDE\dist\$(TargetName).lib</ImportLibrary>
<IgnoreSpecificDefaultLibraries>MSVCRT</IgnoreSpecificDefaultLibraries> <IgnoreSpecificDefaultLibraries>MSVCRT</IgnoreSpecificDefaultLibraries>
@ -219,7 +219,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>zBP_DISABLED;WIN32;NDEBUG;_WINDOWS;_USRDLL;IDEHELPER_EXPORTS;BFSYSLIB_DYNAMIC;%(PreprocessorDefinitions)</PreprocessorDefinitions> <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> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile> </ClCompile>
@ -229,8 +229,8 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<OutputFile>$(SolutionDir)\IDE\dist\$(TargetName).dll</OutputFile> <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> <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;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>rpcrt4.lib;cabinet.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;libcurl_a.lib;wininet.lib;LLVMMCDisassembler.lib;LLVMSupport.lib;LLVMMC.lib;LLVMObject.lib;LLVMCore.lib;LLVMBitReader.lib;LLVMAsmParser.lib;LLVMMCParser.lib;LLVMCodeGen.lib;LLVMTarget.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMSelectionDAG.lib;LLVMProfileData.lib;LLVMAnalysis.lib;LLVMAsmPrinter.lib;LLVMBitWriter.lib;LLVMVectorize.lib;LLVMipo.lib;LLVMInstrumentation.lib;LLVMDebugInfoDWARF.lib;LLVMDebugInfoPDB.lib;LLVMDebugInfoCodeView.lib;LLVMGlobalISel.lib;LLVMBinaryFormat.lib;LLVMBitstreamReader.lib;LLVMLTO.lib;LLVMPasses.lib;LLVMLinker.lib;LLVMIRReader.lib;LLVMDemangle.lib;LLVMTransformUtils.lib;LLVMAggressiveInstCombine.lib;LLVMCFGuard.lib;LLVMTextAPI.lib;LLVMRemarks.lib;LLVMX86Info.lib;LLVMX86Desc.lib;LLVMX86CodeGen.lib;LLVMX86AsmParser.lib;LLVMX86Disassembler.lib;LLVMAArch64Info.lib;LLVMAArch64Utils.lib;LLVMAArch64Desc.lib;LLVMAArch64CodeGen.lib;LLVMAArch64AsmParser.lib;LLVMAArch64Disassembler.lib;LLVMARMInfo.lib;LLVMARMUtils.lib;LLVMARMDesc.lib;LLVMARMCodeGen.lib;LLVMARMAsmParser.lib;LLVMARMDisassembler.lib;LLVMWebAssemblyInfo.lib;LLVMWebAssemblyDesc.lib;LLVMWebAssemblyCodeGen.lib;LLVMWebAssemblyAsmParser.lib;LLVMWebAssemblyDisassembler.lib;LLVMWebAssemblyUtils.lib;%(AdditionalDependencies)</AdditionalDependencies>
<RandomizedBaseAddress>false</RandomizedBaseAddress> <RandomizedBaseAddress>false</RandomizedBaseAddress>
<FullProgramDatabaseFile>true</FullProgramDatabaseFile> <FullProgramDatabaseFile>true</FullProgramDatabaseFile>
<ImportLibrary>$(SolutionDir)\IDE\dist\$(TargetName).lib</ImportLibrary> <ImportLibrary>$(SolutionDir)\IDE\dist\$(TargetName).lib</ImportLibrary>

View file

@ -836,8 +836,13 @@ X64CPU::X64CPU() :
mInstrInfo = TheX86_64Target.createMCInstrInfo(); mInstrInfo = TheX86_64Target.createMCInstrInfo();
mMCObjectFileInfo = new MCObjectFileInfo(); mMCContext = new MCContext(Triple(triple), mAsmInfo, mRegisterInfo, mSubtargetInfo);
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); MCDisassembler *disAsm = TheX86_64Target.createMCDisassembler(*mSubtargetInfo, *mMCContext);
mDisAsm = disAsm; mDisAsm = disAsm;

View file

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

View file

@ -14,7 +14,7 @@ PUSHD %~dp0..\
mkdir stats mkdir stats
:STATS_HAS :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 call extern\llvm_build.bat
@IF %ERRORLEVEL% NEQ 0 GOTO HADERROR @IF %ERRORLEVEL% NEQ 0 GOTO HADERROR
:LLVM_HAS :LLVM_HAS

View file

@ -20,7 +20,7 @@ if [ ! -f ../BeefySysLib/third_party/libffi/Makefile ]; then
cd $SCRIPTPATH cd $SCRIPTPATH
fi 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... echo Building LLVM...
cd ../extern cd ../extern
./llvm_build.sh ./llvm_build.sh

View file

@ -1,4 +1,4 @@
mkdir ..\wasm mkdir ..\wasm
cd ..\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 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 PUSHD %~dp0
@IF EXIST llvm-project_11_0_0 GOTO LLVM_HAS @IF EXIST llvm-project_13_0_1 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 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
@rem pushd llvm-project_11_0_0 @IF %ERRORLEVEL% NEQ 0 GOTO HADERROR
:LLVM_HAS :LLVM_HAS
@IF EXIST llvm_win64_11_0_0 GOTO HAS_CONFIG @IF EXIST llvm_win64_13_0_1 GOTO HAS_CONFIG
mkdir llvm_win64_11_0_0 mkdir llvm_win64_13_0_1
cd llvm_win64_11_0_0 cd llvm_win64_13_0_1
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" 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 @GOTO DOBUILD
:HAS_CONFIG :HAS_CONFIG
cd llvm_win64_11_0_0 cd llvm_win64_13_0_1
@GOTO DOBUILD @GOTO DOBUILD
:DOBUILD :DOBUILD
set /p LLVM_TARGETS=<../llvm_targets.txt set /p LLVM_TARGETS=<../llvm_targets.txt
cmake --build . -t %LLVM_TARGETS% --config Debug cmake --build . -t %LLVM_TARGETS% --config Debug
@IF %ERRORLEVEL% NEQ 0 GOTO HADERROR
cmake --build . -t %LLVM_TARGETS% --config Release cmake --build . -t %LLVM_TARGETS% --config Release
@IF %ERRORLEVEL% NEQ 0 GOTO HADERROR
echo done > _Done.txt
:SUCCESS :SUCCESS
@ECHO SUCCESS! @ECHO SUCCESS!

39
extern/llvm_build.sh vendored
View file

@ -1,34 +1,34 @@
#!/bin/bash #!/bin/bash
set -e set -e
if [ ! -d llvm-project_11_0_0 ]; then if [ ! -d llvm-project_13_0_1 ]; 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 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-11.0.0.src.tar.xz tar -xf llvm-13.0.1.src.tar.xz
mkdir llvm-project_11_0_0 mkdir llvm-project_13_0_1
mv llvm-11.0.0.src llvm-project_11_0_0/llvm mv llvm-13.0.1.src llvm-project_13_0_1/llvm
else # shallow git clone llvm repo if llvm-11.0.0.src.tar.xz does not exists else # shallow git clone llvm repo if llvm-13.0.1.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 git clone --depth 1 --branch llvmorg-13.0.1 https://github.com/llvm/llvm-project.git llvm-project_13_0_1
fi 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 if [ ! -d llvm_linux_13_0_1 ]; then
mkdir llvm_linux_11_0_0 mkdir llvm_linux_13_0_1
fi fi
if [ ! -d llvm_linux_11_0_0/bin ]; then if [ ! -d llvm_linux_13_0_1/bin ]; then
cd llvm_linux_11_0_0 cd llvm_linux_13_0_1
cmake ../llvm-project_11_0_0/llvm -DLLVM_TARGETS_TO_BUILD="AArch64;ARM;X86;WebAssembly" -DCMAKE_BUILD_TYPE:String="Debug" 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) cmake --build . -t $(cat ../llvm_targets.txt)
cd .. cd ..
fi fi
if [ ! -d llvm_linux_rel_11_0_0 ]; then if [ ! -d llvm_linux_rel_13_0_1 ]; then
mkdir llvm_linux_rel_11_0_0 mkdir llvm_linux_rel_13_0_1
fi fi
if [ ! -d llvm_linux_rel_11_0_0/bin ]; then if [ ! -d llvm_linux_rel_13_0_1/bin ]; then
cd llvm_linux_rel_11_0_0 cd llvm_linux_rel_13_0_1
cmake ../llvm-project_11_0_0/llvm -DLLVM_TARGETS_TO_BUILD="AArch64;ARM;X86;WebAssembly" -DCMAKE_BUILD_TYPE:String="Release" 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) cmake --build . -t $(cat ../llvm_targets.txt)
cd .. cd ..
fi fi
@ -37,5 +37,6 @@ if [ ! -d ../IDE/dist/llvm/bin ]; then
mkdir ../IDE/dist/llvm mkdir ../IDE/dist/llvm
mkdir ../IDE/dist/llvm/bin mkdir ../IDE/dist/llvm/bin
fi 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