[Mesa-dev] [Bug 51366] New: [llvmpipe] src/gallium/auxiliary/draw/draw_llvm.c:1475:draw_llvm_generate: Assertion `0' failed.

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Sat Jun 23 13:25:04 PDT 2012


https://bugs.freedesktop.org/show_bug.cgi?id=51366

             Bug #: 51366
           Summary: [llvmpipe]
                    src/gallium/auxiliary/draw/draw_llvm.c:1475:draw_llvm_
                    generate: Assertion `0' failed.
    Classification: Unclassified
           Product: Mesa
           Version: git
          Platform: x86-64 (AMD64)
        OS/Version: Linux (All)
            Status: NEW
          Severity: critical
          Priority: medium
         Component: Other
        AssignedTo: mesa-dev at lists.freedesktop.org
        ReportedBy: vlee at freedesktop.org
                CC: galibert at pobox.com


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 at 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 at pobox.com>
    Reviewed-by: Brian Paul <brianp at vmware.com>

:040000 040000 fb5b3d37d3854ca91661384af17bfebac8859a7f
8eef0cdf4910309bba3b327d06e80a096dc72b20 M    src
bisect run success

-- 
Configure bugmail: https://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.


More information about the mesa-dev mailing list