Bug 51366 - [llvmpipe] src/gallium/auxiliary/draw/draw_llvm.c:1475:draw_llvm_generate: Assertion `0' failed.
Summary: [llvmpipe] src/gallium/auxiliary/draw/draw_llvm.c:1475:draw_llvm_generate: As...
Status: RESOLVED FIXED
Alias: None
Product: Mesa
Classification: Unclassified
Component: Other (show other bugs)
Version: git
Hardware: x86-64 (AMD64) Linux (All)
: medium critical
Assignee: mesa-dev
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-06-23 13:25 UTC by Vinson Lee
Modified: 2012-07-13 12:02 UTC (History)
1 user (show)

See Also:
i915 platform:
i915 features:


Attachments

Description Vinson Lee 2012-06-23 13:25:04 UTC
mesa: 78ac9af58021b7cc649c35fda112f61c98b31766 (master)

Run piglit draw-non-instanced test on llvmpipe.

$ ./bin/shader_runner tests/spec/arb_draw_instanced/execution/draw-non-instanced.shader_test

Stored value type does not match pointer operand type!
  store <4 x i32> %134, <4 x float>* %temp
 <4 x float>Broken module found, verification continues.

define i32 @draw_llvm_shader({ float*, float*, [14 x [4 x float]]*, float*, [16 x { i32, i32, i32, i32, i32, [16 x i32], [16 x i32], [16 x i8*], float, float, float, [4 x float] }] }* noalias %context, { i32, [4 x float], [4 x float], [3 x [4 x float]] }* noalias %io, i8** noalias %vbuffers, i32 %start, i32 %count, i32 %stride, { i32, i32, i8*, i8* }* noalias %vb, i32 %instance_id) {
entry:
  %temp44 = alloca <4 x float>
  %temp43 = alloca <4 x float>
  %temp42 = alloca <4 x float>
  %temp41 = alloca <4 x float>
  %temp40 = alloca <4 x float>
  %temp39 = alloca <4 x float>
  %temp38 = alloca <4 x float>
  %temp = alloca <4 x float>
  %output37 = alloca <4 x float>
  %output36 = alloca <4 x float>
  %output35 = alloca <4 x float>
  %output34 = alloca <4 x float>
  %output33 = alloca <4 x float>
  %output32 = alloca <4 x float>
  %output31 = alloca <4 x float>
  %output = alloca <4 x float>
  %looplimiter = alloca i32
  %loop_counter = alloca i32
  %0 = alloca i32
  store i32 0, i32* %0
  store i32 0, i32* %0
  %1 = add i32 %start, %count
  %fetch_max = sub i32 %1, 1
  store i32 0, i32* %loop_counter
  store i32 %start, i32* %loop_counter
  br label %loop_begin

loop_begin:                                       ; preds = %loop_begin, %entry
  %2 = load i32* %loop_counter
  %3 = sub i32 %2, %start
  %4 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %io, i32 %3
  %5 = add i32 %2, 0
  %6 = icmp slt i32 %5, %fetch_max
  %7 = sext i1 %6 to i32
  %8 = trunc i32 %7 to i1
  %9 = select i1 %8, i32 %5, i32 %fetch_max
  %10 = insertelement <4 x i32> zeroinitializer, i32 %9, i32 0
  %11 = getelementptr { i32, i32, i8*, i8* }* %vb, i32 0
  %12 = getelementptr i8** %vbuffers, i64 0
  %.stride_ptr = getelementptr { i32, i32, i8*, i8* }* %11, i32 0, i32 0
  %.stride = load i32* %.stride_ptr
  %.buffer_offset_ptr = getelementptr { i32, i32, i8*, i8* }* %11, i32 0, i32 1
  %.buffer_offset = load i32* %.buffer_offset_ptr
  %13 = mul i32 %.stride, %9
  %vbuffer = load i8** %12
  %14 = add i32 %13, %.buffer_offset
  %15 = add i32 %14, 0
  %16 = getelementptr i8* %vbuffer, i32 %15
  %src_tmp = getelementptr i8* %16, i32 0
  %17 = bitcast i8* %src_tmp to float*
  %18 = load float* %17
  %19 = insertelement <4 x float> zeroinitializer, float %18, i32 0
  %src_tmp1 = getelementptr i8* %16, i32 4
  %20 = bitcast i8* %src_tmp1 to float*
  %21 = load float* %20
  %22 = insertelement <4 x float> %19, float %21, i32 1
  %src_tmp2 = getelementptr i8* %16, i32 8
  %23 = bitcast i8* %src_tmp2 to float*
  %24 = load float* %23
  %25 = insertelement <4 x float> %22, float %24, i32 2
  %src_tmp3 = getelementptr i8* %16, i32 12
  %26 = bitcast i8* %src_tmp3 to float*
  %27 = load float* %26
  %28 = insertelement <4 x float> %25, float %27, i32 3
  %29 = add i32 %2, 1
  %30 = icmp slt i32 %29, %fetch_max
  %31 = sext i1 %30 to i32
  %32 = trunc i32 %31 to i1
  %33 = select i1 %32, i32 %29, i32 %fetch_max
  %34 = insertelement <4 x i32> %10, i32 %33, i32 1
  %35 = getelementptr { i32, i32, i8*, i8* }* %vb, i32 0
  %36 = getelementptr i8** %vbuffers, i64 0
  %.stride_ptr4 = getelementptr { i32, i32, i8*, i8* }* %35, i32 0, i32 0
  %.stride5 = load i32* %.stride_ptr4
  %.buffer_offset_ptr6 = getelementptr { i32, i32, i8*, i8* }* %35, i32 0, i32 1
  %.buffer_offset7 = load i32* %.buffer_offset_ptr6
  %37 = mul i32 %.stride5, %33
  %vbuffer8 = load i8** %36
  %38 = add i32 %37, %.buffer_offset7
  %39 = add i32 %38, 0
  %40 = getelementptr i8* %vbuffer8, i32 %39
  %src_tmp9 = getelementptr i8* %40, i32 0
  %41 = bitcast i8* %src_tmp9 to float*
  %42 = load float* %41
  %43 = insertelement <4 x float> zeroinitializer, float %42, i32 0
  %src_tmp10 = getelementptr i8* %40, i32 4
  %44 = bitcast i8* %src_tmp10 to float*
  %45 = load float* %44
  %46 = insertelement <4 x float> %43, float %45, i32 1
  %src_tmp11 = getelementptr i8* %40, i32 8
  %47 = bitcast i8* %src_tmp11 to float*
  %48 = load float* %47
  %49 = insertelement <4 x float> %46, float %48, i32 2
  %src_tmp12 = getelementptr i8* %40, i32 12
  %50 = bitcast i8* %src_tmp12 to float*
  %51 = load float* %50
  %52 = insertelement <4 x float> %49, float %51, i32 3
  %53 = add i32 %2, 2
  %54 = icmp slt i32 %53, %fetch_max
  %55 = sext i1 %54 to i32
  %56 = trunc i32 %55 to i1
  %57 = select i1 %56, i32 %53, i32 %fetch_max
  %58 = insertelement <4 x i32> %34, i32 %57, i32 2
  %59 = getelementptr { i32, i32, i8*, i8* }* %vb, i32 0
  %60 = getelementptr i8** %vbuffers, i64 0
  %.stride_ptr13 = getelementptr { i32, i32, i8*, i8* }* %59, i32 0, i32 0
  %.stride14 = load i32* %.stride_ptr13
  %.buffer_offset_ptr15 = getelementptr { i32, i32, i8*, i8* }* %59, i32 0, i32 1
  %.buffer_offset16 = load i32* %.buffer_offset_ptr15
  %61 = mul i32 %.stride14, %57
  %vbuffer17 = load i8** %60
  %62 = add i32 %61, %.buffer_offset16
  %63 = add i32 %62, 0
  %64 = getelementptr i8* %vbuffer17, i32 %63
  %src_tmp18 = getelementptr i8* %64, i32 0
  %65 = bitcast i8* %src_tmp18 to float*
  %66 = load float* %65
  %67 = insertelement <4 x float> zeroinitializer, float %66, i32 0
  %src_tmp19 = getelementptr i8* %64, i32 4
  %68 = bitcast i8* %src_tmp19 to float*
  %69 = load float* %68
  %70 = insertelement <4 x float> %67, float %69, i32 1
  %src_tmp20 = getelementptr i8* %64, i32 8
  %71 = bitcast i8* %src_tmp20 to float*
  %72 = load float* %71
  %73 = insertelement <4 x float> %70, float %72, i32 2
  %src_tmp21 = getelementptr i8* %64, i32 12
  %74 = bitcast i8* %src_tmp21 to float*
  %75 = load float* %74
  %76 = insertelement <4 x float> %73, float %75, i32 3
  %77 = add i32 %2, 3
  %78 = icmp slt i32 %77, %fetch_max
  %79 = sext i1 %78 to i32
  %80 = trunc i32 %79 to i1
  %81 = select i1 %80, i32 %77, i32 %fetch_max
  %82 = insertelement <4 x i32> %58, i32 %81, i32 3
  %83 = getelementptr { i32, i32, i8*, i8* }* %vb, i32 0
  %84 = getelementptr i8** %vbuffers, i64 0
  %.stride_ptr22 = getelementptr { i32, i32, i8*, i8* }* %83, i32 0, i32 0
  %.stride23 = load i32* %.stride_ptr22
  %.buffer_offset_ptr24 = getelementptr { i32, i32, i8*, i8* }* %83, i32 0, i32 1
  %.buffer_offset25 = load i32* %.buffer_offset_ptr24
  %85 = mul i32 %.stride23, %81
  %vbuffer26 = load i8** %84
  %86 = add i32 %85, %.buffer_offset25
  %87 = add i32 %86, 0
  %88 = getelementptr i8* %vbuffer26, i32 %87
  %src_tmp27 = getelementptr i8* %88, i32 0
  %89 = bitcast i8* %src_tmp27 to float*
  %90 = load float* %89
  %91 = insertelement <4 x float> zeroinitializer, float %90, i32 0
  %src_tmp28 = getelementptr i8* %88, i32 4
  %92 = bitcast i8* %src_tmp28 to float*
  %93 = load float* %92
  %94 = insertelement <4 x float> %91, float %93, i32 1
  %src_tmp29 = getelementptr i8* %88, i32 8
  %95 = bitcast i8* %src_tmp29 to float*
  %96 = load float* %95
  %97 = insertelement <4 x float> %94, float %96, i32 2
  %src_tmp30 = getelementptr i8* %88, i32 12
  %98 = bitcast i8* %src_tmp30 to float*
  %99 = load float* %98
  %100 = insertelement <4 x float> %97, float %99, i32 3
  %101 = extractelement <4 x float> %28, i32 0
  %102 = insertelement <4 x float> zeroinitializer, float %101, i32 0
  %103 = extractelement <4 x float> %52, i32 0
  %104 = insertelement <4 x float> %102, float %103, i32 1
  %105 = extractelement <4 x float> %76, i32 0
  %106 = insertelement <4 x float> %104, float %105, i32 2
  %107 = extractelement <4 x float> %100, i32 0
  %108 = insertelement <4 x float> %106, float %107, i32 3
  %109 = extractelement <4 x float> %28, i32 1
  %110 = insertelement <4 x float> zeroinitializer, float %109, i32 0
  %111 = extractelement <4 x float> %52, i32 1
  %112 = insertelement <4 x float> %110, float %111, i32 1
  %113 = extractelement <4 x float> %76, i32 1
  %114 = insertelement <4 x float> %112, float %113, i32 2
  %115 = extractelement <4 x float> %100, i32 1
  %116 = insertelement <4 x float> %114, float %115, i32 3
  %117 = extractelement <4 x float> %28, i32 2
  %118 = insertelement <4 x float> zeroinitializer, float %117, i32 0
  %119 = extractelement <4 x float> %52, i32 2
  %120 = insertelement <4 x float> %118, float %119, i32 1
  %121 = extractelement <4 x float> %76, i32 2
  %122 = insertelement <4 x float> %120, float %121, i32 2
  %123 = extractelement <4 x float> %100, i32 2
  %124 = insertelement <4 x float> %122, float %123, i32 3
  %125 = extractelement <4 x float> %28, i32 3
  %126 = insertelement <4 x float> zeroinitializer, float %125, i32 0
  %127 = extractelement <4 x float> %52, i32 3
  %128 = insertelement <4 x float> %126, float %127, i32 1
  %129 = extractelement <4 x float> %76, i32 3
  %130 = insertelement <4 x float> %128, float %129, i32 2
  %131 = extractelement <4 x float> %100, i32 3
  %132 = insertelement <4 x float> %130, float %131, i32 3
  %context.vs_constants_ptr = getelementptr { float*, float*, [14 x [4 x float]]*, float*, [16 x { i32, i32, i32, i32, i32, [16 x i32], [16 x i32], [16 x i8*], float, float, float, [4 x float] }] }* %context, i32 0, i32 0
  %context.vs_constants = load float** %context.vs_constants_ptr
  store i32 0, i32* %looplimiter
  store i32 65535, i32* %looplimiter
  store <4 x float> zeroinitializer, <4 x float>* %output
  store <4 x float> zeroinitializer, <4 x float>* %output31
  store <4 x float> zeroinitializer, <4 x float>* %output32
  store <4 x float> zeroinitializer, <4 x float>* %output33
  store <4 x float> zeroinitializer, <4 x float>* %output34
  store <4 x float> zeroinitializer, <4 x float>* %output35
  store <4 x float> zeroinitializer, <4 x float>* %output36
  store <4 x float> zeroinitializer, <4 x float>* %output37
  store <4 x float> zeroinitializer, <4 x float>* %temp
  store <4 x float> zeroinitializer, <4 x float>* %temp38
  store <4 x float> zeroinitializer, <4 x float>* %temp39
  store <4 x float> zeroinitializer, <4 x float>* %temp40
  store <4 x float> zeroinitializer, <4 x float>* %temp41
  store <4 x float> zeroinitializer, <4 x float>* %temp42
  store <4 x float> zeroinitializer, <4 x float>* %temp43
  store <4 x float> zeroinitializer, <4 x float>* %temp44
  store <4 x float> zeroinitializer, <4 x float>* %temp39
  store <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, <4 x float>* %temp40
  %133 = insertelement <4 x i32> undef, i32 %instance_id, i32 0
  %134 = shufflevector <4 x i32> %133, <4 x i32> undef, <4 x i32> zeroinitializer
  store <4 x i32> %134, <4 x float>* %temp
  %135 = insertelement <4 x i32> undef, i32 %instance_id, i32 0
  %136 = shufflevector <4 x i32> %135, <4 x i32> undef, <4 x i32> zeroinitializer
  %137 = bitcast <4 x i32> %136 to <4 x float>
  %138 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %137
  %139 = fadd <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %138
  store <4 x float> %139, <4 x float>* %temp41
  %140 = load <4 x float>* %temp41
  store <4 x float> %140, <4 x float>* %temp38
  %141 = getelementptr float* %context.vs_constants, i32 0
  %142 = load float* %141
  %143 = insertelement <4 x float> undef, float %142, i32 0
  %144 = shufflevector <4 x float> %143, <4 x float> undef, <4 x i32> zeroinitializer
  %145 = fmul <4 x float> %144, %108
  %146 = getelementptr float* %context.vs_constants, i32 1
  %147 = load float* %146
  %148 = insertelement <4 x float> undef, float %147, i32 0
  %149 = shufflevector <4 x float> %148, <4 x float> undef, <4 x i32> zeroinitializer
  %150 = fmul <4 x float> %149, %108
  %151 = getelementptr float* %context.vs_constants, i32 2
  %152 = load float* %151
  %153 = insertelement <4 x float> undef, float %152, i32 0
  %154 = shufflevector <4 x float> %153, <4 x float> undef, <4 x i32> zeroinitializer
  %155 = fmul <4 x float> %154, %108
  %156 = getelementptr float* %context.vs_constants, i32 3
  %157 = load float* %156
  %158 = insertelement <4 x float> undef, float %157, i32 0
  %159 = shufflevector <4 x float> %158, <4 x float> undef, <4 x i32> zeroinitializer
  %160 = fmul <4 x float> %159, %108
  store <4 x float> %145, <4 x float>* %temp41
  store <4 x float> %150, <4 x float>* %temp42
  store <4 x float> %155, <4 x float>* %temp43
  store <4 x float> %160, <4 x float>* %temp44
  %161 = getelementptr float* %context.vs_constants, i32 4
  %162 = load float* %161
  %163 = insertelement <4 x float> undef, float %162, i32 0
  %164 = shufflevector <4 x float> %163, <4 x float> undef, <4 x i32> zeroinitializer
  %165 = load <4 x float>* %temp41
  %166 = fmul <4 x float> %164, %116
  %167 = fadd <4 x float> %166, %165
  %168 = getelementptr float* %context.vs_constants, i32 5
  %169 = load float* %168
  %170 = insertelement <4 x float> undef, float %169, i32 0
  %171 = shufflevector <4 x float> %170, <4 x float> undef, <4 x i32> zeroinitializer
  %172 = load <4 x float>* %temp42
  %173 = fmul <4 x float> %171, %116
  %174 = fadd <4 x float> %173, %172
  %175 = getelementptr float* %context.vs_constants, i32 6
  %176 = load float* %175
  %177 = insertelement <4 x float> undef, float %176, i32 0
  %178 = shufflevector <4 x float> %177, <4 x float> undef, <4 x i32> zeroinitializer
  %179 = load <4 x float>* %temp43
  %180 = fmul <4 x float> %178, %116
  %181 = fadd <4 x float> %180, %179
  %182 = getelementptr float* %context.vs_constants, i32 7
  %183 = load float* %182
  %184 = insertelement <4 x float> undef, float %183, i32 0
  %185 = shufflevector <4 x float> %184, <4 x float> undef, <4 x i32> zeroinitializer
  %186 = load <4 x float>* %temp44
  %187 = fmul <4 x float> %185, %116
  %188 = fadd <4 x float> %187, %186
  store <4 x float> %167, <4 x float>* %temp41
  store <4 x float> %174, <4 x float>* %temp42
  store <4 x float> %181, <4 x float>* %temp43
  store <4 x float> %188, <4 x float>* %temp44
  %189 = getelementptr float* %context.vs_constants, i32 8
  %190 = load float* %189
  %191 = insertelement <4 x float> undef, float %190, i32 0
  %192 = shufflevector <4 x float> %191, <4 x float> undef, <4 x i32> zeroinitializer
  %193 = load <4 x float>* %temp41
  %194 = fmul <4 x float> %192, %124
  %195 = fadd <4 x float> %194, %193
  %196 = getelementptr float* %context.vs_constants, i32 9
  %197 = load float* %196
  %198 = insertelement <4 x float> undef, float %197, i32 0
  %199 = shufflevector <4 x float> %198, <4 x float> undef, <4 x i32> zeroinitializer
  %200 = load <4 x float>* %temp42
  %201 = fmul <4 x float> %199, %124
  %202 = fadd <4 x float> %201, %200
  %203 = getelementptr float* %context.vs_constants, i32 10
  %204 = load float* %203
  %205 = insertelement <4 x float> undef, float %204, i32 0
  %206 = shufflevector <4 x float> %205, <4 x float> undef, <4 x i32> zeroinitializer
  %207 = load <4 x float>* %temp43
  %208 = fmul <4 x float> %206, %124
  %209 = fadd <4 x float> %208, %207
  %210 = getelementptr float* %context.vs_constants, i32 11
  %211 = load float* %210
  %212 = insertelement <4 x float> undef, float %211, i32 0
  %213 = shufflevector <4 x float> %212, <4 x float> undef, <4 x i32> zeroinitializer
  %214 = load <4 x float>* %temp44
  %215 = fmul <4 x float> %213, %124
  %216 = fadd <4 x float> %215, %214
  store <4 x float> %195, <4 x float>* %temp41
  store <4 x float> %202, <4 x float>* %temp42
  store <4 x float> %209, <4 x float>* %temp43
  store <4 x float> %216, <4 x float>* %temp44
  %217 = getelementptr float* %context.vs_constants, i32 12
  %218 = load float* %217
  %219 = insertelement <4 x float> undef, float %218, i32 0
  %220 = shufflevector <4 x float> %219, <4 x float> undef, <4 x i32> zeroinitializer
  %221 = load <4 x float>* %temp41
  %222 = fmul <4 x float> %220, %132
  %223 = fadd <4 x float> %222, %221
  %224 = getelementptr float* %context.vs_constants, i32 13
  %225 = load float* %224
  %226 = insertelement <4 x float> undef, float %225, i32 0
  %227 = shufflevector <4 x float> %226, <4 x float> undef, <4 x i32> zeroinitializer
  %228 = load <4 x float>* %temp42
  %229 = fmul <4 x float> %227, %132
  %230 = fadd <4 x float> %229, %228
  %231 = getelementptr float* %context.vs_constants, i32 14
  %232 = load float* %231
  %233 = insertelement <4 x float> undef, float %232, i32 0
  %234 = shufflevector <4 x float> %233, <4 x float> undef, <4 x i32> zeroinitializer
  %235 = load <4 x float>* %temp43
  %236 = fmul <4 x float> %234, %132
  %237 = fadd <4 x float> %236, %235
  %238 = getelementptr float* %context.vs_constants, i32 15
  %239 = load float* %238
  %240 = insertelement <4 x float> undef, float %239, i32 0
  %241 = shufflevector <4 x float> %240, <4 x float> undef, <4 x i32> zeroinitializer
  %242 = load <4 x float>* %temp44
  %243 = fmul <4 x float> %241, %132
  %244 = fadd <4 x float> %243, %242
  store <4 x float> %223, <4 x float>* %temp41
  store <4 x float> %230, <4 x float>* %temp42
  store <4 x float> %237, <4 x float>* %temp43
  store <4 x float> %244, <4 x float>* %temp44
  %245 = load <4 x float>* %temp
  %246 = load <4 x float>* %temp38
  %247 = load <4 x float>* %temp39
  %248 = load <4 x float>* %temp40
  store <4 x float> %245, <4 x float>* %output34
  store <4 x float> %246, <4 x float>* %output35
  store <4 x float> %247, <4 x float>* %output36
  store <4 x float> %248, <4 x float>* %output37
  %249 = load <4 x float>* %temp41
  %250 = load <4 x float>* %temp42
  %251 = load <4 x float>* %temp43
  %252 = load <4 x float>* %temp44
  store <4 x float> %249, <4 x float>* %output
  store <4 x float> %250, <4 x float>* %output31
  store <4 x float> %251, <4 x float>* %output32
  store <4 x float> %252, <4 x float>* %output33
  %253 = load <4 x float>* %output
  %254 = load <4 x float>* %output31
  %255 = load <4 x float>* %output32
  %256 = load <4 x float>* %output33
  %257 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 0
  %258 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 1
  %259 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 2
  %260 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 3
  %.clip_ptr = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %257, i32 0, i32 1
  %.clip_ptr45 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %258, i32 0, i32 1
  %.clip_ptr46 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %259, i32 0, i32 1
  %.clip_ptr47 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %260, i32 0, i32 1
  %261 = getelementptr [4 x float]* %.clip_ptr, i32 0, i32 0
  %262 = getelementptr [4 x float]* %.clip_ptr45, i32 0, i32 0
  %263 = getelementptr [4 x float]* %.clip_ptr46, i32 0, i32 0
  %264 = getelementptr [4 x float]* %.clip_ptr47, i32 0, i32 0
  %265 = extractelement <4 x float> %253, i32 0
  %266 = extractelement <4 x float> %253, i32 1
  %267 = extractelement <4 x float> %253, i32 2
  %268 = extractelement <4 x float> %253, i32 3
  store float %265, float* %261
  store float %266, float* %262
  store float %267, float* %263
  store float %268, float* %264
  %269 = getelementptr [4 x float]* %.clip_ptr, i32 0, i32 1
  %270 = getelementptr [4 x float]* %.clip_ptr45, i32 0, i32 1
  %271 = getelementptr [4 x float]* %.clip_ptr46, i32 0, i32 1
  %272 = getelementptr [4 x float]* %.clip_ptr47, i32 0, i32 1
  %273 = extractelement <4 x float> %254, i32 0
  %274 = extractelement <4 x float> %254, i32 1
  %275 = extractelement <4 x float> %254, i32 2
  %276 = extractelement <4 x float> %254, i32 3
  store float %273, float* %269
  store float %274, float* %270
  store float %275, float* %271
  store float %276, float* %272
  %277 = getelementptr [4 x float]* %.clip_ptr, i32 0, i32 2
  %278 = getelementptr [4 x float]* %.clip_ptr45, i32 0, i32 2
  %279 = getelementptr [4 x float]* %.clip_ptr46, i32 0, i32 2
  %280 = getelementptr [4 x float]* %.clip_ptr47, i32 0, i32 2
  %281 = extractelement <4 x float> %255, i32 0
  %282 = extractelement <4 x float> %255, i32 1
  %283 = extractelement <4 x float> %255, i32 2
  %284 = extractelement <4 x float> %255, i32 3
  store float %281, float* %277
  store float %282, float* %278
  store float %283, float* %279
  store float %284, float* %280
  %285 = getelementptr [4 x float]* %.clip_ptr, i32 0, i32 3
  %286 = getelementptr [4 x float]* %.clip_ptr45, i32 0, i32 3
  %287 = getelementptr [4 x float]* %.clip_ptr46, i32 0, i32 3
  %288 = getelementptr [4 x float]* %.clip_ptr47, i32 0, i32 3
  %289 = extractelement <4 x float> %256, i32 0
  %290 = extractelement <4 x float> %256, i32 1
  %291 = extractelement <4 x float> %256, i32 2
  %292 = extractelement <4 x float> %256, i32 3
  store float %289, float* %285
  store float %290, float* %286
  store float %291, float* %287
  store float %292, float* %288
  %293 = load <4 x float>* %output
  %294 = load <4 x float>* %output31
  %295 = load <4 x float>* %output32
  %296 = load <4 x float>* %output33
  %297 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 0
  %298 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 1
  %299 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 2
  %300 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 3
  %.pre_clip_pos_ptr = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %297, i32 0, i32 2
  %.pre_clip_pos_ptr48 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %298, i32 0, i32 2
  %.pre_clip_pos_ptr49 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %299, i32 0, i32 2
  %.pre_clip_pos_ptr50 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %300, i32 0, i32 2
  %301 = getelementptr [4 x float]* %.pre_clip_pos_ptr, i32 0, i32 0
  %302 = getelementptr [4 x float]* %.pre_clip_pos_ptr48, i32 0, i32 0
  %303 = getelementptr [4 x float]* %.pre_clip_pos_ptr49, i32 0, i32 0
  %304 = getelementptr [4 x float]* %.pre_clip_pos_ptr50, i32 0, i32 0
  %305 = extractelement <4 x float> %293, i32 0
  %306 = extractelement <4 x float> %293, i32 1
  %307 = extractelement <4 x float> %293, i32 2
  %308 = extractelement <4 x float> %293, i32 3
  store float %305, float* %301
  store float %306, float* %302
  store float %307, float* %303
  store float %308, float* %304
  %309 = getelementptr [4 x float]* %.pre_clip_pos_ptr, i32 0, i32 1
  %310 = getelementptr [4 x float]* %.pre_clip_pos_ptr48, i32 0, i32 1
  %311 = getelementptr [4 x float]* %.pre_clip_pos_ptr49, i32 0, i32 1
  %312 = getelementptr [4 x float]* %.pre_clip_pos_ptr50, i32 0, i32 1
  %313 = extractelement <4 x float> %294, i32 0
  %314 = extractelement <4 x float> %294, i32 1
  %315 = extractelement <4 x float> %294, i32 2
  %316 = extractelement <4 x float> %294, i32 3
  store float %313, float* %309
  store float %314, float* %310
  store float %315, float* %311
  store float %316, float* %312
  %317 = getelementptr [4 x float]* %.pre_clip_pos_ptr, i32 0, i32 2
  %318 = getelementptr [4 x float]* %.pre_clip_pos_ptr48, i32 0, i32 2
  %319 = getelementptr [4 x float]* %.pre_clip_pos_ptr49, i32 0, i32 2
  %320 = getelementptr [4 x float]* %.pre_clip_pos_ptr50, i32 0, i32 2
  %321 = extractelement <4 x float> %295, i32 0
  %322 = extractelement <4 x float> %295, i32 1
  %323 = extractelement <4 x float> %295, i32 2
  %324 = extractelement <4 x float> %295, i32 3
  store float %321, float* %317
  store float %322, float* %318
  store float %323, float* %319
  store float %324, float* %320
  %325 = getelementptr [4 x float]* %.pre_clip_pos_ptr, i32 0, i32 3
  %326 = getelementptr [4 x float]* %.pre_clip_pos_ptr48, i32 0, i32 3
  %327 = getelementptr [4 x float]* %.pre_clip_pos_ptr49, i32 0, i32 3
  %328 = getelementptr [4 x float]* %.pre_clip_pos_ptr50, i32 0, i32 3
  %329 = extractelement <4 x float> %296, i32 0
  %330 = extractelement <4 x float> %296, i32 1
  %331 = extractelement <4 x float> %296, i32 2
  %332 = extractelement <4 x float> %296, i32 3
  store float %329, float* %325
  store float %330, float* %326
  store float %331, float* %327
  store float %332, float* %328
  %333 = load <4 x float>* %output
  %334 = load <4 x float>* %output31
  %335 = load <4 x float>* %output32
  %336 = load <4 x float>* %output33
  %337 = fcmp ugt <4 x float> %333, %336
  %338 = sext <4 x i1> %337 to <4 x i32>
  %339 = and <4 x i32> %338, <i32 1, i32 1, i32 1, i32 1>
  %340 = fadd <4 x float> %333, %336
  %341 = fcmp ugt <4 x float> zeroinitializer, %340
  %342 = sext <4 x i1> %341 to <4 x i32>
  %343 = and <4 x i32> %342, <i32 2, i32 2, i32 2, i32 2>
  %344 = or <4 x i32> %339, %343
  %345 = fcmp ugt <4 x float> %334, %336
  %346 = sext <4 x i1> %345 to <4 x i32>
  %347 = and <4 x i32> %346, <i32 4, i32 4, i32 4, i32 4>
  %348 = or <4 x i32> %344, %347
  %349 = fadd <4 x float> %334, %336
  %350 = fcmp ugt <4 x float> zeroinitializer, %349
  %351 = sext <4 x i1> %350 to <4 x i32>
  %352 = and <4 x i32> %351, <i32 8, i32 8, i32 8, i32 8>
  %353 = or <4 x i32> %348, %352
  %354 = fadd <4 x float> %335, %336
  %355 = fcmp ugt <4 x float> zeroinitializer, %354
  %356 = sext <4 x i1> %355 to <4 x i32>
  %357 = and <4 x i32> %356, <i32 16, i32 16, i32 16, i32 16>
  %358 = or <4 x i32> %353, %357
  %359 = fcmp ugt <4 x float> %335, %336
  %360 = sext <4 x i1> %359 to <4 x i32>
  %361 = and <4 x i32> %360, <i32 32, i32 32, i32 32, i32 32>
  %362 = or <4 x i32> %358, %361
  %363 = load i32* %0
  %364 = extractelement <4 x i32> %362, i32 0
  %365 = or i32 %363, %364
  %366 = extractelement <4 x i32> %362, i32 1
  %367 = or i32 %365, %366
  %368 = extractelement <4 x i32> %362, i32 2
  %369 = or i32 %367, %368
  %370 = extractelement <4 x i32> %362, i32 3
  %371 = or i32 %369, %370
  store i32 %371, i32* %0
  %372 = load <4 x float>* %output33
  %context.viewport_ptr = getelementptr { float*, float*, [14 x [4 x float]]*, float*, [16 x { i32, i32, i32, i32, i32, [16 x i32], [16 x i32], [16 x i8*], float, float, float, [4 x float] }] }* %context, i32 0, i32 3
  %context.viewport = load float** %context.viewport_ptr
  %373 = fdiv <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %372
  store <4 x float> %373, <4 x float>* %output33
  %374 = load <4 x float>* %output
  %375 = getelementptr float* %context.viewport, i32 0
  %376 = getelementptr float* %context.viewport, i32 4
  %377 = load float* %375
  %378 = insertelement <4 x float> undef, float %377, i32 0
  %379 = insertelement <4 x float> %378, float %377, i32 1
  %380 = insertelement <4 x float> %379, float %377, i32 2
  %scale = insertelement <4 x float> %380, float %377, i32 3
  %381 = load float* %376
  %382 = insertelement <4 x float> undef, float %381, i32 0
  %383 = insertelement <4 x float> %382, float %381, i32 1
  %384 = insertelement <4 x float> %383, float %381, i32 2
  %trans = insertelement <4 x float> %384, float %381, i32 3
  %385 = fmul <4 x float> %374, %373
  %386 = fmul <4 x float> %385, %scale
  %387 = fadd <4 x float> %386, %trans
  store <4 x float> %387, <4 x float>* %output
  %388 = load <4 x float>* %output31
  %389 = getelementptr float* %context.viewport, i32 1
  %390 = getelementptr float* %context.viewport, i32 5
  %391 = load float* %389
  %392 = insertelement <4 x float> undef, float %391, i32 0
  %393 = insertelement <4 x float> %392, float %391, i32 1
  %394 = insertelement <4 x float> %393, float %391, i32 2
  %scale51 = insertelement <4 x float> %394, float %391, i32 3
  %395 = load float* %390
  %396 = insertelement <4 x float> undef, float %395, i32 0
  %397 = insertelement <4 x float> %396, float %395, i32 1
  %398 = insertelement <4 x float> %397, float %395, i32 2
  %trans52 = insertelement <4 x float> %398, float %395, i32 3
  %399 = fmul <4 x float> %388, %373
  %400 = fmul <4 x float> %399, %scale51
  %401 = fadd <4 x float> %400, %trans52
  store <4 x float> %401, <4 x float>* %output31
  %402 = load <4 x float>* %output32
  %403 = getelementptr float* %context.viewport, i32 2
  %404 = getelementptr float* %context.viewport, i32 6
  %405 = load float* %403
  %406 = insertelement <4 x float> undef, float %405, i32 0
  %407 = insertelement <4 x float> %406, float %405, i32 1
  %408 = insertelement <4 x float> %407, float %405, i32 2
  %scale53 = insertelement <4 x float> %408, float %405, i32 3
  %409 = load float* %404
  %410 = insertelement <4 x float> undef, float %409, i32 0
  %411 = insertelement <4 x float> %410, float %409, i32 1
  %412 = insertelement <4 x float> %411, float %409, i32 2
  %trans54 = insertelement <4 x float> %412, float %409, i32 3
  %413 = fmul <4 x float> %402, %373
  %414 = fmul <4 x float> %413, %scale53
  %415 = fadd <4 x float> %414, %trans54
  store <4 x float> %415, <4 x float>* %output32
  %output0.x = load <4 x float>* %output
  %output0.y = load <4 x float>* %output31
  %output0.z = load <4 x float>* %output32
  %output0.w = load <4 x float>* %output33
  %416 = extractelement <4 x float> %output0.x, i32 0
  %417 = insertelement <4 x float> zeroinitializer, float %416, i32 0
  %418 = extractelement <4 x float> %output0.x, i32 1
  %419 = insertelement <4 x float> zeroinitializer, float %418, i32 0
  %420 = extractelement <4 x float> %output0.x, i32 2
  %421 = insertelement <4 x float> zeroinitializer, float %420, i32 0
  %422 = extractelement <4 x float> %output0.x, i32 3
  %423 = insertelement <4 x float> zeroinitializer, float %422, i32 0
  %424 = extractelement <4 x float> %output0.y, i32 0
  %425 = insertelement <4 x float> %417, float %424, i32 1
  %426 = extractelement <4 x float> %output0.y, i32 1
  %427 = insertelement <4 x float> %419, float %426, i32 1
  %428 = extractelement <4 x float> %output0.y, i32 2
  %429 = insertelement <4 x float> %421, float %428, i32 1
  %430 = extractelement <4 x float> %output0.y, i32 3
  %431 = insertelement <4 x float> %423, float %430, i32 1
  %432 = extractelement <4 x float> %output0.z, i32 0
  %433 = insertelement <4 x float> %425, float %432, i32 2
  %434 = extractelement <4 x float> %output0.z, i32 1
  %435 = insertelement <4 x float> %427, float %434, i32 2
  %436 = extractelement <4 x float> %output0.z, i32 2
  %437 = insertelement <4 x float> %429, float %436, i32 2
  %438 = extractelement <4 x float> %output0.z, i32 3
  %439 = insertelement <4 x float> %431, float %438, i32 2
  %440 = extractelement <4 x float> %output0.w, i32 0
  %441 = insertelement <4 x float> %433, float %440, i32 3
  %442 = extractelement <4 x float> %output0.w, i32 1
  %443 = insertelement <4 x float> %435, float %442, i32 3
  %444 = extractelement <4 x float> %output0.w, i32 2
  %445 = insertelement <4 x float> %437, float %444, i32 3
  %446 = extractelement <4 x float> %output0.w, i32 3
  %447 = insertelement <4 x float> %439, float %446, i32 3
  %448 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 0
  %449 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 1
  %450 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 2
  %451 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 3
  %452 = extractelement <4 x i32> %362, i32 0
  %453 = extractelement <4 x i32> %362, i32 1
  %454 = extractelement <4 x i32> %362, i32 2
  %455 = extractelement <4 x i32> %362, i32 3
  %.id_ptr = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %448, i32 0, i32 0
  %.data_ptr = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %448, i32 0, i32 3
  %456 = or i32 -49152, %452
  store i32 %456, i32* %.id_ptr
  %457 = getelementptr [3 x [4 x float]]* %.data_ptr, i32 0, i32 0, i32 0
  %458 = extractelement <4 x float> %441, i32 0
  %459 = extractelement <4 x float> %441, i32 1
  %460 = extractelement <4 x float> %441, i32 2
  %461 = extractelement <4 x float> %441, i32 3
  %462 = getelementptr float* %457, i32 0
  %463 = getelementptr float* %457, i32 1
  %464 = getelementptr float* %457, i32 2
  %465 = getelementptr float* %457, i32 3
  store float %458, float* %462
  store float %459, float* %463
  store float %460, float* %464
  store float %461, float* %465
  %.id_ptr55 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %449, i32 0, i32 0
  %.data_ptr56 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %449, i32 0, i32 3
  %466 = or i32 -49152, %453
  store i32 %466, i32* %.id_ptr55
  %467 = getelementptr [3 x [4 x float]]* %.data_ptr56, i32 0, i32 0, i32 0
  %468 = extractelement <4 x float> %443, i32 0
  %469 = extractelement <4 x float> %443, i32 1
  %470 = extractelement <4 x float> %443, i32 2
  %471 = extractelement <4 x float> %443, i32 3
  %472 = getelementptr float* %467, i32 0
  %473 = getelementptr float* %467, i32 1
  %474 = getelementptr float* %467, i32 2
  %475 = getelementptr float* %467, i32 3
  store float %468, float* %472
  store float %469, float* %473
  store float %470, float* %474
  store float %471, float* %475
  %.id_ptr57 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %450, i32 0, i32 0
  %.data_ptr58 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %450, i32 0, i32 3
  %476 = or i32 -49152, %454
  store i32 %476, i32* %.id_ptr57
  %477 = getelementptr [3 x [4 x float]]* %.data_ptr58, i32 0, i32 0, i32 0
  %478 = extractelement <4 x float> %445, i32 0
  %479 = extractelement <4 x float> %445, i32 1
  %480 = extractelement <4 x float> %445, i32 2
  %481 = extractelement <4 x float> %445, i32 3
  %482 = getelementptr float* %477, i32 0
  %483 = getelementptr float* %477, i32 1
  %484 = getelementptr float* %477, i32 2
  %485 = getelementptr float* %477, i32 3
  store float %478, float* %482
  store float %479, float* %483
  store float %480, float* %484
  store float %481, float* %485
  %.id_ptr59 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %451, i32 0, i32 0
  %.data_ptr60 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %451, i32 0, i32 3
  %486 = or i32 -49152, %455
  store i32 %486, i32* %.id_ptr59
  %487 = getelementptr [3 x [4 x float]]* %.data_ptr60, i32 0, i32 0, i32 0
  %488 = extractelement <4 x float> %447, i32 0
  %489 = extractelement <4 x float> %447, i32 1
  %490 = extractelement <4 x float> %447, i32 2
  %491 = extractelement <4 x float> %447, i32 3
  %492 = getelementptr float* %487, i32 0
  %493 = getelementptr float* %487, i32 1
  %494 = getelementptr float* %487, i32 2
  %495 = getelementptr float* %487, i32 3
  store float %488, float* %492
  store float %489, float* %493
  store float %490, float* %494
  store float %491, float* %495
  %output1.x = load <4 x float>* %output34
  %output1.y = load <4 x float>* %output35
  %output1.z = load <4 x float>* %output36
  %output1.w = load <4 x float>* %output37
  %496 = extractelement <4 x float> %output1.x, i32 0
  %497 = insertelement <4 x float> zeroinitializer, float %496, i32 0
  %498 = extractelement <4 x float> %output1.x, i32 1
  %499 = insertelement <4 x float> zeroinitializer, float %498, i32 0
  %500 = extractelement <4 x float> %output1.x, i32 2
  %501 = insertelement <4 x float> zeroinitializer, float %500, i32 0
  %502 = extractelement <4 x float> %output1.x, i32 3
  %503 = insertelement <4 x float> zeroinitializer, float %502, i32 0
  %504 = extractelement <4 x float> %output1.y, i32 0
  %505 = insertelement <4 x float> %497, float %504, i32 1
  %506 = extractelement <4 x float> %output1.y, i32 1
  %507 = insertelement <4 x float> %499, float %506, i32 1
  %508 = extractelement <4 x float> %output1.y, i32 2
  %509 = insertelement <4 x float> %501, float %508, i32 1
  %510 = extractelement <4 x float> %output1.y, i32 3
  %511 = insertelement <4 x float> %503, float %510, i32 1
  %512 = extractelement <4 x float> %output1.z, i32 0
  %513 = insertelement <4 x float> %505, float %512, i32 2
  %514 = extractelement <4 x float> %output1.z, i32 1
  %515 = insertelement <4 x float> %507, float %514, i32 2
  %516 = extractelement <4 x float> %output1.z, i32 2
  %517 = insertelement <4 x float> %509, float %516, i32 2
  %518 = extractelement <4 x float> %output1.z, i32 3
  %519 = insertelement <4 x float> %511, float %518, i32 2
  %520 = extractelement <4 x float> %output1.w, i32 0
  %521 = insertelement <4 x float> %513, float %520, i32 3
  %522 = extractelement <4 x float> %output1.w, i32 1
  %523 = insertelement <4 x float> %515, float %522, i32 3
  %524 = extractelement <4 x float> %output1.w, i32 2
  %525 = insertelement <4 x float> %517, float %524, i32 3
  %526 = extractelement <4 x float> %output1.w, i32 3
  %527 = insertelement <4 x float> %519, float %526, i32 3
  %528 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 0
  %529 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 1
  %530 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 2
  %531 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %4, i32 3
  %532 = extractelement <4 x i32> %362, i32 0
  %533 = extractelement <4 x i32> %362, i32 1
  %534 = extractelement <4 x i32> %362, i32 2
  %535 = extractelement <4 x i32> %362, i32 3
  %.id_ptr61 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %528, i32 0, i32 0
  %.data_ptr62 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %528, i32 0, i32 3
  %536 = or i32 -49152, %532
  store i32 %536, i32* %.id_ptr61
  %537 = getelementptr [3 x [4 x float]]* %.data_ptr62, i32 0, i32 1, i32 0
  %538 = extractelement <4 x float> %521, i32 0
  %539 = extractelement <4 x float> %521, i32 1
  %540 = extractelement <4 x float> %521, i32 2
  %541 = extractelement <4 x float> %521, i32 3
  %542 = getelementptr float* %537, i32 0
  %543 = getelementptr float* %537, i32 1
  %544 = getelementptr float* %537, i32 2
  %545 = getelementptr float* %537, i32 3
  store float %538, float* %542
  store float %539, float* %543
  store float %540, float* %544
  store float %541, float* %545
  %.id_ptr63 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %529, i32 0, i32 0
  %.data_ptr64 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %529, i32 0, i32 3
  %546 = or i32 -49152, %533
  store i32 %546, i32* %.id_ptr63
  %547 = getelementptr [3 x [4 x float]]* %.data_ptr64, i32 0, i32 1, i32 0
  %548 = extractelement <4 x float> %523, i32 0
  %549 = extractelement <4 x float> %523, i32 1
  %550 = extractelement <4 x float> %523, i32 2
  %551 = extractelement <4 x float> %523, i32 3
  %552 = getelementptr float* %547, i32 0
  %553 = getelementptr float* %547, i32 1
  %554 = getelementptr float* %547, i32 2
  %555 = getelementptr float* %547, i32 3
  store float %548, float* %552
  store float %549, float* %553
  store float %550, float* %554
  store float %551, float* %555
  %.id_ptr65 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %530, i32 0, i32 0
  %.data_ptr66 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %530, i32 0, i32 3
  %556 = or i32 -49152, %534
  store i32 %556, i32* %.id_ptr65
  %557 = getelementptr [3 x [4 x float]]* %.data_ptr66, i32 0, i32 1, i32 0
  %558 = extractelement <4 x float> %525, i32 0
  %559 = extractelement <4 x float> %525, i32 1
  %560 = extractelement <4 x float> %525, i32 2
  %561 = extractelement <4 x float> %525, i32 3
  %562 = getelementptr float* %557, i32 0
  %563 = getelementptr float* %557, i32 1
  %564 = getelementptr float* %557, i32 2
  %565 = getelementptr float* %557, i32 3
  store float %558, float* %562
  store float %559, float* %563
  store float %560, float* %564
  store float %561, float* %565
  %.id_ptr67 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %531, i32 0, i32 0
  %.data_ptr68 = getelementptr { i32, [4 x float], [4 x float], [3 x [4 x float]] }* %531, i32 0, i32 3
  %566 = or i32 -49152, %535
  store i32 %566, i32* %.id_ptr67
  %567 = getelementptr [3 x [4 x float]]* %.data_ptr68, i32 0, i32 1, i32 0
  %568 = extractelement <4 x float> %527, i32 0
  %569 = extractelement <4 x float> %527, i32 1
  %570 = extractelement <4 x float> %527, i32 2
  %571 = extractelement <4 x float> %527, i32 3
  %572 = getelementptr float* %567, i32 0
  %573 = getelementptr float* %567, i32 1
  %574 = getelementptr float* %567, i32 2
  %575 = getelementptr float* %567, i32 3
  store float %568, float* %572
  store float %569, float* %573
  store float %570, float* %574
  store float %571, float* %575
  %576 = add i32 %2, 4
  store i32 %576, i32* %loop_counter
  %577 = icmp uge i32 %576, %1
  br i1 %577, label %loop_end, label %loop_begin

loop_end:                                         ; preds = %loop_begin
  %578 = load i32* %loop_counter
  %579 = load i32* %0
  ret i32 %579
}

src/gallium/auxiliary/draw/draw_llvm.c:1475:draw_llvm_generate: Assertion `0' failed.



