diff options
-rw-r--r-- | src/amd/common/ac_llvm_helper.cpp | 30 | ||||
-rw-r--r-- | src/amd/common/ac_llvm_util.h | 9 | ||||
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_misc.cpp | 29 | ||||
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_misc.h | 9 | ||||
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c | 8 |
5 files changed, 43 insertions, 42 deletions
diff --git a/src/amd/common/ac_llvm_helper.cpp b/src/amd/common/ac_llvm_helper.cpp index 4db703622ca..e42d00280bc 100644 --- a/src/amd/common/ac_llvm_helper.cpp +++ b/src/amd/common/ac_llvm_helper.cpp @@ -35,6 +35,7 @@ #include <llvm/ExecutionEngine/ExecutionEngine.h> #include <llvm/IR/Attributes.h> #include <llvm/IR/CallSite.h> +#include <llvm/IR/IRBuilder.h> #if HAVE_LLVM < 0x0500 namespace llvm { @@ -80,3 +81,32 @@ bool ac_llvm_is_function(LLVMValueRef v) return llvm::isa<llvm::Function>(llvm::unwrap(v)); #endif } + +LLVMBuilderRef ac_create_builder(LLVMContextRef ctx, + enum ac_float_mode float_mode) +{ + LLVMBuilderRef builder = LLVMCreateBuilderInContext(ctx); + +#if HAVE_LLVM >= 0x0308 + llvm::FastMathFlags flags; + + switch (float_mode) { + case AC_FLOAT_MODE_DEFAULT: + break; + case AC_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH: + flags.setNoSignedZeros(); + llvm::unwrap(builder)->setFastMathFlags(flags); + break; + case AC_FLOAT_MODE_UNSAFE_FP_MATH: +#if HAVE_LLVM >= 0x0600 + flags.setFast(); +#else + flags.setUnsafeAlgebra(); +#endif + llvm::unwrap(builder)->setFastMathFlags(flags); + break; + } +#endif + + return builder; +} diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h index 61bcc4e54ed..84fcbf111cf 100644 --- a/src/amd/common/ac_llvm_util.h +++ b/src/amd/common/ac_llvm_util.h @@ -62,6 +62,12 @@ enum ac_target_machine_options { AC_TM_PROMOTE_ALLOCA_TO_SCRATCH = (1 << 4), }; +enum ac_float_mode { + AC_FLOAT_MODE_DEFAULT, + AC_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH, + AC_FLOAT_MODE_UNSAFE_FP_MATH, +}; + const char *ac_get_llvm_processor_name(enum radeon_family family); LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family, enum ac_target_machine_options tm_options); @@ -77,6 +83,9 @@ void ac_dump_module(LLVMModuleRef module); LLVMValueRef ac_llvm_get_called_value(LLVMValueRef call); bool ac_llvm_is_function(LLVMValueRef v); +LLVMBuilderRef ac_create_builder(LLVMContextRef ctx, + enum ac_float_mode float_mode); + void ac_llvm_add_target_dep_function_attr(LLVMValueRef F, const char *name, int value); diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp index 13194072902..79dbedbb565 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp +++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp @@ -813,32 +813,3 @@ lp_is_function(LLVMValueRef v) return llvm::isa<llvm::Function>(llvm::unwrap(v)); #endif } - -extern "C" LLVMBuilderRef -lp_create_builder(LLVMContextRef ctx, enum lp_float_mode float_mode) -{ - LLVMBuilderRef builder = LLVMCreateBuilderInContext(ctx); - -#if HAVE_LLVM >= 0x0308 - llvm::FastMathFlags flags; - - switch (float_mode) { - case LP_FLOAT_MODE_DEFAULT: - break; - case LP_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH: - flags.setNoSignedZeros(); - llvm::unwrap(builder)->setFastMathFlags(flags); - break; - case LP_FLOAT_MODE_UNSAFE_FP_MATH: -#if HAVE_LLVM >= 0x0600 - flags.setFast(); -#else - flags.setUnsafeAlgebra(); -#endif - llvm::unwrap(builder)->setFastMathFlags(flags); - break; - } -#endif - - return builder; -} diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.h b/src/gallium/auxiliary/gallivm/lp_bld_misc.h index 1b725d10d7c..ca5ba5c44f2 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_misc.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.h @@ -76,15 +76,6 @@ lp_get_called_value(LLVMValueRef call); extern bool lp_is_function(LLVMValueRef v); -enum lp_float_mode { - LP_FLOAT_MODE_DEFAULT, - LP_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH, - LP_FLOAT_MODE_UNSAFE_FP_MATH, -}; - -extern LLVMBuilderRef -lp_create_builder(LLVMContextRef ctx, enum lp_float_mode float_mode); - #ifdef __cplusplus } #endif diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c index 2ca036e67d3..fc141ca1e03 100644 --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c @@ -1160,11 +1160,11 @@ void si_llvm_context_init(struct si_shader_context *ctx, LLVMDisposeMessage(data_layout_str); bool unsafe_fpmath = (sscreen->debug_flags & DBG(UNSAFE_MATH)) != 0; - enum lp_float_mode float_mode = - unsafe_fpmath ? LP_FLOAT_MODE_UNSAFE_FP_MATH : - LP_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH; + enum ac_float_mode float_mode = + unsafe_fpmath ? AC_FLOAT_MODE_UNSAFE_FP_MATH : + AC_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH; - ctx->gallivm.builder = lp_create_builder(ctx->gallivm.context, + ctx->gallivm.builder = ac_create_builder(ctx->gallivm.context, float_mode); ac_llvm_context_init(&ctx->ac, ctx->gallivm.context, |