summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/llvmpipe/lp_bld_intr.c
diff options
context:
space:
mode:
authorJosé Fonseca <jfonseca@vmware.com>2009-08-23 07:55:29 +0100
committerJosé Fonseca <jfonseca@vmware.com>2009-08-29 09:21:41 +0100
commit03180dca7a3b5d57100158eb06d00419e55d9dc8 (patch)
tree957a2c3756b3801b90aef867fa8cfff5f79d8923 /src/gallium/drivers/llvmpipe/lp_bld_intr.c
parent635c37e118bbf51fc8c93a2c999281ee817a93e1 (diff)
llvmpipe: Pre-declare fetch_texel.
Diffstat (limited to 'src/gallium/drivers/llvmpipe/lp_bld_intr.c')
-rw-r--r--src/gallium/drivers/llvmpipe/lp_bld_intr.c49
1 files changed, 36 insertions, 13 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_bld_intr.c b/src/gallium/drivers/llvmpipe/lp_bld_intr.c
index 42fd57fdf0..9895749d56 100644
--- a/src/gallium/drivers/llvmpipe/lp_bld_intr.c
+++ b/src/gallium/drivers/llvmpipe/lp_bld_intr.c
@@ -50,6 +50,37 @@
LLVMValueRef
+lp_declare_intrinsic(LLVMModuleRef module,
+ const char *name,
+ LLVMTypeRef ret_type,
+ LLVMTypeRef *arg_types,
+ unsigned num_args)
+{
+ LLVMTypeRef function_type;
+ LLVMValueRef function;
+
+ assert(!LLVMGetNamedFunction(module, name));
+
+ function_type = LLVMFunctionType(ret_type, arg_types, num_args, 0);
+ function = LLVMAddFunction(module, name, function_type);
+
+ LLVMSetFunctionCallConv(function, LLVMCCallConv);
+ LLVMSetLinkage(function, LLVMExternalLinkage);
+
+ assert(LLVMIsDeclaration(function));
+
+ if(name[0] == 'l' &&
+ name[1] == 'l' &&
+ name[2] == 'v' &&
+ name[3] == 'm' &&
+ name[4] == '.')
+ assert(LLVMGetIntrinsicID(function));
+
+ return function;
+}
+
+
+LLVMValueRef
lp_build_intrinsic(LLVMBuilderRef builder,
const char *name,
LLVMTypeRef ret_type,
@@ -59,28 +90,20 @@ lp_build_intrinsic(LLVMBuilderRef builder,
LLVMModuleRef module = LLVMGetGlobalParent(LLVMGetBasicBlockParent(LLVMGetInsertBlock(builder)));
LLVMValueRef function;
- assert(num_args <= LP_MAX_FUNC_ARGS);
-
function = LLVMGetNamedFunction(module, name);
if(!function) {
LLVMTypeRef arg_types[LP_MAX_FUNC_ARGS];
unsigned i;
+
+ assert(num_args <= LP_MAX_FUNC_ARGS);
+
for(i = 0; i < num_args; ++i) {
assert(args[i]);
arg_types[i] = LLVMTypeOf(args[i]);
}
- function = LLVMAddFunction(module, name, LLVMFunctionType(ret_type, arg_types, num_args, 0));
- LLVMSetFunctionCallConv(function, LLVMCCallConv);
- LLVMSetLinkage(function, LLVMExternalLinkage);
- }
- assert(LLVMIsDeclaration(function));
- if(name[0] == 'l' &&
- name[1] == 'l' &&
- name[2] == 'v' &&
- name[3] == 'm' &&
- name[4] == '.')
- assert(LLVMGetIntrinsicID(function));
+ function = lp_declare_intrinsic(module, name, ret_type, arg_types, num_args);
+ }
return LLVMBuildCall(builder, function, args, num_args, "");
}