(gdb) bt
#0  0x00007fb8b5c0203f in _debug_assert_fail (expr=0x7fb8b65a343a "0", 
    file=0x7fb8b65a2700 "src/gallium/auxiliary/draw/draw_llvm.c", line=1475, 
    function=0x7fb8b65a3470 "draw_llvm_generate") at src/gallium/auxiliary/util/u_debug.c:278
#1  0x00007fb8b5c8dc6b in draw_llvm_generate (llvm=0x9dac60, variant=0xb7d5b0, elts=0 '\000')
    at src/gallium/auxiliary/draw/draw_llvm.c:1475
#2  0x00007fb8b5c8a418 in draw_llvm_create_variant (llvm=0x9dac60, num_inputs=3, key=0x7fffc1e9c190)
    at src/gallium/auxiliary/draw/draw_llvm.c:444
#3  0x00007fb8b5c9081e in llvm_middle_end_prepare (middle=0x9e5cb0, in_prim=7, opt=3, max_vertices=0x9e2eb8)
    at src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c:162
#4  0x00007fb8b5bdf6be in vsplit_prepare (frontend=0x9e2e80, in_prim=7, middle=0x9e5cb0, opt=3)
    at src/gallium/auxiliary/draw/draw_pt_vsplit.c:175
#5  0x00007fb8b5bd30bd in draw_pt_arrays (draw=0x9d9b70, prim=7, start=0, count=4)
    at src/gallium/auxiliary/draw/draw_pt.c:134
