[Mesa-dev] [PATCH 2/2] radv/ac: use shared thread id code

Nicolai Hähnle nhaehnle at gmail.com
Thu Feb 2 08:59:06 UTC 2017


For the series:

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

On 02.02.2017 00:41, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/amd/common/ac_nir_to_llvm.c | 44 ++---------------------------------------
>  1 file changed, 2 insertions(+), 42 deletions(-)
>
> diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
> index 7a26333..45aeaf7 100644
> --- a/src/amd/common/ac_nir_to_llvm.c
> +++ b/src/amd/common/ac_nir_to_llvm.c
> @@ -135,7 +135,6 @@ struct nir_to_llvm_context {
>  	LLVMValueRef f32one;
>  	LLVMValueRef v4f32empty;
>
> -	unsigned range_md_kind;
>  	unsigned uniform_md_kind;
>  	LLVMValueRef empty_md;
>  	gl_shader_stage stage;
> @@ -703,8 +702,6 @@ static void setup_types(struct nir_to_llvm_context *ctx)
>  	args[3] = ctx->f32one;
>  	ctx->v4f32empty = LLVMConstVector(args, 4);
>
> -	ctx->range_md_kind = LLVMGetMDKindIDInContext(ctx->context,
> -						      "range", 5);
>  	ctx->uniform_md_kind =
>  	    LLVMGetMDKindIDInContext(ctx->context, "amdgpu.uniform", 14);
>  	ctx->empty_md = LLVMMDNodeInContext(ctx->context, NULL, 0);
> @@ -1174,43 +1171,6 @@ static LLVMValueRef emit_unpack_half_2x16(struct nir_to_llvm_context *ctx,
>  	return result;
>  }
>
> -/**
> - * Set range metadata on an instruction.  This can only be used on load and
> - * call instructions.  If you know an instruction 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(struct nir_to_llvm_context *ctx,
> -			       LLVMValueRef value, unsigned lo, unsigned hi)
> -{
> -	LLVMValueRef range_md, md_args[2];
> -	LLVMTypeRef type = LLVMTypeOf(value);
> -	LLVMContextRef context = LLVMGetTypeContext(type);
> -
> -	md_args[0] = LLVMConstInt(type, lo, false);
> -	md_args[1] = LLVMConstInt(type, hi, false);
> -	range_md = LLVMMDNodeInContext(context, md_args, 2);
> -	LLVMSetMetadata(value, ctx->range_md_kind, range_md);
> -}
> -
> -static LLVMValueRef get_thread_id(struct nir_to_llvm_context *ctx)
> -{
> -	LLVMValueRef tid;
> -	LLVMValueRef tid_args[2];
> -	tid_args[0] = LLVMConstInt(ctx->i32, 0xffffffff, false);
> -	tid_args[1] = ctx->i32zero;
> -	tid_args[1] = ac_emit_llvm_intrinsic(&ctx->ac,
> -					  "llvm.amdgcn.mbcnt.lo", ctx->i32,
> -					  tid_args, 2, AC_FUNC_ATTR_READNONE);
> -
> -	tid = ac_emit_llvm_intrinsic(&ctx->ac,
> -				  "llvm.amdgcn.mbcnt.hi", ctx->i32,
> -				  tid_args, 2, AC_FUNC_ATTR_READNONE);
> -	set_range_metadata(ctx, tid, 0, 64);
> -	return tid;
> -}
> -
>  /*
>   * SI implements derivatives using the local data store (LDS)
>   * All writes to the LDS happen in all executing threads at
> @@ -1256,7 +1216,7 @@ static LLVMValueRef emit_ddxy(struct nir_to_llvm_context *ctx,
>  						       LLVMArrayType(ctx->i32, 64),
>  						       "ddxy_lds", LOCAL_ADDR_SPACE);
>
> -	thread_id = get_thread_id(ctx);
> +	thread_id = ac_get_thread_id(&ctx->ac);
>  	if (op == nir_op_fddx_fine || op == nir_op_fddx)
>  		mask = TID_MASK_LEFT;
>  	else if (op == nir_op_fddy_fine || op == nir_op_fddy)
> @@ -2876,7 +2836,7 @@ static LLVMValueRef
>  visit_load_local_invocation_index(struct nir_to_llvm_context *ctx)
>  {
>  	LLVMValueRef result;
> -	LLVMValueRef thread_id = get_thread_id(ctx);
> +	LLVMValueRef thread_id = ac_get_thread_id(&ctx->ac);
>  	result = LLVMBuildAnd(ctx->builder, ctx->tg_size,
>  			      LLVMConstInt(ctx->i32, 0xfc0, false), "");
>
>


More information about the mesa-dev mailing list