On Tue, Apr 19, 2016 at 08:12:08PM +0200, Michael Schellenberger Costa wrote: > Hi Tom, > > Am 19.04.2016 um 19:52 schrieb Tom Stellard: > > The range metadata tells LLVM the range of expected values for this > > intrinsic, > > so it can do some additional optimizations on the result. > > --- > > src/gallium/drivers/radeonsi/si_shader.c | 29 ++++++++++++++++++++++++++--- > > 1 file changed, 26 insertions(+), 3 deletions(-) > > > > diff --git a/src/gallium/drivers/radeonsi/si_shader.c > > b/src/gallium/drivers/radeonsi/si_shader.c > > index 3b6d6e9..b4f2a42 100644 > > --- a/src/gallium/drivers/radeonsi/si_shader.c > > +++ b/src/gallium/drivers/radeonsi/si_shader.c > > @@ -1114,12 +1114,35 @@ static LLVMValueRef get_sample_id(struct > > radeon_llvm_context *radeon_bld) > > SI_PARAM_ANCILLARY, 8, 4); > > } > > > > +/** > > + * Set range metadata on an instruction. This can only be used on load and > > + * call instructions. To specify an instruciton can only produce the > > values > > + * 0, 1, 2, you would do set_range_metadata(value, 0, 3); > > + * \p lo is the minimum value inclusive. > > + * \p hi is the maximum value exclusive. > > + */ > > +static void set_range_metadata(LLVMValueRef value, unsigned lo, unsigned > > hi) > > +{ > > + const char *range_md_string = "range"; > > + LLVMValueRef range_md, md_args[2]; > > + LLVMTypeRef type = LLVMTypeOf(value); > > + LLVMContextRef context = LLVMGetTypeContext(type); > > + unsigned md_range_id = LLVMGetMDKindIDInContext(context, > > + range_md_string, strlen(range_md_string)); > > + > > + md_args[0] = LLVMConstInt(type, lo, false); > > + md_args[1] = LLVMConstInt(type, hi, false); > > + range_md = LLVMMDNodeInContext(context, md_args, 2); > > + LLVMSetMetadata(value, md_range_id, range_md); > > +} > > + > > static LLVMValueRef get_thread_id(struct si_shader_context *ctx) > > { > > struct gallivm_state *gallivm = &ctx->radeon_bld.gallivm; > > - > > - return lp_build_intrinsic(gallivm->builder, "llvm.SI.tid", ctx->i32, > > - NULL, 0, LLVMReadNoneAttribute); > > + LLVMValueRef tid = lp_build_intrinsic(gallivm->builder, "llvm.SI.tid", > > + ctx->i32, NULL, 0, LLVMReadNoneAttribute); > > same here, why not use the helper from patch 1?
This is the helper from patch 1. ;) -Tom > Michael > > + set_range_metadata(tid, 0, 64); > > + return tid; > > } > > > > /** > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev