diff options
author | Nicolai Hähnle <nicolai.haehnle@amd.com> | 2016-08-09 12:23:41 +0200 |
---|---|---|
committer | Nicolai Hähnle <nicolai.haehnle@amd.com> | 2016-08-10 21:24:16 +0200 |
commit | e19f984cb7fb997c02c7992a8a3c0b915262b040 (patch) | |
tree | e8f51a9e3e8df5cb80836f7d3ee8323352eba9cf | |
parent | ecd6cc40d080a00cc69ac2942cb665982684e02d (diff) |
gallivm: add create_builder_at_entry helper function
Reduces code duplication.
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_flow.c | 45 |
1 files changed, 22 insertions, 23 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_flow.c b/src/gallium/auxiliary/gallivm/lp_bld_flow.c index f3b3eabb43..9183f457b1 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_flow.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_flow.c @@ -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); |