[Mesa-dev] [PATCH 3/3] gallium/radeon: use lp_build_alloca_undef
Nicolai Hähnle
nhaehnle at gmail.com
Tue Aug 9 10:38:27 UTC 2016
From: Nicolai Hähnle <nicolai.haehnle at amd.com>
Avoid building all those store 0 / store undef instrucction pairs that
end up getting removed anyway.
---
src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c | 15 +++------------
1 file changed, 3 insertions(+), 12 deletions(-)
diff --git a/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c b/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c
index 6a010d5..b419add 100644
--- a/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c
+++ b/src/gallium/drivers/radeon/radeon_setup_tgsi_llvm.c
@@ -483,43 +483,34 @@ static LLVMValueRef fetch_system_value(struct lp_build_tgsi_context *bld_base,
struct gallivm_state *gallivm = bld_base->base.gallivm;
LLVMValueRef cval = ctx->system_values[reg->Register.Index];
if (LLVMGetTypeKind(LLVMTypeOf(cval)) == LLVMVectorTypeKind) {
cval = LLVMBuildExtractElement(gallivm->builder, cval,
lp_build_const_int32(gallivm, swizzle), "");
}
return bitcast(bld_base, type, cval);
}
-static LLVMValueRef si_build_alloca_undef(struct gallivm_state *gallivm,
- LLVMTypeRef type,
- const char *name)
-{
- LLVMValueRef ptr = lp_build_alloca(gallivm, type, name);
- LLVMBuildStore(gallivm->builder, LLVMGetUndef(type), ptr);
- return ptr;
-}
-
static void emit_declaration(struct lp_build_tgsi_context *bld_base,
const struct tgsi_full_declaration *decl)
{
struct radeon_llvm_context *ctx = radeon_llvm_context(bld_base);
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
unsigned first, last, i;
switch(decl->Declaration.File) {
case TGSI_FILE_ADDRESS:
{
unsigned idx;
for (idx = decl->Range.First; idx <= decl->Range.Last; idx++) {
unsigned chan;
for (chan = 0; chan < TGSI_NUM_CHANNELS; chan++) {
- ctx->soa.addr[idx][chan] = si_build_alloca_undef(
+ ctx->soa.addr[idx][chan] = lp_build_alloca_undef(
&ctx->gallivm,
ctx->soa.bld_base.uint_bld.elem_type, "");
}
}
break;
}
case TGSI_FILE_TEMPORARY:
{
char name[16] = "";
@@ -574,21 +565,21 @@ static void emit_declaration(struct lp_build_tgsi_context *bld_base,
ctx->temps_count = bld_base->info->file_max[TGSI_FILE_TEMPORARY] + 1;
ctx->temps = MALLOC(TGSI_NUM_CHANNELS * ctx->temps_count * sizeof(LLVMValueRef));
}
if (!array_alloca) {
for (i = 0; i < decl_size; ++i) {
#ifdef DEBUG
snprintf(name, sizeof(name), "TEMP%d.%c",
first + i / 4, "xyzw"[i % 4]);
#endif
ctx->temps[first * TGSI_NUM_CHANNELS + i] =
- si_build_alloca_undef(bld_base->base.gallivm,
+ lp_build_alloca_undef(bld_base->base.gallivm,
bld_base->base.vec_type,
name);
}
} else {
LLVMValueRef idxs[2] = {
bld_base->uint_bld.zero,
NULL
};
LLVMValueRef undef = NULL;
unsigned j = 0;
@@ -633,21 +624,21 @@ static void emit_declaration(struct lp_build_tgsi_context *bld_base,
}
break;
case TGSI_FILE_OUTPUT:
{
unsigned idx;
for (idx = decl->Range.First; idx <= decl->Range.Last; idx++) {
unsigned chan;
assert(idx < RADEON_LLVM_MAX_OUTPUTS);
for (chan = 0; chan < TGSI_NUM_CHANNELS; chan++) {
- ctx->soa.outputs[idx][chan] = si_build_alloca_undef(
+ ctx->soa.outputs[idx][chan] = lp_build_alloca_undef(
&ctx->gallivm,
ctx->soa.bld_base.base.elem_type, "");
}
}
break;
}
case TGSI_FILE_MEMORY:
ctx->declare_memory_region(ctx, decl);
break;
--
2.7.4
More information about the mesa-dev
mailing list