#6  0x00007fb8b5bd3d64 in draw_vbo (draw=0x9d9b70, info=0x7fffc1e9c620) at src/gallium/auxiliary/draw/draw_pt.c:526
#7  0x00007fb8b58d19d9 in llvmpipe_draw_vbo (pipe=0x991cf0, info=0x7fffc1e9c620)
    at src/gallium/drivers/llvmpipe/lp_draw_arrays.c:92
#8  0x00007fb8b5bbd27b in cso_draw_vbo (cso=0xac8370, info=0x7fffc1e9c620)
    at src/gallium/auxiliary/cso_cache/cso_context.c:1385
#9  0x00007fb8b5a56661 in st_draw_vbo (ctx=0xa3c370, prims=0x7fffc1e9c6c0, nr_prims=1, ib=0x0, 
    index_bounds_valid=1 '\001', min_index=0, max_index=3, tfb_vertcount=0x0) at src/mesa/state_tracker/st_draw.c:265
#10 0x00007fb8b5af6098 in vbo_draw_arrays (ctx=0xa3c370, mode=7, start=0, count=4, numInstances=1, baseInstance=0)
    at src/mesa/vbo/vbo_exec_array.c:645
#11 0x00007fb8b5af61de in vbo_exec_DrawArrays (mode=7, start=0, count=4) at src/mesa/vbo/vbo_exec_array.c:677
#12 0x00007fb8b7fba5b4 in stub_glDrawArrays (mode=7, first=0, count=4)
    at piglit/tests/util/generated_dispatch.c:5061
