mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 11:18:08 +02:00
ac: import lp_create_builder() from gallivm
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
parent
ad2b3b2a9c
commit
2091206ad3
5 changed files with 43 additions and 42 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue