Module: Mesa Branch: gallium-llvmpipe Commit: 0a62714d6f628d66399a8c1e6701d3c0014c9725 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0a62714d6f628d66399a8c1e6701d3c0014c9725
Author: José Fonseca <[email protected]> Date: Fri Aug 21 10:57:48 2009 +0100 llvmpipe: Split control flow function declarations and notes. --- src/gallium/drivers/llvmpipe/Makefile | 2 +- src/gallium/drivers/llvmpipe/README | 9 +++ src/gallium/drivers/llvmpipe/SConscript | 2 +- .../llvmpipe/{lp_bld_loop.c => lp_bld_flow.c} | 15 ++--- .../llvmpipe/{lp_bld_loop.c => lp_bld_flow.h} | 60 ++++++------------- .../drivers/llvmpipe/{lp_bld.h => lp_bld_format.h} | 21 ------- src/gallium/drivers/llvmpipe/lp_bld_load.c | 2 +- src/gallium/drivers/llvmpipe/lp_bld_pack.c | 2 +- src/gallium/drivers/llvmpipe/lp_bld_store.c | 2 +- src/gallium/drivers/llvmpipe/lp_bld_unpack.c | 2 +- src/gallium/drivers/llvmpipe/lp_test_format.c | 3 +- 11 files changed, 41 insertions(+), 79 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/Makefile b/src/gallium/drivers/llvmpipe/Makefile index ed24a1c..91a2e2e 100644 --- a/src/gallium/drivers/llvmpipe/Makefile +++ b/src/gallium/drivers/llvmpipe/Makefile @@ -12,12 +12,12 @@ C_SOURCES = \ lp_bld_conv.c \ lp_bld_debug.c \ lp_bld_depth.c \ + lp_bld_flow.c \ lp_bld_intr.c \ lp_bld_pack.c \ lp_bld_unpack.c \ lp_bld_load.c \ lp_bld_store.c \ - lp_bld_loop.c \ lp_bld_logic.c \ lp_bld_logicop.c \ lp_bld_swizzle.c \ diff --git a/src/gallium/drivers/llvmpipe/README b/src/gallium/drivers/llvmpipe/README index 6e4edaa..677352e 100644 --- a/src/gallium/drivers/llvmpipe/README +++ b/src/gallium/drivers/llvmpipe/README @@ -106,3 +106,12 @@ for posterior analysis, e.g.: build/linux-x86_64/gallium/drivers/llvmpipe/lp_test_blend -o blend.tsv + +Development Notes +================= + +- We use LLVM-C bindings for now. They are not documented, but follow the C++ + interfaces very closely, and appear to be complete enough for code + generation. See + http://npcontemplation.blogspot.com/2008/06/secret-of-llvm-c-bindings.html + for a standalone example. diff --git a/src/gallium/drivers/llvmpipe/SConscript b/src/gallium/drivers/llvmpipe/SConscript index a2987c1..b8b577f 100644 --- a/src/gallium/drivers/llvmpipe/SConscript +++ b/src/gallium/drivers/llvmpipe/SConscript @@ -16,12 +16,12 @@ llvmpipe = env.ConvenienceLibrary( 'lp_bld_conv.c', 'lp_bld_debug.c', 'lp_bld_depth.c', + 'lp_bld_flow.c', 'lp_bld_intr.c', 'lp_bld_pack.c', 'lp_bld_unpack.c', 'lp_bld_load.c', 'lp_bld_store.c', - 'lp_bld_loop.c', 'lp_bld_logic.c', 'lp_bld_logicop.c', 'lp_bld_swizzle.c', diff --git a/src/gallium/drivers/llvmpipe/lp_bld_loop.c b/src/gallium/drivers/llvmpipe/lp_bld_flow.c similarity index 90% copy from src/gallium/drivers/llvmpipe/lp_bld_loop.c copy to src/gallium/drivers/llvmpipe/lp_bld_flow.c index eb6126e..5fc85a1 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_loop.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_flow.c @@ -25,20 +25,15 @@ * **************************************************************************/ -#include "lp_bld.h" - - /** - * @file - * Auxiliaries to build loops. - * - * LLVM's IR doesn't represent for-loops directly. Furthermore it - * it requires creating code blocks, branches, phi variables, so it - * requires a fair amount of code. + * LLVM control flow build helpers. * - * @sa http://www.llvm.org/docs/tutorial/LangImpl5.html#for + * @author Jose Fonseca <[email protected]> */ +#include "lp_bld_flow.h" + + void lp_build_loop_begin(LLVMBuilderRef builder, diff --git a/src/gallium/drivers/llvmpipe/lp_bld_loop.c b/src/gallium/drivers/llvmpipe/lp_bld_flow.h similarity index 60% rename from src/gallium/drivers/llvmpipe/lp_bld_loop.c rename to src/gallium/drivers/llvmpipe/lp_bld_flow.h index eb6126e..7281b27 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_loop.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_flow.h @@ -25,67 +25,45 @@ * **************************************************************************/ -#include "lp_bld.h" +/** + * LLVM control flow build helpers. + * + * @author Jose Fonseca <[email protected]> + */ + +#ifndef LP_BLD_FLOW_H +#define LP_BLD_FLOW_H + + +#include <llvm-c/Core.h> /** - * @file - * Auxiliaries to build loops. - * * LLVM's IR doesn't represent for-loops directly. Furthermore it * it requires creating code blocks, branches, phi variables, so it * requires a fair amount of code. * * @sa http://www.llvm.org/docs/tutorial/LangImpl5.html#for */ +struct lp_build_loop_state +{ + LLVMBasicBlockRef block; + LLVMValueRef counter; +}; void lp_build_loop_begin(LLVMBuilderRef builder, LLVMValueRef start, - struct lp_build_loop_state *state) -{ - LLVMBasicBlockRef block = LLVMGetInsertBlock(builder); - LLVMValueRef function = LLVMGetBasicBlockParent(block); - - state->block = LLVMAppendBasicBlock(function, "loop"); - - LLVMBuildBr(builder, state->block); - - LLVMPositionBuilderAtEnd(builder, state->block); - - state->counter = LLVMBuildPhi(builder, LLVMTypeOf(start), ""); - - LLVMAddIncoming(state->counter, &start, &block, 1); - -} + struct lp_build_loop_state *state); void lp_build_loop_end(LLVMBuilderRef builder, LLVMValueRef end, LLVMValueRef step, - struct lp_build_loop_state *state) -{ - LLVMBasicBlockRef block = LLVMGetInsertBlock(builder); - LLVMValueRef function = LLVMGetBasicBlockParent(block); - LLVMValueRef next; - LLVMValueRef cond; - LLVMBasicBlockRef after_block; - - if (!step) - step = LLVMConstInt(LLVMTypeOf(end), 1, 0); - - next = LLVMBuildAdd(builder, state->counter, step, ""); - - cond = LLVMBuildICmp(builder, LLVMIntNE, next, end, ""); - - after_block = LLVMAppendBasicBlock(function, ""); - - LLVMBuildCondBr(builder, cond, after_block, state->block); + struct lp_build_loop_state *state); - LLVMAddIncoming(state->counter, &next, &block, 1); - LLVMPositionBuilderAtEnd(builder, after_block); -} +#endif /* !LP_BLD_FLOW_H */ diff --git a/src/gallium/drivers/llvmpipe/lp_bld.h b/src/gallium/drivers/llvmpipe/lp_bld_format.h similarity index 87% rename from src/gallium/drivers/llvmpipe/lp_bld.h rename to src/gallium/drivers/llvmpipe/lp_bld_format.h index c2dea10..01c8a75 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld.h +++ b/src/gallium/drivers/llvmpipe/lp_bld_format.h @@ -98,25 +98,4 @@ lp_build_store_rgba(LLVMBuilderRef builder, LLVMValueRef rgba); -struct lp_build_loop_state -{ - LLVMBasicBlockRef block; - LLVMValueRef counter; -}; - - -void -lp_build_loop_begin(LLVMBuilderRef builder, - LLVMValueRef start, - struct lp_build_loop_state *state); - - -void -lp_build_loop_end(LLVMBuilderRef builder, - LLVMValueRef end, - LLVMValueRef step, - struct lp_build_loop_state *state); - - - #endif /* !LP_BLD_H */ diff --git a/src/gallium/drivers/llvmpipe/lp_bld_load.c b/src/gallium/drivers/llvmpipe/lp_bld_load.c index b9734bd..27db7b2 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_load.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_load.c @@ -28,7 +28,7 @@ #include "util/u_format.h" -#include "lp_bld.h" +#include "lp_bld_format.h" LLVMValueRef diff --git a/src/gallium/drivers/llvmpipe/lp_bld_pack.c b/src/gallium/drivers/llvmpipe/lp_bld_pack.c index f436f09..71261e4 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_pack.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_pack.c @@ -28,7 +28,7 @@ #include "util/u_format.h" -#include "lp_bld.h" +#include "lp_bld_format.h" LLVMValueRef diff --git a/src/gallium/drivers/llvmpipe/lp_bld_store.c b/src/gallium/drivers/llvmpipe/lp_bld_store.c index 6273c9e..1da6dac 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_store.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_store.c @@ -28,7 +28,7 @@ #include "util/u_format.h" -#include "lp_bld.h" +#include "lp_bld_format.h" void diff --git a/src/gallium/drivers/llvmpipe/lp_bld_unpack.c b/src/gallium/drivers/llvmpipe/lp_bld_unpack.c index 3545bdf..d70faac 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_unpack.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_unpack.c @@ -28,7 +28,7 @@ #include "util/u_format.h" -#include "lp_bld.h" +#include "lp_bld_format.h" LLVMValueRef diff --git a/src/gallium/drivers/llvmpipe/lp_test_format.c b/src/gallium/drivers/llvmpipe/lp_test_format.c index 3086bf8..1d19235 100644 --- a/src/gallium/drivers/llvmpipe/lp_test_format.c +++ b/src/gallium/drivers/llvmpipe/lp_test_format.c @@ -37,7 +37,8 @@ #include "util/u_format.h" -#include "lp_bld.h" +#include "lp_bld_flow.h" +#include "lp_bld_format.h" struct pixel_test_case _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
