From c5531f575b85e39a63578cd48f70193a4888cfb5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Fri, 21 Aug 2009 10:57:48 +0100 Subject: [PATCH] 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 ++-- src/gallium/drivers/llvmpipe/lp_bld_flow.h | 69 +++++++++++++++++++ .../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, 91 insertions(+), 38 deletions(-) rename src/gallium/drivers/llvmpipe/{lp_bld_loop.c => lp_bld_flow.c} (90%) create mode 100644 src/gallium/drivers/llvmpipe/lp_bld_flow.h rename src/gallium/drivers/llvmpipe/{lp_bld.h => lp_bld_format.h} (87%) diff --git a/src/gallium/drivers/llvmpipe/Makefile b/src/gallium/drivers/llvmpipe/Makefile index ed24a1c7b94..91a2e2ee74d 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 6e4edaa9475..677352eaa1d 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 a2987c11f30..b8b577fe5ac 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% rename from src/gallium/drivers/llvmpipe/lp_bld_loop.c rename to src/gallium/drivers/llvmpipe/lp_bld_flow.c index eb6126e5f09..5fc85a19b84 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 */ +#include "lp_bld_flow.h" + + void lp_build_loop_begin(LLVMBuilderRef builder, diff --git a/src/gallium/drivers/llvmpipe/lp_bld_flow.h b/src/gallium/drivers/llvmpipe/lp_bld_flow.h new file mode 100644 index 00000000000..7281b278a0c --- /dev/null +++ b/src/gallium/drivers/llvmpipe/lp_bld_flow.h @@ -0,0 +1,69 @@ +/************************************************************************** + * + * Copyright 2009 VMware, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + +/** + * LLVM control flow build helpers. + * + * @author Jose Fonseca + */ + +#ifndef LP_BLD_FLOW_H +#define LP_BLD_FLOW_H + + +#include + + +/** + * 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); + + +void +lp_build_loop_end(LLVMBuilderRef builder, + LLVMValueRef end, + LLVMValueRef step, + struct lp_build_loop_state *state); + + + +#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 c2dea1036f6..01c8a752d18 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 b9734bdbed1..27db7b2db0c 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 f436f097376..71261e4f393 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 6273c9ee627..1da6dac8a2f 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 3545bdf2252..d70faac1ba2 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 3086bf871bc..1d192355eed 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 -- 2.30.2