mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-01 20:30:12 +01:00
gallivm: add create_builder_at_entry helper function
Reduces code duplication. Reviewed-by: Roland Scheidegger <sroland@vmware.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
f4204ba53d
commit
17e88e276c
1 changed files with 22 additions and 23 deletions
|
|
@ -454,6 +454,26 @@ lp_build_endif(struct lp_build_if_state *ifthen)
|
|||
}
|
||||
|
||||
|
||||
static LLVMBuilderRef
|
||||
create_builder_at_entry(struct gallivm_state *gallivm)
|
||||
{
|
||||
LLVMBuilderRef builder = gallivm->builder;
|
||||
LLVMBasicBlockRef current_block = LLVMGetInsertBlock(builder);
|
||||
LLVMValueRef function = LLVMGetBasicBlockParent(current_block);
|
||||
LLVMBasicBlockRef first_block = LLVMGetEntryBasicBlock(function);
|
||||
LLVMValueRef first_instr = LLVMGetFirstInstruction(first_block);
|
||||
LLVMBuilderRef first_builder = LLVMCreateBuilderInContext(gallivm->context);
|
||||
|
||||
if (first_instr) {
|
||||
LLVMPositionBuilderBefore(first_builder, first_instr);
|
||||
} else {
|
||||
LLVMPositionBuilderAtEnd(first_builder, first_block);
|
||||
}
|
||||
|
||||
return first_builder;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Allocate a scalar (or vector) variable.
|
||||
*
|
||||
|
|
@ -475,19 +495,9 @@ lp_build_alloca(struct gallivm_state *gallivm,
|
|||
const char *name)
|
||||
{
|
||||
LLVMBuilderRef builder = gallivm->builder;
|
||||
LLVMBasicBlockRef current_block = LLVMGetInsertBlock(builder);
|
||||
LLVMValueRef function = LLVMGetBasicBlockParent(current_block);
|
||||
LLVMBasicBlockRef first_block = LLVMGetEntryBasicBlock(function);
|
||||
LLVMValueRef first_instr = LLVMGetFirstInstruction(first_block);
|
||||
LLVMBuilderRef first_builder = LLVMCreateBuilderInContext(gallivm->context);
|
||||
LLVMBuilderRef first_builder = create_builder_at_entry(gallivm);
|
||||
LLVMValueRef res;
|
||||
|
||||
if (first_instr) {
|
||||
LLVMPositionBuilderBefore(first_builder, first_instr);
|
||||
} else {
|
||||
LLVMPositionBuilderAtEnd(first_builder, first_block);
|
||||
}
|
||||
|
||||
res = LLVMBuildAlloca(first_builder, type, name);
|
||||
LLVMBuildStore(builder, LLVMConstNull(type), res);
|
||||
|
||||
|
|
@ -517,20 +527,9 @@ lp_build_array_alloca(struct gallivm_state *gallivm,
|
|||
LLVMValueRef count,
|
||||
const char *name)
|
||||
{
|
||||
LLVMBuilderRef builder = gallivm->builder;
|
||||
LLVMBasicBlockRef current_block = LLVMGetInsertBlock(builder);
|
||||
LLVMValueRef function = LLVMGetBasicBlockParent(current_block);
|
||||
LLVMBasicBlockRef first_block = LLVMGetEntryBasicBlock(function);
|
||||
LLVMValueRef first_instr = LLVMGetFirstInstruction(first_block);
|
||||
LLVMBuilderRef first_builder = LLVMCreateBuilderInContext(gallivm->context);
|
||||
LLVMBuilderRef first_builder = create_builder_at_entry(gallivm);
|
||||
LLVMValueRef res;
|
||||
|
||||
if (first_instr) {
|
||||
LLVMPositionBuilderBefore(first_builder, first_instr);
|
||||
} else {
|
||||
LLVMPositionBuilderAtEnd(first_builder, first_block);
|
||||
}
|
||||
|
||||
res = LLVMBuildArrayAlloca(first_builder, type, count, name);
|
||||
|
||||
LLVMDisposeBuilder(first_builder);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue