aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-09-21 10:38:44 +0100
committergingerBill <bill@gingerbill.org>2023-09-21 10:38:44 +0100
commit96fbafe3598822d8d62791d881879c4da33431ea (patch)
treea76dc5239c69953c1da5b32cd79e37d9320b7767 /src
parente82b0ea4cd1b8c750b517eee806ea4ae1e2b21a6 (diff)
Update ABI breaking changes for `f16` types (due to LLVM 15+)
Diffstat (limited to 'src')
-rw-r--r--src/checker.cpp3
-rw-r--r--src/llvm_backend.hpp14
-rw-r--r--src/llvm_backend_opt.cpp10
-rw-r--r--src/main.cpp1
4 files changed, 17 insertions, 11 deletions
diff --git a/src/checker.cpp b/src/checker.cpp
index 18d403d80..0be912df5 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -935,6 +935,7 @@ gb_internal i64 odin_compile_timestamp(void) {
return ns_after_1970;
}
+gb_internal bool lb_use_new_pass_system(void);
gb_internal void init_universal(void) {
BuildContext *bc = &build_context;
@@ -1083,6 +1084,8 @@ gb_internal void init_universal(void) {
add_global_constant("ODIN_COMPILE_TIMESTAMP", t_untyped_integer, exact_value_i64(odin_compile_timestamp()));
+ add_global_bool_constant("__ODIN_LLVM_F16_SUPPORTED", lb_use_new_pass_system());
+
// Builtin Procedures
for (isize i = 0; i < gb_count_of(builtin_procs); i++) {
diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp
index d4da1f18a..048233c08 100644
--- a/src/llvm_backend.hpp
+++ b/src/llvm_backend.hpp
@@ -48,6 +48,20 @@
#define ODIN_LLVM_MINIMUM_VERSION_14 0
#endif
+#if LLVM_VERSION_MAJOR == 15 || LLVM_VERSION_MAJOR == 16
+#error "LLVM versions 15 and 16 are not supported"
+#endif
+
+#if LLVM_VERSION_MAJOR >= 17
+#define LB_USE_NEW_PASS_SYSTEM 1
+#else
+#define LB_USE_NEW_PASS_SYSTEM 0
+#endif
+
+gb_internal bool lb_use_new_pass_system(void) {
+ return LB_USE_NEW_PASS_SYSTEM;
+}
+
struct lbProcedure;
struct lbValue {
diff --git a/src/llvm_backend_opt.cpp b/src/llvm_backend_opt.cpp
index 2f0dc24fd..055cb5bcb 100644
--- a/src/llvm_backend_opt.cpp
+++ b/src/llvm_backend_opt.cpp
@@ -55,16 +55,6 @@ gb_internal void lb_populate_function_pass_manager_specific(lbModule *m, LLVMPas
#define LLVM_ADD_CONSTANT_VALUE_PASS(fpm)
#endif
-#if LLVM_VERSION_MAJOR == 15 || LLVM_VERSION_MAJOR == 16
-#error "LLVM versions 15 and 16 are not supported"
-#endif
-
-#if LLVM_VERSION_MAJOR >= 17
-#define LB_USE_NEW_PASS_SYSTEM 1
-#else
-#define LB_USE_NEW_PASS_SYSTEM 0
-#endif
-
gb_internal bool lb_opt_ignore(i32 optimization_level) {
return optimization_level < 0;
}
diff --git a/src/main.cpp b/src/main.cpp
index 706bbab87..c6b6e74bf 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -412,7 +412,6 @@ gb_internal bool parse_build_flags(Array<String> args) {
add_flag(&build_flags, BuildFlag_SingleFile, str_lit("file"), BuildFlagParam_None, Command__does_build | Command__does_check);
add_flag(&build_flags, BuildFlag_OutFile, str_lit("out"), BuildFlagParam_String, Command__does_build | Command_test);
add_flag(&build_flags, BuildFlag_OptimizationMode, str_lit("o"), BuildFlagParam_String, Command__does_build);
- add_flag(&build_flags, BuildFlag_OptimizationMode, str_lit("O"), BuildFlagParam_String, Command__does_build);
add_flag(&build_flags, BuildFlag_ShowTimings, str_lit("show-timings"), BuildFlagParam_None, Command__does_check);
add_flag(&build_flags, BuildFlag_ShowMoreTimings, str_lit("show-more-timings"), BuildFlagParam_None, Command__does_check);
add_flag(&build_flags, BuildFlag_ExportTimings, str_lit("export-timings"), BuildFlagParam_String, Command__does_check);