[Mesa-dev] [PATCH] radeonsi: add a debug flag for unsafe math LLVM optimizations

Tom Stellard tom at stellard.net
Tue Jun 21 21:16:27 UTC 2016


On Tue, Jun 21, 2016 at 10:42:45PM +0200, Marek Olšák wrote:
> On Tue, Jun 21, 2016 at 9:27 PM, Tom Stellard <tom at stellard.net> wrote:
> > On Tue, Jun 21, 2016 at 08:17:15PM +0200, Marek Olšák wrote:
> >> On Tue, Jun 21, 2016 at 7:21 PM, Tom Stellard <tom at stellard.net> wrote:
> >> > On Mon, Jun 13, 2016 at 06:27:02PM +0200, Marek Olšák wrote:
> >> >> From: Marek Olšák <marek.olsak at amd.com>
> >> >>
> >> >> ---
> >> >>  src/gallium/drivers/radeon/r600_pipe_common.c |  1 +
> >> >>  src/gallium/drivers/radeon/r600_pipe_common.h |  1 +
> >> >>  src/gallium/drivers/radeonsi/si_shader.c      | 16 ++++++++++++++++
> >> >>  3 files changed, 18 insertions(+)
> >> >>
> >> >> diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c
> >> >> index fa9f70d..5d4a679 100644
> >> >> --- a/src/gallium/drivers/radeon/r600_pipe_common.c
> >> >> +++ b/src/gallium/drivers/radeon/r600_pipe_common.c
> >> >> @@ -482,6 +482,7 @@ static const struct debug_named_value common_debug_options[] = {
> >> >>       { "sisched", DBG_SI_SCHED, "Enable LLVM SI Machine Instruction Scheduler." },
> >> >>       { "mono", DBG_MONOLITHIC_SHADERS, "Use old-style monolithic shaders compiled on demand" },
> >> >>       { "noce", DBG_NO_CE, "Disable the constant engine"},
> >> >> +     { "unsafemath", DBG_UNSAFE_MATH, "Enable unsafe math shader optimizations" },
> >> >>
> >> >>       DEBUG_NAMED_VALUE_END /* must be last */
> >> >>  };
> >> >> diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h
> >> >> index 77dfc4f..263ef5e 100644
> >> >> --- a/src/gallium/drivers/radeon/r600_pipe_common.h
> >> >> +++ b/src/gallium/drivers/radeon/r600_pipe_common.h
> >> >> @@ -99,6 +99,7 @@
> >> >>  #define DBG_SI_SCHED         (1llu << 46)
> >> >>  #define DBG_MONOLITHIC_SHADERS       (1llu << 47)
> >> >>  #define DBG_NO_CE            (1llu << 48)
> >> >> +#define DBG_UNSAFE_MATH              (1llu << 49)
> >> >>
> >> >>  #define R600_MAP_BUFFER_ALIGNMENT 64
> >> >>  #define R600_MAX_VIEWPORTS        16
> >> >> diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
> >> >> index 6dc4985..bba6a55 100644
> >> >> --- a/src/gallium/drivers/radeonsi/si_shader.c
> >> >> +++ b/src/gallium/drivers/radeonsi/si_shader.c
> >> >> @@ -5255,6 +5255,22 @@ static void si_create_function(struct si_shader_context *ctx,
> >> >>               else
> >> >>                       LLVMAddAttribute(P, LLVMInRegAttribute);
> >> >>       }
> >> >> +
> >> >> +     if (ctx->screen->b.debug_flags & DBG_UNSAFE_MATH) {
> >> >> +             /* These were copied from some LLVM test. */
> >> >> +             LLVMAddTargetDependentFunctionAttr(ctx->radeon_bld.main_fn,
> >> >> +                                                "less-precise-fpmad",
> >> >> +                                                "true");
> >> >> +             LLVMAddTargetDependentFunctionAttr(ctx->radeon_bld.main_fn,
> >> >> +                                                "no-infs-fp-math",
> >> >> +                                                "true");
> >> >> +             LLVMAddTargetDependentFunctionAttr(ctx->radeon_bld.main_fn,
> >> >> +                                                "no-nans-fp-math",
> >> >> +                                                "true");
> >> >> +             LLVMAddTargetDependentFunctionAttr(ctx->radeon_bld.main_fn,
> >> >> +                                                "unsafe-fp-math",
> >> >> +                                                "true");
> >> >> +     }
> >> >
> >> > You may get better results by also adding the fast-math flags to the
> >> > individual floating-point instructions, but this would be a more
> >> > invasive change.
> >>
> >> Is there sample code showing how to do that?
> >>
> >
> > Something like this
> > https://cgit.freedesktop.org/~tstellar/mesa/commit/?h=fast-math&id=4fa18fdde3a2b51b2371064bc27729fd1038c219
> >
> > There are more flags than just the UnsafeAlgebra that is used in the
> > patch.
> 
> setUnsafeAlgebra enables all flags, not just UnsafeAlgebra.
> 
> Do the flags apply to whole expression trees or just one instruction?
> 

Just one instruction, but they should apply to expression trees if all
instructions in the tree have the same flags.

-Tom


More information about the mesa-dev mailing list