#13 0x00007fb8b8024944 in piglit_draw_rect (x=10, y=10, w=10, h=10) at piglit/tests/util/piglit-util-gl.c:813
#14 0x00000000004034cc in piglit_display () at piglit/tests/shaders/shader_runner.c:1164
#15 0x00007fb8b7fb3f4d in display () at piglit/tests/util/piglit-framework-glut.c:53
#16 0x00007fb8b795e220 in ?? () from /usr/lib/libglut.so.3
#17 0x00007fb8b7961939 in fgEnumWindows () from /usr/lib/libglut.so.3
#18 0x00007fb8b795e65a in glutMainLoopEvent () from /usr/lib/libglut.so.3
#19 0x00007fb8b795ef65 in glutMainLoop () from /usr/lib/libglut.so.3
#20 0x00007fb8b7fb4001 in piglit_framework_glut_run (info=0x7fffc1e9ce50)
    at piglit/tests/util/piglit-framework-glut.c:139
#21 0x00007fb8b7fb350d in piglit_gl_test_run (argc=2, argv=0x7fffc1e9cf68, info=0x7fffc1e9ce50)
    at piglit/tests/util/piglit-framework.c:138
#22 0x000000000040309f in main (argc=2, argv=0x7fffc1e9cf68) at piglit/tests/shaders/shader_runner.c:42
(gdb) frame 1
#1  0x00007fb8b5c8dc6b in draw_llvm_generate (llvm=0x9dac60, variant=0xb7d5b0, elts=0 '\000')
    at src/gallium/auxiliary/draw/draw_llvm.c:1475
