Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade to LLVM 18 #27

Merged
merged 4 commits into from
Mar 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions .cppb/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@
},
"linux": {
"link_dependencies": [ "ryu_format.linux.o" ],
"compiler": "clang-17",
"libraries": [ "LLVM-17", "backtrace" ],
"link_flags": [ "-fuse-ld=lld-17" ],
"compiler": "clang-18",
"libraries": [ "LLVM-18", "backtrace" ],
"link_flags": [ "-fuse-ld=lld-18" ],
"emit_compile_commands": false
},
"debug": {
Expand Down Expand Up @@ -106,7 +106,7 @@
},
"linux": {
"compiler": "gcc-12",
"libraries": [ "LLVM-17", "backtrace" ],
"libraries": [ "LLVM-18", "backtrace" ],
"link_flags": [ "-fuse-ld=lld" ],
"warnings": [ "no-unused-parameter" ]
},
Expand Down Expand Up @@ -188,9 +188,9 @@
},
"linux": {
"link_dependencies": [ "ryu_format.linux.o" ],
"compiler": "clang-17",
"compiler": "clang-18",
"libraries": [ "backtrace" ],
"link_flags": [ "-fuse-ld=lld-17" ],
"link_flags": [ "-fuse-ld=lld-18" ],
"emit_compile_commands": false
},
"debug": {
Expand All @@ -216,7 +216,7 @@
"link_flags": [ "-fuse-ld=lld" ]
},
"linux": {
"link_flags": [ "-fuse-ld=lld-17" ]
"link_flags": [ "-fuse-ld=lld-18" ]
},
"debug": {
"optimization": "0",
Expand Down Expand Up @@ -255,7 +255,7 @@
},
"generate_config.out": {
"dependencies": [ "scripts/generate_config.cpp" ],
"command": "clang++-17 -std=c++20 -Isrc -Iinclude scripts/generate_config.cpp -o generate_config.out"
"command": "clang++-18 -std=c++20 -Isrc -Iinclude scripts/generate_config.cpp -o generate_config.out"
},
"generate-config": {
"windows": {
Expand Down Expand Up @@ -299,7 +299,7 @@
},
"generate_lexer.out": {
"dependencies": [ "scripts/generate_lexer.cpp", "src/token_info.h" ],
"command": "clang++-17 -std=c++20 -Isrc -Iinclude scripts/generate_lexer.cpp -o generate_lexer.out"
"command": "clang++-18 -std=c++20 -Isrc -Iinclude scripts/generate_lexer.cpp -o generate_lexer.out"
},
"generate-lexer": {
"windows": {
Expand All @@ -319,7 +319,7 @@
},
"ryu_format.linux.o": {
"dependencies": [ "ryu_format.linux.bc" ],
"command": "llc-17 ryu_format.linux.bc --filetype=obj --relocation-model=pic -o ryu_format.linux.o"
"command": "llc-18 ryu_format.linux.bc --filetype=obj --relocation-model=pic -o ryu_format.linux.o"
},
"ryu_format.windows.bc": {
"dependencies": [ "ryu_format.bz" ],
Expand Down Expand Up @@ -351,19 +351,19 @@
},
"a.out": {
"dependencies": [ "bitcode_test.o" ],
"command": "clang-17 bitcode_test.o -lm -o a.out -fuse-ld=lld-17"
"command": "clang-18 bitcode_test.o -lm -o a.out -fuse-ld=lld-18"
},
"run-tests": {
"command": "python3 scripts/run_tests.py",
"is_file": false
},
"fuzz-test/lex/fuzz.o": {
"dependencies": [ "fuzz-test/lex/fuzz.cpp" ],
"command": "clang++-17 -c -g `llvm-config-17 --cxxflags` -std=c++20 -fno-omit-frame-pointer -fsanitize=fuzzer,address -Isrc -Iinclude -DBOZON_NO_ARENA -Wall -Wextra -Wno-unused-parameter -Wno-c++20-extensions -Wno-defaulted-function-deleted -O1 -o fuzz-test/lex/fuzz.o fuzz-test/lex/fuzz.cpp"
"command": "clang++-18 -c -g `llvm-config-18 --cxxflags` -std=c++20 -fno-omit-frame-pointer -fsanitize=fuzzer,address -Isrc -Iinclude -DBOZON_NO_ARENA -Wall -Wextra -Wno-unused-parameter -Wno-c++20-extensions -Wno-defaulted-function-deleted -O1 -o fuzz-test/lex/fuzz.o fuzz-test/lex/fuzz.cpp"
},
"fuzz-test/lex/fuzz.out": {
"dependencies": [ "fuzz-test/lex/fuzz.o" ],
"command": "clang++-17 -o fuzz-test/lex/fuzz.out fuzz-test/lex/fuzz.o `llvm-config-17 --ldflags --libs --system-libs` -fsanitize=fuzzer,address -fuse-ld=lld -Wl,--unresolved-symbols=ignore-in-object-files"
"command": "clang++-18 -o fuzz-test/lex/fuzz.out fuzz-test/lex/fuzz.o `llvm-config-18 --ldflags --libs --system-libs` -fsanitize=fuzzer,address -fuse-ld=lld -Wl,--unresolved-symbols=ignore-in-object-files"
},
"run-lex-fuzzer": {
"dependencies": [ "fuzz-test/lex/fuzz.out" ],
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,10 @@ jobs:
- uses: actions/checkout@v4
- name: Install packages
run: |
printf "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-17 main" | sudo tee /etc/apt/sources.list.d/llvm-toolchain-focal-17.list
printf "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-18 main" | sudo tee /etc/apt/sources.list.d/llvm-toolchain-focal-18.list
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt update
sudo apt install gcc gcc-12 g++-12 llvm-17 lld-17 clang-17 libfmt-dev nlohmann-json3-dev libssl-dev python3
sudo apt install gcc gcc-12 g++-12 llvm-18 lld-18 clang-18 libfmt-dev nlohmann-json3-dev libssl-dev python3
- name: Install libbacktrace
run: |
git clone https://github.com/ianlancetaylor/libbacktrace.git
Expand All @@ -112,7 +112,7 @@ jobs:
git clone https://github.com/Il-Capitano/cppb.git
cd cppb
mkdir bin
make CXX=clang++-17 LD=lld-17
make CXX=clang++-18 LD=lld-18
cd ..
- run: touch ryu_format.linux.bc
- name: Build bozon
Expand All @@ -136,10 +136,10 @@ jobs:
- uses: actions/checkout@v4
- name: Install packages
run: |
printf "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-17 main" | sudo tee /etc/apt/sources.list.d/llvm-toolchain-focal-17.list
printf "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-18 main" | sudo tee /etc/apt/sources.list.d/llvm-toolchain-focal-18.list
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt update
sudo apt install gcc lld gcc-12 g++-12 llvm-17 lld-17 clang-17 libfmt-dev nlohmann-json3-dev libssl-dev python3
sudo apt install gcc lld gcc-12 g++-12 llvm-18 lld-18 clang-18 libfmt-dev nlohmann-json3-dev libssl-dev python3
- name: Install libbacktrace
run: |
git clone https://github.com/ianlancetaylor/libbacktrace.git
Expand All @@ -152,7 +152,7 @@ jobs:
git clone https://github.com/Il-Capitano/cppb.git
cd cppb
mkdir bin
make CXX=clang++-17 LD=lld-17
make CXX=clang++-18 LD=lld-18
cd ..
- run: touch ryu_format.linux.bc
- name: Build bozon
Expand Down
Binary file modified ryu_format.linux.bc
Binary file not shown.
Binary file modified ryu_format.windows.bc
Binary file not shown.
4 changes: 2 additions & 2 deletions scripts/generate_config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,12 @@ static bz::u8string to_upper(bz::u8string_view s)
static bool has_llvm(void)
{
return bz::run_process("llvm-config", bz::array_view<char const * const>{ "--version" }).return_code != 0
|| bz::run_process("llvm-config-17", bz::array_view<char const * const>{ "--version" }).return_code != 0;
|| bz::run_process("llvm-config-18", bz::array_view<char const * const>{ "--version" }).return_code != 0;
}

static bz::optional<bz::u8string> get_llvm_default_target(void)
{
for (auto const llvm_config : { "llvm-config", "llvm-config-17" })
for (auto const llvm_config : { "llvm-config", "llvm-config-18" })
{
auto process_result = bz::run_process(llvm_config, bz::array_view<char const * const>{ "--host-target" });
if (process_result.return_code == 0)
Expand Down
33 changes: 17 additions & 16 deletions src/codegen/llvm_latest/backend_context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,19 @@
#include <llvm/Passes/PassBuilder.h>
#include <llvm/Bitcode/BitcodeWriter.h>

#if LLVM_VERSION_MAJOR != 17
#error LLVM 17 is required
#endif // LLVM 17
#if LLVM_VERSION_MAJOR != 18
#error LLVM 18 is required
#endif // LLVM 18

namespace codegen::llvm_latest
{

static bz::array<llvm::Type *, static_cast<int>(ast::type_info::null_t_) + 1>
get_llvm_builtin_types(llvm::LLVMContext &context)
{
auto const i8_ptr = llvm::Type::getInt8PtrTy(context);
auto const str_t = llvm::StructType::create("builtin.str", i8_ptr, i8_ptr);
auto const ptr_type = llvm::PointerType::get(context, 0);
llvm::Type *pointer_pair[] = { ptr_type, ptr_type };
auto const str_t = llvm::StructType::create(context, pointer_pair, "builtin.str");
auto const null_t = llvm::StructType::create(context, {}, "builtin.__null_t");
return {
llvm::Type::getInt8Ty(context), // int8_
Expand Down Expand Up @@ -130,31 +131,31 @@ backend_context::backend_context(ctx::global_context &global_ctx, bz::u8string_v
switch (*machine_code_opt_level)
{
case 0:
return llvm::CodeGenOpt::None;
return llvm::CodeGenOptLevel::None;
case 1:
return llvm::CodeGenOpt::Less;
return llvm::CodeGenOptLevel::Less;
case 2:
return llvm::CodeGenOpt::Default;
return llvm::CodeGenOptLevel::Default;
default:
return llvm::CodeGenOpt::Aggressive;
return llvm::CodeGenOptLevel::Aggressive;
}
}
else if (global_data::size_opt_level != 0)
{
return llvm::CodeGenOpt::Default;
return llvm::CodeGenOptLevel::Default;
}
else
{
switch (global_data::opt_level)
{
case 0:
return llvm::CodeGenOpt::None;
return llvm::CodeGenOptLevel::None;
case 1:
return llvm::CodeGenOpt::Less;
return llvm::CodeGenOptLevel::Less;
case 2:
return llvm::CodeGenOpt::Default;
return llvm::CodeGenOptLevel::Default;
default:
return llvm::CodeGenOpt::Aggressive;
return llvm::CodeGenOptLevel::Aggressive;
}
}
}();
Expand Down Expand Up @@ -543,7 +544,7 @@ static void emit_variables_helper(bz::array_view<ast::statement const> decls, bi
auto &module = this->_module;
llvm::legacy::PassManager pass_manager;
auto const target_machine = this->_target_machine.get();
auto const res = target_machine->addPassesToEmitFile(pass_manager, dest, nullptr, llvm::CGFT_ObjectFile);
auto const res = target_machine->addPassesToEmitFile(pass_manager, dest, nullptr, llvm::CodeGenFileType::ObjectFile);
if (res)
{
global_ctx.report_error("object file emission is not supported");
Expand Down Expand Up @@ -584,7 +585,7 @@ static void emit_variables_helper(bz::array_view<ast::statement const> decls, bi
auto &module = this->_module;
llvm::legacy::PassManager pass_manager;
auto const target_machine = this->_target_machine.get();
auto const res = target_machine->addPassesToEmitFile(pass_manager, dest, nullptr, llvm::CGFT_AssemblyFile);
auto const res = target_machine->addPassesToEmitFile(pass_manager, dest, nullptr, llvm::CodeGenFileType::AssemblyFile);
if (res)
{
global_ctx.report_error("assembly file emission is not supported");
Expand Down