X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fauxiliary%2Fgallivm%2Flp_bld_assert.c;h=02755765c0eacb5cac321ac2566510b7af67cafa;hb=1dca234daf1ef0a61fadc0ae0dadc599d3f8b7f0;hp=9de5e8e7b51459377ce252f11d4f689bd5751071;hpb=652901e95b4ed406293d0e1fabee857c054119b1;p=mesa.git diff --git a/src/gallium/auxiliary/gallivm/lp_bld_assert.c b/src/gallium/auxiliary/gallivm/lp_bld_assert.c index 9de5e8e7b51..02755765c0e 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_assert.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_assert.c @@ -29,6 +29,7 @@ #include "util/u_memory.h" #include "lp_bld_assert.h" #include "lp_bld_init.h" +#include "lp_bld_const.h" #include "lp_bld_printf.h" @@ -55,48 +56,37 @@ lp_assert(int condition, const char *msg) * \param condition should be an 'i1' or 'i32' value * \param msg a string to print if the assertion fails. */ -LLVMValueRef +void lp_build_assert(struct gallivm_state *gallivm, LLVMValueRef condition, const char *msg) { LLVMBuilderRef builder = gallivm->builder; LLVMContextRef context = gallivm->context; - LLVMModuleRef module = gallivm->module; LLVMTypeRef arg_types[2]; - LLVMValueRef msg_string, assert_func, params[2], r; + LLVMTypeRef ret_type; + LLVMValueRef function; + LLVMValueRef args[2]; + LLVMValueRef msg_string; - msg_string = lp_build_const_string_variable(module, context, - msg, strlen(msg) + 1); + msg_string = lp_build_const_string(gallivm, msg); + ret_type = LLVMVoidTypeInContext(context); arg_types[0] = LLVMInt32TypeInContext(context); arg_types[1] = LLVMPointerType(LLVMInt8TypeInContext(context), 0); - /* lookup the lp_assert function */ - assert_func = LLVMGetNamedFunction(module, "lp_assert"); - - /* Create the assertion function if not found */ - if (!assert_func) { - LLVMTypeRef func_type = - LLVMFunctionType(LLVMVoidTypeInContext(context), arg_types, 2, 0); - - assert_func = LLVMAddFunction(module, "lp_assert", func_type); - LLVMSetFunctionCallConv(assert_func, LLVMCCallConv); - LLVMSetLinkage(assert_func, LLVMExternalLinkage); - LLVMAddGlobalMapping(gallivm->engine, assert_func, - func_to_pointer((func_pointer)lp_assert)); - } - assert(assert_func); + function = lp_build_const_func_pointer(gallivm, + func_to_pointer((func_pointer)lp_assert), + ret_type, arg_types, ARRAY_SIZE(arg_types), + "assert"); /* build function call param list */ - params[0] = LLVMBuildZExt(builder, condition, arg_types[0], ""); - params[1] = LLVMBuildBitCast(builder, msg_string, arg_types[1], ""); + args[0] = LLVMBuildZExt(builder, condition, arg_types[0], ""); + args[1] = msg_string; /* check arg types */ - assert(LLVMTypeOf(params[0]) == arg_types[0]); - assert(LLVMTypeOf(params[1]) == arg_types[1]); - - r = LLVMBuildCall(builder, assert_func, params, 2, ""); + assert(LLVMTypeOf(args[0]) == arg_types[0]); + assert(LLVMTypeOf(args[1]) == arg_types[1]); - return r; + LLVMBuildCall(builder, function, args, ARRAY_SIZE(args), ""); }