amd/common: move ac_build_phi from radeonsi
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -252,6 +252,20 @@ void ac_build_type_name_for_intr(LLVMTypeRef type, char *buf, unsigned bufsize)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function that builds an LLVM IR PHI node and immediately adds
|
||||||
|
* incoming edges.
|
||||||
|
*/
|
||||||
|
LLVMValueRef
|
||||||
|
ac_build_phi(struct ac_llvm_context *ctx, LLVMTypeRef type,
|
||||||
|
unsigned count_incoming, LLVMValueRef *values,
|
||||||
|
LLVMBasicBlockRef *blocks)
|
||||||
|
{
|
||||||
|
LLVMValueRef phi = LLVMBuildPhi(ctx->builder, type, "");
|
||||||
|
LLVMAddIncoming(phi, values, blocks, count_incoming);
|
||||||
|
return phi;
|
||||||
|
}
|
||||||
|
|
||||||
/* Prevent optimizations (at least of memory accesses) across the current
|
/* Prevent optimizations (at least of memory accesses) across the current
|
||||||
* point in the program by emitting empty inline assembly that is marked as
|
* point in the program by emitting empty inline assembly that is marked as
|
||||||
* having side effects.
|
* having side effects.
|
||||||
|
@@ -85,6 +85,11 @@ ac_build_intrinsic(struct ac_llvm_context *ctx, const char *name,
|
|||||||
|
|
||||||
void ac_build_type_name_for_intr(LLVMTypeRef type, char *buf, unsigned bufsize);
|
void ac_build_type_name_for_intr(LLVMTypeRef type, char *buf, unsigned bufsize);
|
||||||
|
|
||||||
|
LLVMValueRef
|
||||||
|
ac_build_phi(struct ac_llvm_context *ctx, LLVMTypeRef type,
|
||||||
|
unsigned count_incoming, LLVMValueRef *values,
|
||||||
|
LLVMBasicBlockRef *blocks);
|
||||||
|
|
||||||
void ac_build_optimization_barrier(struct ac_llvm_context *ctx,
|
void ac_build_optimization_barrier(struct ac_llvm_context *ctx,
|
||||||
LLVMValueRef *pvgpr);
|
LLVMValueRef *pvgpr);
|
||||||
|
|
||||||
|
@@ -233,20 +233,6 @@ unsigned si_shader_io_get_unique_index(unsigned semantic_name, unsigned index)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper function that builds an LLVM IR PHI node and immediately adds
|
|
||||||
* incoming edges.
|
|
||||||
*/
|
|
||||||
static LLVMValueRef
|
|
||||||
build_phi(struct ac_llvm_context *ctx, LLVMTypeRef type,
|
|
||||||
unsigned count_incoming, LLVMValueRef *values,
|
|
||||||
LLVMBasicBlockRef *blocks)
|
|
||||||
{
|
|
||||||
LLVMValueRef phi = LLVMBuildPhi(ctx->builder, type, "");
|
|
||||||
LLVMAddIncoming(phi, values, blocks, count_incoming);
|
|
||||||
return phi;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the value of a shader input parameter and extract a bitfield.
|
* Get the value of a shader input parameter and extract a bitfield.
|
||||||
*/
|
*/
|
||||||
@@ -2922,15 +2908,15 @@ static void si_llvm_emit_tcs_epilogue(struct lp_build_tgsi_context *bld_base)
|
|||||||
|
|
||||||
values[0] = rel_patch_id;
|
values[0] = rel_patch_id;
|
||||||
values[1] = LLVMGetUndef(ctx->i32);
|
values[1] = LLVMGetUndef(ctx->i32);
|
||||||
rel_patch_id = build_phi(&ctx->ac, ctx->i32, 2, values, blocks);
|
rel_patch_id = ac_build_phi(&ctx->ac, ctx->i32, 2, values, blocks);
|
||||||
|
|
||||||
values[0] = tf_lds_offset;
|
values[0] = tf_lds_offset;
|
||||||
values[1] = LLVMGetUndef(ctx->i32);
|
values[1] = LLVMGetUndef(ctx->i32);
|
||||||
tf_lds_offset = build_phi(&ctx->ac, ctx->i32, 2, values, blocks);
|
tf_lds_offset = ac_build_phi(&ctx->ac, ctx->i32, 2, values, blocks);
|
||||||
|
|
||||||
values[0] = invocation_id;
|
values[0] = invocation_id;
|
||||||
values[1] = ctx->i32_1; /* cause the epilog to skip threads */
|
values[1] = ctx->i32_1; /* cause the epilog to skip threads */
|
||||||
invocation_id = build_phi(&ctx->ac, ctx->i32, 2, values, blocks);
|
invocation_id = ac_build_phi(&ctx->ac, ctx->i32, 2, values, blocks);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return epilog parameters from this function. */
|
/* Return epilog parameters from this function. */
|
||||||
|
Reference in New Issue
Block a user