1475	      assert(0);
(gdb) l
1470	    * Translate the LLVM IR into machine code.
1471	    */
1472	#ifdef DEBUG
1473	   if (LLVMVerifyFunction(variant_func, LLVMPrintMessageAction)) {
1474	      lp_debug_dump_value(variant_func);
1475	      assert(0);
1476	   }
1477	#endif
1478	
1479	   LLVMRunFunctionPassManager(gallivm->passmgr, variant_func);


46931ecf480e1d231bb6c2236d91b5390f2465ac is the first bad commit
commit 46931ecf480e1d231bb6c2236d91b5390f2465ac
Author: Olivier Galibert <galibert@pobox.com>
Date:   Tue Jun 19 20:51:20 2012 +0200

    llvmpipe: Simplify and fix system variables fetch.
    
    The system array values concept doesn't really because it expects the
    system values to be fixed per call, which is wrong for gl_VertexID and
    iffy for gl_SampleID.  So this patch does two things:
    
    - kill the array, have emit_fetch_system_value directly pick the
      values it needs (only gl_InstanceID for now, as the previous code)
    
    - correctly handle the expected type in emit_fetch_system_value
    
    Signed-off-by: Olivier Galibert <galibert@pobox.com>
    Reviewed-by: Brian Paul <brianp@vmware.com>

:040000 040000 fb5b3d37d3854ca91661384af17bfebac8859a7f 8eef0cdf4910309bba3b327d06e80a096dc72b20 M	src
bisect run success
Comment 1 Olivier Galibert 2012-06-24 23:29:14 UTC
Argh.  That's fixed with a MESA_GLSL_VERSION_OVERRIDE=130.  So that's going to go away as soon as we dare switching that in lp_screen.c.

Since ARB_draw_instanced requires integer support (as in "EXT_gpu_shader4 or NV_vertex_program4 or OpenGL 3.0 is required."), it shouldn't be activated in the first place if integers aren't active.  Gonna send a patch to fix that, which will hopefully be refused and a version tick will be done instead :-)
Comment 2 Olivier Galibert 2012-06-24 23:39:46 UTC
Feature-dropping bug sent to the list...
Comment 3 Vinson Lee 2012-07-01 14:29:46 UTC
mesa: ca8fa0230896727af81ee54197f6e2233d49481d

The crash still occurs.
Comment 4 Jose Fonseca 2012-07-13 12:02:41 UTC
Should be fixed with b3ba0a7afa6311e12852fb1373452e480f89ea96 now.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.