Mesa (main): radeonsi: use LLVMBuildLoad2 where possible
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jul 8 09:06:30 UTC 2022
Module: Mesa
Branch: main
Commit: c275e69cee9f90886a32887a60259d24933b7d2f
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c275e69cee9f90886a32887a60259d24933b7d2f
Author: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Date: Mon Jun 20 10:14:51 2022 +0200
radeonsi: use LLVMBuildLoad2 where possible
This commit replaces LLVMBuildLoad usage by LLVMBuildLoad2
where possible (= where the pointee type is known).
Reviewed-by: Mihai Preda <mhpreda at gmail.com>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17361>
---
src/gallium/drivers/radeonsi/gfx10_shader_ngg.c | 68 ++++++++++++------------
src/gallium/drivers/radeonsi/si_shader_llvm_gs.c | 2 +-
src/gallium/drivers/radeonsi/si_shader_llvm_vs.c | 7 ++-
3 files changed, 38 insertions(+), 39 deletions(-)
diff --git a/src/gallium/drivers/radeonsi/gfx10_shader_ngg.c b/src/gallium/drivers/radeonsi/gfx10_shader_ngg.c
index 8c8623d5a46..ffd58d502c5 100644
--- a/src/gallium/drivers/radeonsi/gfx10_shader_ngg.c
+++ b/src/gallium/drivers/radeonsi/gfx10_shader_ngg.c
@@ -173,7 +173,7 @@ void gfx10_ngg_build_export_prim(struct si_shader_context *ctx, LLVMValueRef use
unsigned shift = 9 + i * 10;
LLVMValueRef edge;
- edge = LLVMBuildLoad(builder, user_edgeflags[i], "");
+ edge = LLVMBuildLoad2(builder, ctx->ac.i1, user_edgeflags[i], "");
edge = LLVMBuildZExt(builder, edge, ctx->ac.i32, "");
edge = LLVMBuildShl(builder, edge, LLVMConstInt(ctx->ac.i32, shift, 0), "");
edgeflags = LLVMBuildOr(builder, edgeflags, edge, "");
@@ -209,7 +209,7 @@ void gfx10_ngg_build_export_prim(struct si_shader_context *ctx, LLVMValueRef use
for (unsigned i = 0; i < prim.num_vertices; ++i) {
LLVMValueRef edge;
- edge = LLVMBuildLoad(ctx->ac.builder, user_edgeflags[i], "");
+ edge = LLVMBuildLoad2(ctx->ac.builder, ctx->ac.i1, user_edgeflags[i], "");
edge = LLVMBuildZExt(ctx->ac.builder, edge, ctx->ac.i32, "");
edge = LLVMBuildShl(ctx->ac.builder, edge, LLVMConstInt(ctx->ac.i32, 9 + i*10, 0), "");
edgeflags = LLVMBuildOr(ctx->ac.builder, edgeflags, edge, "");
@@ -343,7 +343,7 @@ static void build_streamout(struct si_shader_context *ctx, struct ngg_streamout
{
if (isgs) {
tmp = ac_build_gep0(&ctx->ac, ctx->gs_ngg_scratch, tid);
- tmp = LLVMBuildLoad(builder, tmp, "");
+ tmp = LLVMBuildLoad2(builder, ctx->ac.i32, tmp, "");
} else {
tmp = ac_build_writelane(&ctx->ac, ctx->ac.i32_0, ngg_get_prim_cnt(ctx), ctx->ac.i32_0);
}
@@ -466,7 +466,7 @@ static void build_streamout(struct si_shader_context *ctx, struct ngg_streamout
LLVMValueRef bufsize_dw = LLVMBuildLShr(
builder, LLVMBuildExtractElement(builder, so_buffer[buffer], i32_2, ""), i32_2, "");
- tmp = LLVMBuildLoad(builder, offsets_vgpr, "");
+ tmp = LLVMBuildLoad2(builder, ctx->ac.i32, offsets_vgpr, "");
LLVMValueRef offset_dw =
ac_build_readlane(&ctx->ac, tmp, LLVMConstInt(ctx->ac.i32, buffer, false));
@@ -489,7 +489,7 @@ static void build_streamout(struct si_shader_context *ctx, struct ngg_streamout
if (!info->num_stream_output_components[stream])
continue;
- tmp = LLVMBuildLoad(builder, generated_by_stream_vgpr, "");
+ tmp = LLVMBuildLoad2(builder, ctx->ac.i32, generated_by_stream_vgpr, "");
LLVMValueRef generated =
ac_build_readlane(&ctx->ac, tmp, LLVMConstInt(ctx->ac.i32, stream, false));
@@ -588,7 +588,7 @@ static void build_streamout(struct si_shader_context *ctx, struct ngg_streamout
LLVMValueRef scratch_vgpr;
tmp = ac_build_gep0(&ctx->ac, ctx->gs_ngg_scratch, ac_get_thread_id(&ctx->ac));
- scratch_vgpr = LLVMBuildLoad(builder, tmp, "");
+ scratch_vgpr = LLVMBuildLoad2(builder, ctx->ac.i32, tmp, "");
for (unsigned buffer = 0; buffer < 4; ++buffer) {
if (stream_for_buffer[buffer] >= 0) {
@@ -771,7 +771,7 @@ static void load_vertex_counts(struct si_shader_context *ctx, LLVMValueRef lds,
*/
ac_build_ifcc(&ctx->ac, LLVMBuildICmp(builder, LLVMIntULT, tid,
LLVMConstInt(ctx->ac.i32, num_i8vec4, 0), ""), 17771);
- LLVMBuildStore(builder, LLVMBuildLoad(builder, ac_build_gep0(&ctx->ac, lds, tid), ""), i8vec4_lane);
+ LLVMBuildStore(builder, LLVMBuildLoad2(builder, ctx->ac.i32, ac_build_gep0(&ctx->ac, lds, tid), ""), i8vec4_lane);
ac_build_endif(&ctx->ac, 17771);
/* Compute the number of ES waves. */
@@ -815,7 +815,7 @@ static void load_vertex_counts(struct si_shader_context *ctx, LLVMValueRef lds,
for (unsigned i = 0; i < num_i8vec4; i++) {
LLVMValueRef i8vec4;
- i8vec4 = ac_build_readlane_no_opt_barrier(&ctx->ac, LLVMBuildLoad(builder, i8vec4_lane, ""),
+ i8vec4 = ac_build_readlane_no_opt_barrier(&ctx->ac, LLVMBuildLoad2(builder, ctx->ac.i32, i8vec4_lane, ""),
LLVMConstInt(ctx->ac.i32, i, 0));
/* Inactive waves have uninitialized vertex counts. Set them to 0 using this. */
i8vec4 = LLVMBuildAnd(builder, i8vec4,
@@ -1207,7 +1207,7 @@ void gfx10_ngg_culling_build_end(struct si_shader_context *ctx)
* by clip distances.
*/
LLVMValueRef addr = si_build_gep_i8(ctx, gs_vtxptr[vtx], lds_byte3_clipdist_neg_mask);
- LLVMValueRef mask = LLVMBuildLoad(builder, addr, "");
+ LLVMValueRef mask = LLVMBuildLoad2(builder, ctx->ac.i8, addr, "");
if (!clipdist_neg_mask)
clipdist_neg_mask = mask;
else
@@ -1226,7 +1226,7 @@ void gfx10_ngg_culling_build_end(struct si_shader_context *ctx)
ac_build_waitcnt(&ctx->ac, AC_WAIT_LGKM);
ac_build_s_barrier(&ctx->ac, ctx->stage);
- gs_accepted = LLVMBuildLoad(builder, gs_accepted, "");
+ gs_accepted = LLVMBuildLoad2(builder, ctx->ac.i32, gs_accepted, "");
LLVMValueRef vertex_accepted = ac_build_alloca(&ctx->ac, ctx->ac.i1, "");
LLVMValueRef vertex_mask = ac_build_alloca(&ctx->ac, ctx->ac.iN_wavemask, "");
@@ -1235,7 +1235,7 @@ void gfx10_ngg_culling_build_end(struct si_shader_context *ctx)
ac_build_ifcc(&ctx->ac, si_is_es_thread(ctx), 16007);
{
LLVMValueRef accepted =
- LLVMBuildLoad(builder, si_build_gep_i8(ctx, es_vtxptr, lds_byte0_accept_flag), "");
+ LLVMBuildLoad2(builder, ctx->ac.i8, si_build_gep_i8(ctx, es_vtxptr, lds_byte0_accept_flag), "");
accepted = LLVMBuildICmp(builder, LLVMIntNE, accepted, ctx->ac.i8_0, "");
LLVMValueRef mask = ac_get_i1_sgpr_mask(&ctx->ac, accepted);
@@ -1245,7 +1245,7 @@ void gfx10_ngg_culling_build_end(struct si_shader_context *ctx)
ac_build_endif(&ctx->ac, 16007);
/* Store the per-wave vertex count to LDS. Non-ES waves store 0. */
- vertex_mask = LLVMBuildLoad(builder, vertex_mask, "");
+ vertex_mask = LLVMBuildLoad2(builder, ctx->ac.iN_wavemask, vertex_mask, "");
ac_build_ifcc(&ctx->ac, LLVMBuildICmp(builder, LLVMIntEQ, tid, ctx->ac.i32_0, ""), 16008);
{
LLVMValueRef vertex_count = ac_build_bit_count(&ctx->ac, vertex_mask);
@@ -1274,7 +1274,7 @@ void gfx10_ngg_culling_build_end(struct si_shader_context *ctx)
* of the new thread ID. It will be used to load input VGPRs by compacted
* threads.
*/
- vertex_accepted = LLVMBuildLoad(builder, vertex_accepted, "");
+ vertex_accepted = LLVMBuildLoad2(builder, ctx->ac.i1, vertex_accepted, "");
ac_build_ifcc(&ctx->ac, vertex_accepted, 16009);
{
/* Add the number of bits set in vertex_mask up to the current thread ID - 1
@@ -1383,8 +1383,8 @@ void gfx10_ngg_culling_build_end(struct si_shader_context *ctx)
prim.edgeflags = ctx->ac.i32_0;
for (unsigned vtx = 0; vtx < num_vertices; vtx++) {
- prim.index[vtx] = LLVMBuildLoad(
- builder, si_build_gep_i8(ctx, gs_vtxptr[vtx], lds_byte1_new_thread_id), "");
+ prim.index[vtx] = LLVMBuildLoad2(
+ builder, ctx->ac.i8, si_build_gep_i8(ctx, gs_vtxptr[vtx], lds_byte1_new_thread_id), "");
prim.index[vtx] = LLVMBuildZExt(builder, prim.index[vtx], ctx->ac.i32, "");
}
@@ -1394,7 +1394,7 @@ void gfx10_ngg_culling_build_end(struct si_shader_context *ctx)
ac_build_endif(&ctx->ac, 16011);
if (gfx10_ngg_export_prim_early(shader))
- gfx10_ngg_build_export_prim(ctx, NULL, LLVMBuildLoad(builder, new_vgpr0, ""));
+ gfx10_ngg_build_export_prim(ctx, NULL, LLVMBuildLoad2(builder, ctx->ac.i32, new_vgpr0, ""));
/* Prepare LDS addresses of the new ES input VGPRs. */
LLVMValueRef input_vgpr_addresses[4] = {
@@ -1457,7 +1457,7 @@ void gfx10_ngg_culling_build_end(struct si_shader_context *ctx)
vgpr = 8 + GFX9_GS_NUM_USER_SGPR;
}
- val = LLVMBuildLoad(builder, new_vgpr0, "");
+ val = LLVMBuildLoad2(builder, ctx->ac.i32, new_vgpr0, "");
ret = LLVMBuildInsertValue(builder, ret, ac_to_float(&ctx->ac, val), vgpr++, "");
vgpr++; /* gs_vtx_offset[1] = offsets of vertices 2-3 */
@@ -1609,7 +1609,7 @@ void gfx10_ngg_build_end(struct si_shader_context *ctx)
tmp = ngg_nogs_vertex_ptr(ctx, vtxindex[i]);
tmp2 = LLVMConstInt(ctx->ac.i32, ngg_nogs_vertex_size(ctx->shader) - 1, 0);
tmp = ac_build_gep0(&ctx->ac, tmp, tmp2);
- tmp = LLVMBuildLoad(builder, tmp, "");
+ tmp = LLVMBuildLoad2(builder, ctx->ac.i32, tmp, "");
tmp = LLVMBuildTrunc(builder, tmp, ctx->ac.i1, "");
user_edgeflags[i] = ac_build_alloca_init(&ctx->ac, tmp, "");
@@ -1705,7 +1705,7 @@ void gfx10_ngg_build_end(struct si_shader_context *ctx)
for (unsigned j = 0; j < 4; j++) {
tmp = LLVMConstInt(ctx->ac.i32, lds_pos_x + j, 0);
tmp = ac_build_gep0(&ctx->ac, vertex_ptr, tmp);
- tmp = LLVMBuildLoad(builder, tmp, "");
+ tmp = LLVMBuildLoad2(builder, ctx->ac.i32, tmp, "");
outputs[i].values[j] = ac_to_float(&ctx->ac, tmp);
}
} else {
@@ -1726,7 +1726,7 @@ void gfx10_ngg_build_end(struct si_shader_context *ctx)
tmp = ngg_nogs_vertex_ptr(ctx, gfx10_get_thread_id_in_tg(ctx));
tmp = ac_build_gep0(&ctx->ac, tmp, ctx->ac.i32_0);
- outputs[i].values[0] = LLVMBuildLoad(builder, tmp, "");
+ outputs[i].values[0] = LLVMBuildLoad2(builder, ctx->ac.i32, tmp, "");
} else {
assert(ctx->stage == MESA_SHADER_TESS_EVAL);
outputs[i].values[0] = si_get_primitive_id(ctx, 0);
@@ -1846,7 +1846,7 @@ void gfx10_ngg_gs_emit_vertex(struct si_shader_context *ctx, unsigned stream, LL
const struct si_shader_info *info = &sel->info;
LLVMBuilderRef builder = ctx->ac.builder;
LLVMValueRef tmp;
- const LLVMValueRef vertexidx = LLVMBuildLoad(builder, ctx->gs_next_vertex[stream], "");
+ const LLVMValueRef vertexidx = LLVMBuildLoad2(builder, ctx->ac.i32, ctx->gs_next_vertex[stream], "");
/* If this thread has already emitted the declared maximum number of
* vertices, skip the write: excessive vertex emissions are not
@@ -1878,7 +1878,7 @@ void gfx10_ngg_gs_emit_vertex(struct si_shader_context *ctx, unsigned stream, LL
assert(out_idx * 4 == info->gsvs_vertex_size);
/* Determine and store whether this vertex completed a primitive. */
- const LLVMValueRef curverts = LLVMBuildLoad(builder, ctx->gs_curprim_verts[stream], "");
+ const LLVMValueRef curverts = LLVMBuildLoad2(builder, ctx->ac.i32, ctx->gs_curprim_verts[stream], "");
tmp = LLVMConstInt(ctx->ac.i32, u_vertices_per_prim(sel->info.base.gs.output_primitive) - 1, false);
const LLVMValueRef iscompleteprim = LLVMBuildICmp(builder, LLVMIntUGE, curverts, tmp, "");
@@ -1906,7 +1906,7 @@ void gfx10_ngg_gs_emit_vertex(struct si_shader_context *ctx, unsigned stream, LL
LLVMBuildShl(builder, LLVMBuildZExt(builder, is_odd, ctx->ac.i8, ""), ctx->ac.i8_1, ""), "");
LLVMBuildStore(builder, tmp, ngg_gs_get_emit_primflag_ptr(ctx, vertexptr, stream));
- tmp = LLVMBuildLoad(builder, ctx->gs_generated_prims[stream], "");
+ tmp = LLVMBuildLoad2(builder, ctx->ac.i32, ctx->gs_generated_prims[stream], "");
tmp = LLVMBuildAdd(builder, tmp, LLVMBuildZExt(builder, iscompleteprim, ctx->ac.i32, ""), "");
LLVMBuildStore(builder, tmp, ctx->gs_generated_prims[stream]);
@@ -1982,7 +1982,7 @@ void gfx10_ngg_gs_build_end(struct si_shader_context *ctx)
ac_build_bgnloop(&ctx->ac, 5100);
- const LLVMValueRef vertexidx = LLVMBuildLoad(builder, ctx->gs_next_vertex[stream], "");
+ const LLVMValueRef vertexidx = LLVMBuildLoad2(builder, ctx->ac.i32, ctx->gs_next_vertex[stream], "");
tmp = LLVMBuildICmp(builder, LLVMIntUGE, vertexidx,
LLVMConstInt(ctx->ac.i32, sel->info.base.gs.vertices_out, false), "");
ac_build_ifcc(&ctx->ac, tmp, 5101);
@@ -2003,7 +2003,7 @@ void gfx10_ngg_gs_build_end(struct si_shader_context *ctx)
if (!info->num_stream_output_components[stream])
continue;
- LLVMValueRef numprims = LLVMBuildLoad(builder, ctx->gs_generated_prims[stream], "");
+ LLVMValueRef numprims = LLVMBuildLoad2(builder, ctx->ac.i32, ctx->gs_generated_prims[stream], "");
numprims = ac_build_reduce(&ctx->ac, numprims, nir_op_iadd, ctx->ac.wave_size);
tmp = LLVMBuildICmp(builder, LLVMIntEQ, ac_get_thread_id(&ctx->ac), ctx->ac.i32_0, "");
@@ -2036,7 +2036,7 @@ void gfx10_ngg_gs_build_end(struct si_shader_context *ctx)
if (!info->num_stream_output_components[stream])
continue;
- tmp = LLVMBuildLoad(builder, ngg_gs_get_emit_primflag_ptr(ctx, vertexptr, stream), "");
+ tmp = LLVMBuildLoad2(builder, ctx->ac.i8, ngg_gs_get_emit_primflag_ptr(ctx, vertexptr, stream), "");
tmp = LLVMBuildTrunc(builder, tmp, ctx->ac.i1, "");
tmp2 = LLVMBuildICmp(builder, LLVMIntULT, tid, num_emit_threads, "");
nggso.prim_enable[stream] = LLVMBuildAnd(builder, tmp, tmp2, "");
@@ -2073,7 +2073,7 @@ void gfx10_ngg_gs_build_end(struct si_shader_context *ctx)
offset = LLVMBuildAdd(builder, offset, tmp, "");
}
- tmp = LLVMBuildLoad(builder, ac_build_gep0(&ctx->ac, ctx->gs_ngg_scratch, tid), "");
+ tmp = LLVMBuildLoad2(builder, ctx->ac.i32, ac_build_gep0(&ctx->ac, ctx->gs_ngg_scratch, tid), "");
LLVMValueRef args[] = {
tmp, ngg_get_query_buf(ctx),
offset, LLVMConstInt(ctx->ac.i32, 16, false), /* soffset */
@@ -2091,7 +2091,7 @@ void gfx10_ngg_gs_build_end(struct si_shader_context *ctx)
assert(info->num_stream_output_components[0]);
LLVMValueRef gs_vtxptr = ngg_gs_vertex_ptr(ctx, tid);
- LLVMValueRef live = LLVMBuildLoad(builder, ngg_gs_get_emit_primflag_ptr(ctx, gs_vtxptr, 0), "");
+ LLVMValueRef live = LLVMBuildLoad2(builder, ctx->ac.i8, ngg_gs_get_emit_primflag_ptr(ctx, gs_vtxptr, 0), "");
live = LLVMBuildTrunc(builder, live, ctx->ac.i1, "");
LLVMValueRef is_emit = LLVMBuildICmp(builder, LLVMIntULT, tid, num_emit_threads, "");
LLVMValueRef prim_enable = LLVMBuildAnd(builder, live, is_emit, "");
@@ -2150,7 +2150,7 @@ void gfx10_ngg_gs_build_end(struct si_shader_context *ctx)
cull_primitive(ctx, pos, clipdist_accepted, accepted, NULL);
- accepted = LLVMBuildLoad(builder, accepted, "");
+ accepted = LLVMBuildLoad2(builder, ctx->ac.i32, accepted, "");
LLVMValueRef rejected = LLVMBuildNot(builder, LLVMBuildTrunc(builder, accepted, ctx->ac.i1, ""), "");
ac_build_ifcc(&ctx->ac, rejected, 0);
@@ -2180,10 +2180,10 @@ void gfx10_ngg_gs_build_end(struct si_shader_context *ctx)
/* Load primitive liveness */
tmp = ngg_gs_vertex_ptr(ctx, primidx);
- tmp = LLVMBuildLoad(builder, ngg_gs_get_emit_primflag_ptr(ctx, tmp, 0), "");
+ tmp = LLVMBuildLoad2(builder, ctx->ac.i8, ngg_gs_get_emit_primflag_ptr(ctx, tmp, 0), "");
const LLVMValueRef primlive = LLVMBuildTrunc(builder, tmp, ctx->ac.i1, "");
- tmp = LLVMBuildLoad(builder, vertliveptr, "");
+ tmp = LLVMBuildLoad2(builder, ctx->ac.i1, vertliveptr, "");
tmp = LLVMBuildOr(builder, tmp, primlive, ""), LLVMBuildStore(builder, tmp, vertliveptr);
if (i > 0)
@@ -2193,7 +2193,7 @@ void gfx10_ngg_gs_build_end(struct si_shader_context *ctx)
ac_build_endif(&ctx->ac, 5120);
/* Inclusive scan addition across the current wave. */
- LLVMValueRef vertlive = LLVMBuildLoad(builder, vertliveptr, "");
+ LLVMValueRef vertlive = LLVMBuildLoad2(builder, ctx->ac.i1, vertliveptr, "");
struct ac_wg_scan vertlive_scan = {};
vertlive_scan.stage = ctx->stage;
vertlive_scan.op = nir_op_iadd;
@@ -2241,7 +2241,7 @@ void gfx10_ngg_gs_build_end(struct si_shader_context *ctx)
prim.num_vertices = verts_per_prim;
tmp = ngg_gs_vertex_ptr(ctx, tid);
- flags = LLVMBuildLoad(builder, ngg_gs_get_emit_primflag_ptr(ctx, tmp, 0), "");
+ flags = LLVMBuildLoad2(builder, ctx->ac.i8, ngg_gs_get_emit_primflag_ptr(ctx, tmp, 0), "");
prim.isnull = LLVMBuildNot(builder, LLVMBuildTrunc(builder, flags, ctx->ac.i1, ""), "");
prim.edgeflags = ctx->ac.i32_0;
@@ -2294,7 +2294,7 @@ void gfx10_ngg_gs_build_end(struct si_shader_context *ctx)
struct si_shader_output_values outputs[PIPE_MAX_SHADER_OUTPUTS];
tmp = ngg_gs_vertex_ptr(ctx, tid);
- tmp = LLVMBuildLoad(builder, ngg_gs_get_emit_primflag_ptr(ctx, tmp, 1), "");
+ tmp = LLVMBuildLoad2(builder, ctx->ac.i8, ngg_gs_get_emit_primflag_ptr(ctx, tmp, 1), "");
tmp = LLVMBuildZExt(builder, tmp, ctx->ac.i32, "");
const LLVMValueRef vertexptr = ngg_gs_vertex_ptr(ctx, tmp);
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c b/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c
index 47a82dd1c53..ada45fff5a2 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c
@@ -182,7 +182,7 @@ static void si_llvm_emit_vertex(struct ac_shader_abi *abi, unsigned stream, LLVM
int i;
/* Write vertex attribute values to GSVS ring */
- gs_next_vertex = LLVMBuildLoad(ctx->ac.builder, ctx->gs_next_vertex[stream], "");
+ gs_next_vertex = LLVMBuildLoad2(ctx->ac.builder, ctx->ac.i32, ctx->gs_next_vertex[stream], "");
/* If this thread has already emitted the declared maximum number of
* vertices, skip the write: excessive vertex emissions are not
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c b/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c
index 5b0beb486dc..76a7c8e1015 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c
@@ -932,10 +932,9 @@ void si_llvm_build_vs_prolog(struct si_shader_context *ctx, union si_shader_part
if (key->vs_prolog.load_vgprs_after_culling) {
for (i = 5; i <= 8; i++) {
bool is_tes_rel_patch_id = i == 7;
- input_vgprs[i] = LLVMBuildIntToPtr(ctx->ac.builder, input_vgprs[i],
- LLVMPointerType(is_tes_rel_patch_id ? ctx->ac.i8 : ctx->ac.i32,
- AC_ADDR_SPACE_LDS), "");
- input_vgprs[i] = LLVMBuildLoad(ctx->ac.builder, input_vgprs[i], "");
+ LLVMTypeRef t = is_tes_rel_patch_id ? ctx->ac.i8 : ctx->ac.i32;
+ input_vgprs[i] = LLVMBuildIntToPtr(ctx->ac.builder, input_vgprs[i], LLVMPointerType(t, AC_ADDR_SPACE_LDS), "");
+ input_vgprs[i] = LLVMBuildLoad2(ctx->ac.builder, t, input_vgprs[i], "");
if (is_tes_rel_patch_id)
input_vgprs[i] = LLVMBuildZExt(ctx->ac.builder, input_vgprs[i], ctx->ac.i32, "");
}
More information about the mesa-commit
mailing list