Browse Source

ac: import lp_create_builder() from gallivm

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
tags/18.0-branchpoint
Samuel Pitoiset 7 years ago
parent
commit
2091206ad3

+ 30
- 0
src/amd/common/ac_llvm_helper.cpp View File

@@ -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;
}

+ 9
- 0
src/amd/common/ac_llvm_util.h View File

@@ -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);

+ 0
- 29
src/gallium/auxiliary/gallivm/lp_bld_misc.cpp View File

@@ -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;
}

+ 0
- 9
src/gallium/auxiliary/gallivm/lp_bld_misc.h View File

@@ -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

+ 4
- 4
src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c View File

@@ -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…
Cancel
Save