~ubuntu-branches/ubuntu/precise/mesa-lts-quantal/precise-updates

« back to all changes in this revision

Viewing changes to src/gallium/auxiliary/gallivm/lp_bld_assert.c

  • Committer: Package Import Robot
  • Author(s): Maarten Lankhorst
  • Date: 2012-11-30 20:58:34 UTC
  • Revision ID: package-import@ubuntu.com-20121130205834-gazuvne3fpwlf012
Tags: upstream-9.0
ImportĀ upstreamĀ versionĀ 9.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**************************************************************************
 
2
 *
 
3
 * Copyright 2010 VMware, Inc.
 
4
 * All Rights Reserved.
 
5
 *
 
6
 * Permission is hereby granted, free of charge, to any person obtaining a
 
7
 * copy of this software and associated documentation files (the
 
8
 * "Software"), to deal in the Software without restriction, including
 
9
 * without limitation the rights to use, copy, modify, merge, publish,
 
10
 * distribute, sub license, and/or sell copies of the Software, and to
 
11
 * permit persons to whom the Software is furnished to do so, subject to
 
12
 * the following conditions:
 
13
 *
 
14
 * The above copyright notice and this permission notice (including the
 
15
 * next paragraph) shall be included in all copies or substantial portions
 
16
 * of the Software.
 
17
 *
 
18
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 
19
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 
20
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
 
21
 * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
 
22
 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 
23
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 
24
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
25
 *
 
26
 **************************************************************************/
 
27
 
 
28
#include "util/u_debug.h"
 
29
#include "util/u_memory.h"
 
30
#include "lp_bld_assert.h"
 
31
#include "lp_bld_init.h"
 
32
#include "lp_bld_const.h"
 
33
#include "lp_bld_printf.h"
 
34
 
 
35
 
 
36
/**
 
37
 * A call to lp_build_assert() will build a function call to this function.
 
38
 */
 
39
static void
 
40
lp_assert(int condition, const char *msg)
 
41
{
 
42
   if (!condition) {
 
43
      debug_printf("LLVM assertion '%s' failed!\n", msg);
 
44
      assert(condition);
 
45
   }
 
46
}
 
47
 
 
48
 
 
49
 
 
50
/**
 
51
 * lp_build_assert.
 
52
 *
 
53
 * Build an assertion in LLVM IR by building a function call to the
 
54
 * lp_assert() function above.
 
55
 *
 
56
 * \param condition should be an 'i1' or 'i32' value
 
57
 * \param msg  a string to print if the assertion fails.
 
58
 */
 
59
void
 
60
lp_build_assert(struct gallivm_state *gallivm,
 
61
                LLVMValueRef condition,
 
62
                const char *msg)
 
63
{
 
64
   LLVMBuilderRef builder = gallivm->builder;
 
65
   LLVMContextRef context = gallivm->context;
 
66
   LLVMTypeRef arg_types[2];
 
67
   LLVMTypeRef ret_type;
 
68
   LLVMValueRef function;
 
69
   LLVMValueRef args[2];
 
70
   LLVMValueRef msg_string;
 
71
 
 
72
   msg_string = lp_build_const_string(gallivm, msg);
 
73
 
 
74
   ret_type = LLVMVoidTypeInContext(context);
 
75
   arg_types[0] = LLVMInt32TypeInContext(context);
 
76
   arg_types[1] = LLVMPointerType(LLVMInt8TypeInContext(context), 0);
 
77
 
 
78
   function = lp_build_const_func_pointer(gallivm,
 
79
                                          func_to_pointer((func_pointer)lp_assert),
 
80
                                          ret_type, arg_types, Elements(arg_types),
 
81
                                          "assert");
 
82
 
 
83
   /* build function call param list */
 
84
   args[0] = LLVMBuildZExt(builder, condition, arg_types[0], "");
 
85
   args[1] = msg_string;
 
86
 
 
87
   /* check arg types */
 
88
   assert(LLVMTypeOf(args[0]) == arg_types[0]);
 
89
   assert(LLVMTypeOf(args[1]) == arg_types[1]);
 
90
 
 
91
   LLVMBuildCall(builder, function, args, Elements(args), "");
 
92
}