summaryrefslogtreecommitdiffstats
path: root/src/amd/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/amd/common')
-rw-r--r--src/amd/common/ac_nir_to_llvm.c65
1 files changed, 33 insertions, 32 deletions
diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index b3fae26f5db..e472408b0c3 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -122,6 +122,8 @@ struct nir_to_llvm_context {
LLVMTypeRef v16i8;
LLVMTypeRef voidt;
+ LLVMValueRef i1true;
+ LLVMValueRef i1false;
LLVMValueRef i32zero;
LLVMValueRef i32one;
LLVMValueRef f32zero;
@@ -688,6 +690,8 @@ static void setup_types(struct nir_to_llvm_context *ctx)
ctx->v4f32 = LLVMVectorType(ctx->f32, 4);
ctx->v16i8 = LLVMVectorType(ctx->i8, 16);
+ ctx->i1false = LLVMConstInt(ctx->i1, 0, false);
+ ctx->i1true = LLVMConstInt(ctx->i1, 1, false);
ctx->i32zero = LLVMConstInt(ctx->i32, 0, false);
ctx->i32one = LLVMConstInt(ctx->i32, 1, false);
ctx->f32zero = LLVMConstReal(ctx->f32, 0.0);
@@ -1835,8 +1839,8 @@ static void visit_store_ssbo(struct nir_to_llvm_context *ctx,
params[1] = get_src(ctx, instr->src[1]);
params[2] = LLVMConstInt(ctx->i32, 0, false); /* vindex */
- params[4] = LLVMConstInt(ctx->i1, 0, false); /* glc */
- params[5] = LLVMConstInt(ctx->i1, 0, false); /* slc */
+ params[4] = ctx->i1false; /* glc */
+ params[5] = ctx->i1false; /* slc */
if (components_32bit > 1)
data_type = LLVMVectorType(ctx->f32, components_32bit);
@@ -1920,7 +1924,7 @@ static LLVMValueRef visit_atomic_ssbo(struct nir_to_llvm_context *ctx,
params[arg_count++] = get_src(ctx, instr->src[0]);
params[arg_count++] = LLVMConstInt(ctx->i32, 0, false); /* vindex */
params[arg_count++] = get_src(ctx, instr->src[1]); /* voffset */
- params[arg_count++] = LLVMConstInt(ctx->i1, 0, false); /* slc */
+ params[arg_count++] = ctx->i1false; /* slc */
switch (instr->intrinsic) {
case nir_intrinsic_ssbo_atomic_add:
@@ -1994,8 +1998,8 @@ static LLVMValueRef visit_load_buffer(struct nir_to_llvm_context *ctx,
get_src(ctx, instr->src[0]),
LLVMConstInt(ctx->i32, 0, false),
offset,
- LLVMConstInt(ctx->i1, 0, false),
- LLVMConstInt(ctx->i1, 0, false),
+ ctx->i1false,
+ ctx->i1false,
};
results[i] = ac_build_intrinsic(&ctx->ac, load_name, data_type, params, 5, 0);
@@ -2415,9 +2419,9 @@ static LLVMValueRef adjust_sample_index_using_fmask(struct nir_to_llvm_context *
LLVMValueRef fmask_desc_ptr)
{
LLVMValueRef fmask_load_address[4], params[7];
- LLVMValueRef glc = LLVMConstInt(ctx->i1, 0, false);
- LLVMValueRef slc = LLVMConstInt(ctx->i1, 0, false);
- LLVMValueRef da = coord_z ? ctx->i32one : ctx->i32zero;
+ LLVMValueRef glc = ctx->i1false;
+ LLVMValueRef slc = ctx->i1false;
+ LLVMValueRef da = coord_z ? ctx->i1true : ctx->i1false;
LLVMValueRef res;
char intrinsic_name[64];
@@ -2431,7 +2435,7 @@ static LLVMValueRef adjust_sample_index_using_fmask(struct nir_to_llvm_context *
params[0] = ac_build_gather_values(&ctx->ac, fmask_load_address, coord_z ? 4 : 2);
params[1] = fmask_desc_ptr;
params[2] = LLVMConstInt(ctx->i32, 15, false); /* dmask */
- LLVMValueRef lwe = LLVMConstInt(ctx->i1, 0, false);
+ LLVMValueRef lwe = ctx->i1false;
params[3] = glc;
params[4] = slc;
params[5] = lwe;
@@ -2578,8 +2582,8 @@ static LLVMValueRef visit_image_load(struct nir_to_llvm_context *ctx,
params[1] = LLVMBuildExtractElement(ctx->builder, get_src(ctx, instr->src[0]),
LLVMConstInt(ctx->i32, 0, false), ""); /* vindex */
params[2] = LLVMConstInt(ctx->i32, 0, false); /* voffset */
- params[3] = LLVMConstInt(ctx->i1, 0, false); /* glc */
- params[4] = LLVMConstInt(ctx->i1, 0, false); /* slc */
+ params[3] = ctx->i1false; /* glc */
+ params[4] = ctx->i1false; /* slc */
res = ac_build_intrinsic(&ctx->ac, "llvm.amdgcn.buffer.load.format.v4f32", ctx->v4f32,
params, 5, 0);
@@ -2588,20 +2592,20 @@ static LLVMValueRef visit_image_load(struct nir_to_llvm_context *ctx,
} else {
bool is_da = glsl_sampler_type_is_array(type) ||
glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE;
- LLVMValueRef da = is_da ? ctx->i32one : ctx->i32zero;
- LLVMValueRef glc = LLVMConstInt(ctx->i1, 0, false);
- LLVMValueRef slc = LLVMConstInt(ctx->i1, 0, false);
+ LLVMValueRef da = is_da ? ctx->i1true : ctx->i1false;
+ LLVMValueRef glc = ctx->i1false;
+ LLVMValueRef slc = ctx->i1false;
params[0] = get_image_coords(ctx, instr);
params[1] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
params[2] = LLVMConstInt(ctx->i32, 15, false); /* dmask */
if (HAVE_LLVM <= 0x0309) {
- params[3] = LLVMConstInt(ctx->i1, 0, false); /* r128 */
+ params[3] = ctx->i1false; /* r128 */
params[4] = da;
params[5] = glc;
params[6] = slc;
} else {
- LLVMValueRef lwe = LLVMConstInt(ctx->i1, 0, false);
+ LLVMValueRef lwe = ctx->i1false;
params[3] = glc;
params[4] = slc;
params[5] = lwe;
@@ -2626,8 +2630,6 @@ static void visit_image_store(struct nir_to_llvm_context *ctx,
LLVMValueRef params[8];
char intrinsic_name[64];
const nir_variable *var = instr->variables[0]->var;
- LLVMValueRef i1false = LLVMConstInt(ctx->i1, 0, 0);
- LLVMValueRef i1true = LLVMConstInt(ctx->i1, 1, 0);
const struct glsl_type *type = glsl_without_array(var->type);
if (ctx->stage == MESA_SHADER_FRAGMENT)
@@ -2639,28 +2641,28 @@ static void visit_image_store(struct nir_to_llvm_context *ctx,
params[2] = LLVMBuildExtractElement(ctx->builder, get_src(ctx, instr->src[0]),
LLVMConstInt(ctx->i32, 0, false), ""); /* vindex */
params[3] = LLVMConstInt(ctx->i32, 0, false); /* voffset */
- params[4] = i1false; /* glc */
- params[5] = i1false; /* slc */
+ params[4] = ctx->i1false; /* glc */
+ params[5] = ctx->i1false; /* slc */
ac_build_intrinsic(&ctx->ac, "llvm.amdgcn.buffer.store.format.v4f32", ctx->voidt,
params, 6, 0);
} else {
bool is_da = glsl_sampler_type_is_array(type) ||
glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE;
- LLVMValueRef da = is_da ? i1true : i1false;
- LLVMValueRef glc = i1false;
- LLVMValueRef slc = i1false;
+ LLVMValueRef da = is_da ? ctx->i1true : ctx->i1false;
+ LLVMValueRef glc = ctx->i1false;
+ LLVMValueRef slc = ctx->i1false;
params[0] = to_float(ctx, get_src(ctx, instr->src[2]));
params[1] = get_image_coords(ctx, instr); /* coords */
params[2] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
params[3] = LLVMConstInt(ctx->i32, 15, false); /* dmask */
if (HAVE_LLVM <= 0x0309) {
- params[4] = i1false; /* r128 */
+ params[4] = ctx->i1false; /* r128 */
params[5] = da;
params[6] = glc;
params[7] = slc;
} else {
- LLVMValueRef lwe = i1false;
+ LLVMValueRef lwe = ctx->i1false;
params[4] = glc;
params[5] = slc;
params[6] = lwe;
@@ -2685,8 +2687,7 @@ static LLVMValueRef visit_image_atomic(struct nir_to_llvm_context *ctx,
LLVMValueRef params[6];
int param_count = 0;
const nir_variable *var = instr->variables[0]->var;
- LLVMValueRef i1false = LLVMConstInt(ctx->i1, 0, 0);
- LLVMValueRef i1true = LLVMConstInt(ctx->i1, 1, 0);
+
const char *base_name = "llvm.amdgcn.image.atomic";
const char *atomic_name;
LLVMValueRef coords;
@@ -2705,17 +2706,17 @@ static LLVMValueRef visit_image_atomic(struct nir_to_llvm_context *ctx,
coords = params[param_count++] = LLVMBuildExtractElement(ctx->builder, get_src(ctx, instr->src[0]),
LLVMConstInt(ctx->i32, 0, false), ""); /* vindex */
params[param_count++] = ctx->i32zero; /* voffset */
- params[param_count++] = i1false; /* glc */
- params[param_count++] = i1false; /* slc */
+ params[param_count++] = ctx->i1false; /* glc */
+ params[param_count++] = ctx->i1false; /* slc */
} else {
bool da = glsl_sampler_type_is_array(type) ||
glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE;
coords = params[param_count++] = get_image_coords(ctx, instr);
params[param_count++] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
- params[param_count++] = i1false; /* r128 */
- params[param_count++] = da ? i1true : i1false; /* da */
- params[param_count++] = i1false; /* slc */
+ params[param_count++] = ctx->i1false; /* r128 */
+ params[param_count++] = da ? ctx->i1true : ctx->i1false; /* da */
+ params[param_count++] = ctx->i1false; /* slc */
}
switch (instr->intrinsic) {