ac/llvm: add AC_FLOAT_MODE_ROUND_TO_ZERO
Because some instructions will be optimized by the backend compiler, the driver has to manually flush to zero to keep the result exact. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
@@ -73,6 +73,7 @@ ac_llvm_context_init(struct ac_llvm_context *ctx,
|
|||||||
ctx->family = family;
|
ctx->family = family;
|
||||||
ctx->wave_size = wave_size;
|
ctx->wave_size = wave_size;
|
||||||
ctx->ballot_mask_bits = ballot_mask_bits;
|
ctx->ballot_mask_bits = ballot_mask_bits;
|
||||||
|
ctx->float_mode = float_mode;
|
||||||
ctx->module = ac_create_module(wave_size == 32 ? compiler->tm_wave32
|
ctx->module = ac_create_module(wave_size == 32 ? compiler->tm_wave32
|
||||||
: compiler->tm,
|
: compiler->tm,
|
||||||
ctx->context);
|
ctx->context);
|
||||||
|
@@ -120,6 +120,8 @@ struct ac_llvm_context {
|
|||||||
unsigned wave_size;
|
unsigned wave_size;
|
||||||
unsigned ballot_mask_bits;
|
unsigned ballot_mask_bits;
|
||||||
|
|
||||||
|
unsigned float_mode;
|
||||||
|
|
||||||
LLVMValueRef lds;
|
LLVMValueRef lds;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -82,6 +82,7 @@ LLVMBuilderRef ac_create_builder(LLVMContextRef ctx,
|
|||||||
|
|
||||||
switch (float_mode) {
|
switch (float_mode) {
|
||||||
case AC_FLOAT_MODE_DEFAULT:
|
case AC_FLOAT_MODE_DEFAULT:
|
||||||
|
case AC_FLOAT_MODE_DENORM_FLUSH_TO_ZERO:
|
||||||
break;
|
break;
|
||||||
case AC_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH:
|
case AC_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH:
|
||||||
flags.setNoSignedZeros();
|
flags.setNoSignedZeros();
|
||||||
|
@@ -73,6 +73,7 @@ enum ac_float_mode {
|
|||||||
AC_FLOAT_MODE_DEFAULT,
|
AC_FLOAT_MODE_DEFAULT,
|
||||||
AC_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH,
|
AC_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH,
|
||||||
AC_FLOAT_MODE_UNSAFE_FP_MATH,
|
AC_FLOAT_MODE_UNSAFE_FP_MATH,
|
||||||
|
AC_FLOAT_MODE_DENORM_FLUSH_TO_ZERO,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Per-thread persistent LLVM objects. */
|
/* Per-thread persistent LLVM objects. */
|
||||||
|
Reference in New Issue
Block a user