From: Marek Olšák Date: Sun, 29 Jan 2017 21:45:36 +0000 (+0100) Subject: gallivm: add no-signed-zeros-fp-math option to lp_create_builder (v2) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fd3e73f54e323d5de182bf6cdb6094c2fd7362b3;p=mesa.git gallivm: add no-signed-zeros-fp-math option to lp_create_builder (v2) v2: define lp_float_mode Reviewed-by: Nicolai Hähnle --- diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp index e005469a565..444686fdc79 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp +++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp @@ -781,15 +781,24 @@ lp_is_function(LLVMValueRef v) } extern "C" LLVMBuilderRef -lp_create_builder(LLVMContextRef ctx, bool unsafe_fpmath) +lp_create_builder(LLVMContextRef ctx, enum lp_float_mode float_mode) { LLVMBuilderRef builder = LLVMCreateBuilderInContext(ctx); #if HAVE_LLVM >= 0x0308 - if (unsafe_fpmath) { - llvm::FastMathFlags flags; + 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: flags.setUnsafeAlgebra(); llvm::unwrap(builder)->setFastMathFlags(flags); + break; } #endif diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.h b/src/gallium/auxiliary/gallivm/lp_bld_misc.h index c499a6f51eb..6abb30d73fa 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_misc.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.h @@ -82,8 +82,14 @@ 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, bool unsafe_fpmath); +lp_create_builder(LLVMContextRef ctx, enum lp_float_mode float_mode); #ifdef __cplusplus } diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c index 6618009610a..69eaf0c6364 100644 --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c @@ -1267,8 +1267,12 @@ void si_llvm_context_init(struct si_shader_context *ctx, #endif bool unsafe_fpmath = (sscreen->b.debug_flags & DBG_UNSAFE_MATH) != 0; + enum lp_float_mode float_mode = + unsafe_fpmath ? LP_FLOAT_MODE_UNSAFE_FP_MATH : + LP_FLOAT_MODE_DEFAULT; + ctx->gallivm.builder = lp_create_builder(ctx->gallivm.context, - unsafe_fpmath); + float_mode); ac_llvm_context_init(&ctx->ac, ctx->gallivm.context); ctx->ac.module = ctx->gallivm.module;