gallivm: add no-signed-zeros-fp-math option to lp_create_builder (v2)

v2: define lp_float_mode

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Marek Olšák
2017-01-29 22:45:36 +01:00
parent 84e72f2962
commit fd3e73f54e
3 changed files with 24 additions and 5 deletions
+12 -3
View File
@@ -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
+7 -1
View File
@@ -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
}
@@ -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;