[llvm] r355981 - IR: Add immarg attribute

Michel Dänzer via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 14 10:15:45 PDT 2019


On 2019-03-14 2:28 p.m., Matt Arsenault wrote:
>> On Mar 14, 2019, at 7:01 AM, Michel Dänzer via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>> On 2019-03-12 10:02 p.m., Matt Arsenault via llvm-commits wrote:
>>> Author: arsenm
>>> Date: Tue Mar 12 14:02:54 2019
>>> New Revision: 355981
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=355981&view=rev
>>> Log:
>>> IR: Add immarg attribute
>>
>> This broke a couple of piglit tests for me with radeonsi on Bonaire,
>> e.g.:
> 
> Can you post the IR?

I'm attaching the last IR dumped with
R600_DEBUG=vs,ps,gs,tcs,tes,cs,mono,preoptir before the assertion
failure. I don't hit the assertion failure feeding this to llc though.


-- 
Earthling Michel Dänzer               |              https://www.amd.com
Libre software enthusiast             |             Mesa and X developer
-------------- next part --------------
; ModuleID = 'mesa-shader'
source_filename = "mesa-shader"
target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5"
target triple = "amdgcn--"

; Function Attrs: alwaysinline
define private amdgpu_hs <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> @main([0 x <4 x i32>] addrspace(6)* inreg noalias dereferenceable(18446744073709551615), [0 x <8 x i32>] addrspace(6)* inreg noalias dereferenceable(18446744073709551615), [0 x <4 x i32>] addrspace(6)* inreg noalias dereferenceable(18446744073709551615), [0 x <8 x i32>] addrspace(6)* inreg noalias dereferenceable(18446744073709551615), i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32, i32) #0 {
main_body:
  %12 = alloca float, addrspace(5)
  %13 = alloca float, addrspace(5)
  %14 = alloca float, addrspace(5)
  %15 = alloca float, addrspace(5)
  %16 = alloca float, addrspace(5)
  %17 = alloca float, addrspace(5)
  %18 = alloca float, addrspace(5)
  %19 = alloca float, addrspace(5)
  %20 = alloca float, addrspace(5)
  %21 = alloca float, addrspace(5)
  %22 = alloca float, addrspace(5)
  %23 = alloca float, addrspace(5)
  %24 = alloca float, addrspace(5)
  %25 = alloca float, addrspace(5)
  %26 = alloca float, addrspace(5)
  %27 = alloca float, addrspace(5)
  %28 = alloca float, addrspace(5)
  %29 = alloca float, addrspace(5)
  %30 = alloca float, addrspace(5)
  %31 = alloca float, addrspace(5)
  %32 = alloca float, addrspace(5)
  %33 = alloca float, addrspace(5)
  %34 = alloca float, addrspace(5)
  %35 = alloca float, addrspace(5)
  %36 = alloca float, addrspace(5)
  %37 = alloca float, addrspace(5)
  %38 = alloca float, addrspace(5)
  %39 = alloca float, addrspace(5)
  %40 = alloca float, addrspace(5)
  %41 = alloca float, addrspace(5)
  %42 = alloca float, addrspace(5)
  %43 = alloca float, addrspace(5)
  %44 = alloca float, addrspace(5)
  %45 = alloca float, addrspace(5)
  %46 = alloca float, addrspace(5)
  %47 = alloca float, addrspace(5)
  %48 = alloca float, addrspace(5)
  %49 = alloca float, addrspace(5)
  %50 = alloca float, addrspace(5)
  %51 = alloca float, addrspace(5)
  %52 = alloca float, addrspace(5)
  %53 = alloca float, addrspace(5)
  %54 = alloca float, addrspace(5)
  %55 = alloca float, addrspace(5)
  %56 = alloca float, addrspace(5)
  %57 = alloca float, addrspace(5)
  %58 = alloca float, addrspace(5)
  %59 = alloca float, addrspace(5)
  %60 = alloca float, addrspace(5)
  %61 = alloca float, addrspace(5)
  %62 = alloca float, addrspace(5)
  %63 = alloca float, addrspace(5)
  %64 = alloca float, addrspace(5)
  %65 = alloca float, addrspace(5)
  %66 = alloca float, addrspace(5)
  %67 = alloca float, addrspace(5)
  %68 = lshr i32 %11, 8
  %69 = and i32 %68, 31
  %70 = icmp eq i32 %69, 0
  %71 = sext i1 %70 to i32
  %72 = bitcast i32 %71 to float
  store float %72, float addrspace(5)* %47
  %73 = load float, float addrspace(5)* %47
  %74 = bitcast float %73 to i32
  %75 = icmp ne i32 %74, 0
  br i1 %75, label %if1, label %endif8

if1:                                              ; preds = %main_body
  %76 = lshr i32 %5, 16
  %77 = mul i32 %76, 4
  %78 = and i32 %11, 255
  %79 = mul i32 56, %78
  %80 = add i32 %79, %77
  %81 = add i32 %80, 4
  %82 = and i32 %6, -524288
  %83 = insertelement <4 x i32> undef, i32 %82, i32 0
  %84 = insertelement <4 x i32> %83, i32 0, i32 1
  %85 = insertelement <4 x i32> %84, i32 -1, i32 2
  %86 = insertelement <4 x i32> %85, i32 163756, i32 3
  %87 = and i32 %11, 255
  %88 = and i32 %4, 63
  %89 = mul i32 4, %88
  %90 = mul i32 1, %88
  %91 = add i32 %90, %87
  %92 = mul i32 %91, 16
  %93 = lshr i32 %4, 12
  %94 = add i32 %92, %93
  %95 = add i32 %81, 0
  %96 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %95
  store i32 1065353216, i32 addrspace(3)* %96
  %97 = lshr i32 %5, 16
  %98 = mul i32 %97, 4
  %99 = and i32 %11, 255
  %100 = mul i32 56, %99
  %101 = add i32 %100, %98
  %102 = add i32 %101, 4
  %103 = and i32 %6, -524288
  %104 = insertelement <4 x i32> undef, i32 %103, i32 0
  %105 = insertelement <4 x i32> %104, i32 0, i32 1
  %106 = insertelement <4 x i32> %105, i32 -1, i32 2
  %107 = insertelement <4 x i32> %106, i32 163756, i32 3
  %108 = and i32 %11, 255
  %109 = and i32 %4, 63
  %110 = mul i32 4, %109
  %111 = mul i32 1, %109
  %112 = add i32 %111, %108
  %113 = mul i32 %112, 16
  %114 = lshr i32 %4, 12
  %115 = add i32 %113, %114
  %116 = add i32 %102, 1
  %117 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %116
  store i32 1065353216, i32 addrspace(3)* %117
  %118 = lshr i32 %5, 16
  %119 = mul i32 %118, 4
  %120 = and i32 %11, 255
  %121 = mul i32 56, %120
  %122 = add i32 %121, %119
  %123 = add i32 %122, 0
  %124 = and i32 %6, -524288
  %125 = insertelement <4 x i32> undef, i32 %124, i32 0
  %126 = insertelement <4 x i32> %125, i32 0, i32 1
  %127 = insertelement <4 x i32> %126, i32 -1, i32 2
  %128 = insertelement <4 x i32> %127, i32 163756, i32 3
  %129 = and i32 %11, 255
  %130 = and i32 %4, 63
  %131 = mul i32 4, %130
  %132 = mul i32 0, %130
  %133 = add i32 %132, %129
  %134 = mul i32 %133, 16
  %135 = lshr i32 %4, 12
  %136 = add i32 %134, %135
  %137 = add i32 %123, 0
  %138 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %137
  store i32 1065353216, i32 addrspace(3)* %138
  %139 = lshr i32 %5, 16
  %140 = mul i32 %139, 4
  %141 = and i32 %11, 255
  %142 = mul i32 56, %141
  %143 = add i32 %142, %140
  %144 = add i32 %143, 0
  %145 = and i32 %6, -524288
  %146 = insertelement <4 x i32> undef, i32 %145, i32 0
  %147 = insertelement <4 x i32> %146, i32 0, i32 1
  %148 = insertelement <4 x i32> %147, i32 -1, i32 2
  %149 = insertelement <4 x i32> %148, i32 163756, i32 3
  %150 = and i32 %11, 255
  %151 = and i32 %4, 63
  %152 = mul i32 4, %151
  %153 = mul i32 0, %151
  %154 = add i32 %153, %150
  %155 = mul i32 %154, 16
  %156 = lshr i32 %4, 12
  %157 = add i32 %155, %156
  %158 = add i32 %144, 1
  %159 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %158
  store i32 1065353216, i32 addrspace(3)* %159
  %160 = lshr i32 %5, 16
  %161 = mul i32 %160, 4
  %162 = and i32 %11, 255
  %163 = mul i32 56, %162
  %164 = add i32 %163, %161
  %165 = add i32 %164, 0
  %166 = and i32 %6, -524288
  %167 = insertelement <4 x i32> undef, i32 %166, i32 0
  %168 = insertelement <4 x i32> %167, i32 0, i32 1
  %169 = insertelement <4 x i32> %168, i32 -1, i32 2
  %170 = insertelement <4 x i32> %169, i32 163756, i32 3
  %171 = and i32 %11, 255
  %172 = and i32 %4, 63
  %173 = mul i32 4, %172
  %174 = mul i32 0, %172
  %175 = add i32 %174, %171
  %176 = mul i32 %175, 16
  %177 = lshr i32 %4, 12
  %178 = add i32 %176, %177
  %179 = add i32 %165, 2
  %180 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %179
  store i32 1065353216, i32 addrspace(3)* %180
  %181 = lshr i32 %5, 16
  %182 = mul i32 %181, 4
  %183 = and i32 %11, 255
  %184 = mul i32 56, %183
  %185 = add i32 %184, %182
  %186 = add i32 %185, 0
  %187 = and i32 %6, -524288
  %188 = insertelement <4 x i32> undef, i32 %187, i32 0
  %189 = insertelement <4 x i32> %188, i32 0, i32 1
  %190 = insertelement <4 x i32> %189, i32 -1, i32 2
  %191 = insertelement <4 x i32> %190, i32 163756, i32 3
  %192 = and i32 %11, 255
  %193 = and i32 %4, 63
  %194 = mul i32 4, %193
  %195 = mul i32 0, %193
  %196 = add i32 %195, %192
  %197 = mul i32 %196, 16
  %198 = lshr i32 %4, 12
  %199 = add i32 %197, %198
  %200 = add i32 %186, 3
  %201 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %200
  store i32 1065353216, i32 addrspace(3)* %201
  br label %endif8

endif8:                                           ; preds = %if1, %main_body
  %202 = lshr i32 %7, 24
  %203 = lshr i32 %7, 8
  %204 = and i32 %203, 8191
  %205 = and i32 %11, 255
  %206 = mul i32 %204, %205
  %207 = mul i32 %69, 1
  %208 = add i32 %207, 0
  %209 = mul i32 %208, %202
  %210 = add i32 %209, %206
  %211 = add i32 %210, 4
  %212 = add i32 %211, 0
  %213 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %212
  %214 = load i32, i32 addrspace(3)* %213
  %215 = bitcast i32 %214 to float
  %216 = lshr i32 %7, 24
  %217 = lshr i32 %7, 8
  %218 = and i32 %217, 8191
  %219 = and i32 %11, 255
  %220 = mul i32 %218, %219
  %221 = mul i32 %69, 1
  %222 = add i32 %221, 0
  %223 = mul i32 %222, %216
  %224 = add i32 %223, %220
  %225 = add i32 %224, 4
  %226 = add i32 %225, 1
  %227 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %226
  %228 = load i32, i32 addrspace(3)* %227
  %229 = bitcast i32 %228 to float
  store float %215, float addrspace(5)* %43
  store float %229, float addrspace(5)* %42
  %230 = getelementptr inbounds [0 x <8 x i32>], [0 x <8 x i32>] addrspace(6)* %3, i32 0, i32 15, !amdgpu.uniform !0
  %231 = load <8 x i32>, <8 x i32> addrspace(6)* %230, !invariant.load !0
  %232 = load float, float addrspace(5)* %43
  %233 = bitcast float %232 to i32
  %234 = load float, float addrspace(5)* %42
  %235 = bitcast float %234 to i32
  %236 = call nsz <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i32(i32 15, i32 %233, i32 %235, <8 x i32> %231, i32 0, i32 1) #5
  %237 = bitcast <4 x float> %236 to <4 x i32>
  %238 = extractelement <4 x i32> %237, i32 0
  %239 = extractelement <4 x i32> %237, i32 1
  %240 = extractelement <4 x i32> %237, i32 2
  %241 = extractelement <4 x i32> %237, i32 3
  %242 = bitcast i32 %238 to float
  store float %242, float addrspace(5)* %39
  %243 = bitcast i32 %239 to float
  store float %243, float addrspace(5)* %38
  %244 = bitcast i32 %240 to float
  store float %244, float addrspace(5)* %37
  %245 = bitcast i32 %241 to float
  store float %245, float addrspace(5)* %36
  %246 = load float, float addrspace(5)* %39
  %247 = bitcast float %246 to i32
  %248 = icmp eq i32 %247, 11
  %249 = sext i1 %248 to i32
  %250 = load float, float addrspace(5)* %38
  %251 = bitcast float %250 to i32
  %252 = icmp eq i32 %251, 22
  %253 = sext i1 %252 to i32
  %254 = load float, float addrspace(5)* %37
  %255 = bitcast float %254 to i32
  %256 = icmp eq i32 %255, 33
  %257 = sext i1 %256 to i32
  %258 = load float, float addrspace(5)* %36
  %259 = bitcast float %258 to i32
  %260 = icmp eq i32 %259, 44
  %261 = sext i1 %260 to i32
  %262 = bitcast i32 %249 to float
  store float %262, float addrspace(5)* %35
  %263 = bitcast i32 %253 to float
  store float %263, float addrspace(5)* %34
  %264 = bitcast i32 %257 to float
  store float %264, float addrspace(5)* %33
  %265 = bitcast i32 %261 to float
  store float %265, float addrspace(5)* %32
  %266 = load float, float addrspace(5)* %35
  %267 = bitcast float %266 to i32
  %268 = load float, float addrspace(5)* %34
  %269 = bitcast float %268 to i32
  %270 = and i32 %267, %269
  %271 = bitcast i32 %270 to float
  store float %271, float addrspace(5)* %35
  %272 = load float, float addrspace(5)* %33
  %273 = bitcast float %272 to i32
  %274 = load float, float addrspace(5)* %32
  %275 = bitcast float %274 to i32
  %276 = and i32 %273, %275
  %277 = bitcast i32 %276 to float
  store float %277, float addrspace(5)* %34
  %278 = load float, float addrspace(5)* %35
  %279 = bitcast float %278 to i32
  %280 = load float, float addrspace(5)* %34
  %281 = bitcast float %280 to i32
  %282 = and i32 %279, %281
  %283 = bitcast i32 %282 to float
  store float %283, float addrspace(5)* %31
  %284 = load float, float addrspace(5)* %31
  %285 = load float, float addrspace(5)* %27
  %286 = bitcast float %284 to i32
  %287 = icmp ne i32 %286, 0
  %288 = select i1 %287, float 0x36F0800000000000, float %285
  %289 = load float, float addrspace(5)* %31
  %290 = load float, float addrspace(5)* %26
  %291 = bitcast float %289 to i32
  %292 = icmp ne i32 %291, 0
  %293 = select i1 %292, float 0x36F0800000000000, float %290
  %294 = load float, float addrspace(5)* %31
  %295 = load float, float addrspace(5)* %25
  %296 = bitcast float %294 to i32
  %297 = icmp ne i32 %296, 0
  %298 = select i1 %297, float 0x36F0800000000000, float %295
  %299 = load float, float addrspace(5)* %31
  %300 = load float, float addrspace(5)* %24
  %301 = bitcast float %299 to i32
  %302 = icmp ne i32 %301, 0
  %303 = select i1 %302, float 0x36F0800000000000, float %300
  store float %288, float addrspace(5)* %27
  store float %293, float addrspace(5)* %26
  store float %298, float addrspace(5)* %25
  store float %303, float addrspace(5)* %24
  %304 = load float, float addrspace(5)* %31
  %305 = bitcast float %304 to i32
  %306 = xor i32 %305, -1
  %307 = bitcast i32 %306 to float
  store float %307, float addrspace(5)* %23
  %308 = load float, float addrspace(5)* %23
  %309 = load float, float addrspace(5)* %27
  %310 = bitcast float %308 to i32
  %311 = icmp ne i32 %310, 0
  %312 = select i1 %311, float 0x3703400000000000, float %309
  %313 = load float, float addrspace(5)* %23
  %314 = load float, float addrspace(5)* %26
  %315 = bitcast float %313 to i32
  %316 = icmp ne i32 %315, 0
  %317 = select i1 %316, float 0x3703400000000000, float %314
  %318 = load float, float addrspace(5)* %23
  %319 = load float, float addrspace(5)* %25
  %320 = bitcast float %318 to i32
  %321 = icmp ne i32 %320, 0
  %322 = select i1 %321, float 0x3703400000000000, float %319
  %323 = load float, float addrspace(5)* %23
  %324 = load float, float addrspace(5)* %24
  %325 = bitcast float %323 to i32
  %326 = icmp ne i32 %325, 0
  %327 = select i1 %326, float 0x3703400000000000, float %324
  store float %312, float addrspace(5)* %27
  store float %317, float addrspace(5)* %26
  store float %322, float addrspace(5)* %25
  store float %327, float addrspace(5)* %24
  %328 = load float, float addrspace(5)* %27
  %329 = load float, float addrspace(5)* %26
  %330 = load float, float addrspace(5)* %25
  %331 = load float, float addrspace(5)* %24
  %332 = and i32 %5, 65535
  %333 = mul i32 %332, 4
  %334 = and i32 %11, 255
  %335 = mul i32 56, %334
  %336 = add i32 %335, %333
  %337 = mul i32 %69, 1
  %338 = add i32 %337, 0
  %339 = mul i32 %338, 12
  %340 = add i32 %339, %336
  %341 = add i32 %340, 4
  %342 = and i32 %6, -524288
  %343 = insertelement <4 x i32> undef, i32 %342, i32 0
  %344 = insertelement <4 x i32> %343, i32 0, i32 1
  %345 = insertelement <4 x i32> %344, i32 -1, i32 2
  %346 = insertelement <4 x i32> %345, i32 163756, i32 3
  %347 = mul i32 %69, 1
  %348 = add i32 %347, 0
  %349 = and i32 %11, 255
  %350 = and i32 %4, 63
  %351 = mul i32 4, %350
  %352 = mul i32 %349, 4
  %353 = add i32 %352, %348
  %354 = mul i32 1, %351
  %355 = add i32 %354, %353
  %356 = mul i32 %355, 16
  %357 = bitcast float %328 to i32
  %358 = bitcast float %329 to i32
  %359 = bitcast float %330 to i32
  %360 = bitcast float %331 to i32
  %361 = insertelement <4 x i32> undef, i32 %357, i32 0
  %362 = insertelement <4 x i32> %361, i32 %358, i32 1
  %363 = insertelement <4 x i32> %362, i32 %359, i32 2
  %364 = insertelement <4 x i32> %363, i32 %360, i32 3
  %365 = add i32 %8, %356
  %366 = bitcast <4 x i32> %364 to <4 x float>
  call void @llvm.amdgcn.buffer.store.v4f32(<4 x float> %366, <4 x i32> %346, i32 0, i32 %365, i1 true, i1 false) #6
  %367 = lshr i32 %7, 24
  %368 = lshr i32 %7, 8
  %369 = and i32 %368, 8191
  %370 = and i32 %11, 255
  %371 = mul i32 %369, %370
  %372 = mul i32 %69, 1
  %373 = add i32 %372, 0
  %374 = mul i32 %373, %367
  %375 = add i32 %374, %371
  %376 = add i32 %375, 4
  %377 = add i32 %376, 0
  %378 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %377
  %379 = load i32, i32 addrspace(3)* %378
  %380 = bitcast i32 %379 to float
  %381 = lshr i32 %7, 24
  %382 = lshr i32 %7, 8
  %383 = and i32 %382, 8191
  %384 = and i32 %11, 255
  %385 = mul i32 %383, %384
  %386 = mul i32 %69, 1
  %387 = add i32 %386, 0
  %388 = mul i32 %387, %381
  %389 = add i32 %388, %385
  %390 = add i32 %389, 4
  %391 = add i32 %390, 1
  %392 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %391
  %393 = load i32, i32 addrspace(3)* %392
  %394 = bitcast i32 %393 to float
  %395 = lshr i32 %7, 24
  %396 = lshr i32 %7, 8
  %397 = and i32 %396, 8191
  %398 = and i32 %11, 255
  %399 = mul i32 %397, %398
  %400 = mul i32 %69, 1
  %401 = add i32 %400, 0
  %402 = mul i32 %401, %395
  %403 = add i32 %402, %399
  %404 = add i32 %403, 4
  %405 = add i32 %404, 0
  %406 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %405
  %407 = load i32, i32 addrspace(3)* %406
  %408 = bitcast i32 %407 to float
  %409 = lshr i32 %7, 24
  %410 = lshr i32 %7, 8
  %411 = and i32 %410, 8191
  %412 = and i32 %11, 255
  %413 = mul i32 %411, %412
  %414 = mul i32 %69, 1
  %415 = add i32 %414, 0
  %416 = mul i32 %415, %409
  %417 = add i32 %416, %413
  %418 = add i32 %417, 4
  %419 = add i32 %418, 0
  %420 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %419
  %421 = load i32, i32 addrspace(3)* %420
  %422 = bitcast i32 %421 to float
  store float %380, float addrspace(5)* %19
  store float %394, float addrspace(5)* %18
  store float %408, float addrspace(5)* %17
  store float %422, float addrspace(5)* %16
  %423 = load float, float addrspace(5)* %19
  %424 = load float, float addrspace(5)* %18
  %425 = and i32 %5, 65535
  %426 = mul i32 %425, 4
  %427 = and i32 %11, 255
  %428 = mul i32 56, %427
  %429 = add i32 %428, %426
  %430 = mul i32 %69, 1
  %431 = add i32 %430, 0
  %432 = mul i32 %431, 12
  %433 = add i32 %432, %429
  %434 = add i32 %433, 8
  %435 = and i32 %6, -524288
  %436 = insertelement <4 x i32> undef, i32 %435, i32 0
  %437 = insertelement <4 x i32> %436, i32 0, i32 1
  %438 = insertelement <4 x i32> %437, i32 -1, i32 2
  %439 = insertelement <4 x i32> %438, i32 163756, i32 3
  %440 = mul i32 %69, 1
  %441 = add i32 %440, 0
  %442 = and i32 %11, 255
  %443 = and i32 %4, 63
  %444 = mul i32 4, %443
  %445 = mul i32 %442, 4
  %446 = add i32 %445, %441
  %447 = mul i32 2, %444
  %448 = add i32 %447, %446
  %449 = mul i32 %448, 16
  %450 = bitcast float %423 to i32
  %451 = add i32 %8, %449
  %452 = bitcast i32 %450 to float
  call void @llvm.amdgcn.buffer.store.f32(float %452, <4 x i32> %439, i32 0, i32 %451, i1 true, i1 false) #6
  %453 = bitcast float %424 to i32
  %454 = add i32 %8, 4
  %455 = add i32 %454, %449
  %456 = bitcast i32 %453 to float
  call void @llvm.amdgcn.buffer.store.f32(float %456, <4 x i32> %439, i32 0, i32 %455, i1 true, i1 false) #6
  %457 = lshr i32 %7, 24
  %458 = lshr i32 %7, 8
  %459 = and i32 %458, 8191
  %460 = and i32 %11, 255
  %461 = mul i32 %459, %460
  %462 = mul i32 %69, 1
  %463 = add i32 %462, 0
  %464 = mul i32 %463, %457
  %465 = add i32 %464, %461
  %466 = add i32 %465, 0
  %467 = add i32 %466, 0
  %468 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %467
  %469 = load i32, i32 addrspace(3)* %468
  %470 = bitcast i32 %469 to float
  %471 = lshr i32 %7, 24
  %472 = lshr i32 %7, 8
  %473 = and i32 %472, 8191
  %474 = and i32 %11, 255
  %475 = mul i32 %473, %474
  %476 = mul i32 %69, 1
  %477 = add i32 %476, 0
  %478 = mul i32 %477, %471
  %479 = add i32 %478, %475
  %480 = add i32 %479, 0
  %481 = add i32 %480, 1
  %482 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %481
  %483 = load i32, i32 addrspace(3)* %482
  %484 = bitcast i32 %483 to float
  %485 = lshr i32 %7, 24
  %486 = lshr i32 %7, 8
  %487 = and i32 %486, 8191
  %488 = and i32 %11, 255
  %489 = mul i32 %487, %488
  %490 = mul i32 %69, 1
  %491 = add i32 %490, 0
  %492 = mul i32 %491, %485
  %493 = add i32 %492, %489
  %494 = add i32 %493, 0
  %495 = add i32 %494, 2
  %496 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %495
  %497 = load i32, i32 addrspace(3)* %496
  %498 = bitcast i32 %497 to float
  %499 = lshr i32 %7, 24
  %500 = lshr i32 %7, 8
  %501 = and i32 %500, 8191
  %502 = and i32 %11, 255
  %503 = mul i32 %501, %502
  %504 = mul i32 %69, 1
  %505 = add i32 %504, 0
  %506 = mul i32 %505, %499
  %507 = add i32 %506, %503
  %508 = add i32 %507, 0
  %509 = add i32 %508, 3
  %510 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %509
  %511 = load i32, i32 addrspace(3)* %510
  %512 = bitcast i32 %511 to float
  store float %470, float addrspace(5)* %15
  store float %484, float addrspace(5)* %14
  store float %498, float addrspace(5)* %13
  store float %512, float addrspace(5)* %12
  %513 = load float, float addrspace(5)* %15
  %514 = load float, float addrspace(5)* %14
  %515 = load float, float addrspace(5)* %13
  %516 = load float, float addrspace(5)* %12
  %517 = and i32 %5, 65535
  %518 = mul i32 %517, 4
  %519 = and i32 %11, 255
  %520 = mul i32 56, %519
  %521 = add i32 %520, %518
  %522 = mul i32 %69, 1
  %523 = add i32 %522, 0
  %524 = mul i32 %523, 12
  %525 = add i32 %524, %521
  %526 = add i32 %525, 0
  %527 = and i32 %6, -524288
  %528 = insertelement <4 x i32> undef, i32 %527, i32 0
  %529 = insertelement <4 x i32> %528, i32 0, i32 1
  %530 = insertelement <4 x i32> %529, i32 -1, i32 2
  %531 = insertelement <4 x i32> %530, i32 163756, i32 3
  %532 = mul i32 %69, 1
  %533 = add i32 %532, 0
  %534 = and i32 %11, 255
  %535 = and i32 %4, 63
  %536 = mul i32 4, %535
  %537 = mul i32 %534, 4
  %538 = add i32 %537, %533
  %539 = mul i32 0, %536
  %540 = add i32 %539, %538
  %541 = mul i32 %540, 16
  %542 = bitcast float %513 to i32
  %543 = bitcast float %514 to i32
  %544 = bitcast float %515 to i32
  %545 = bitcast float %516 to i32
  %546 = insertelement <4 x i32> undef, i32 %542, i32 0
  %547 = insertelement <4 x i32> %546, i32 %543, i32 1
  %548 = insertelement <4 x i32> %547, i32 %544, i32 2
  %549 = insertelement <4 x i32> %548, i32 %545, i32 3
  %550 = add i32 %8, %541
  %551 = bitcast <4 x i32> %549 to <4 x float>
  call void @llvm.amdgcn.buffer.store.v4f32(<4 x float> %551, <4 x i32> %531, i32 0, i32 %550, i1 true, i1 false) #6
  %552 = lshr i32 %11, 8
  %553 = and i32 %552, 31
  %554 = and i32 %6, -524288
  %555 = insertelement <4 x i32> undef, i32 %554, i32 0
  %556 = insertelement <4 x i32> %555, i32 0, i32 1
  %557 = insertelement <4 x i32> %556, i32 -1, i32 2
  %558 = insertelement <4 x i32> %557, i32 163756, i32 3
  %559 = lshr i32 %7, 24
  %560 = lshr i32 %7, 8
  %561 = and i32 %560, 8191
  %562 = and i32 %11, 255
  %563 = mul i32 %561, %562
  %564 = mul i32 %553, %559
  %565 = add i32 %564, %563
  %566 = and i32 %11, 255
  %567 = lshr i32 %11, 8
  %568 = and i32 %567, 31
  %569 = lshr i32 %5, 16
  %570 = mul i32 %569, 4
  %571 = and i32 %11, 255
  %572 = mul i32 56, %571
  %573 = add i32 %572, %570
  %574 = insertvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> undef, i32 %4, 4
  %575 = insertvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %574, i32 %6, 6
  %576 = insertvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %575, i32 %8, 8
  %577 = insertvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %576, i32 %9, 9
  %578 = bitcast i32 %566 to float
  %579 = bitcast i32 %568 to float
  %580 = bitcast i32 %573 to float
  %581 = insertvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %577, float %578, 12
  %582 = insertvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %581, float %579, 13
  %583 = insertvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %582, float %580, 14
  ret <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %583
}

; Function Attrs: nounwind readonly
declare <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i32(i32 immarg, i32, i32, <8 x i32>, i32 immarg, i32 immarg) #1

; Function Attrs: nounwind writeonly
declare void @llvm.amdgcn.buffer.store.v4f32(<4 x float>, <4 x i32>, i32, i32, i1 immarg, i1 immarg) #2

; Function Attrs: nounwind writeonly
declare void @llvm.amdgcn.buffer.store.f32(float, <4 x i32>, i32, i32, i1 immarg, i1 immarg) #2

; Function Attrs: alwaysinline
define private amdgpu_hs void @tcs_epilog(i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) #0 {
main_body:
  call void @llvm.amdgcn.s.barrier() #3
  %21 = icmp eq i32 %13, 0
  br i1 %21, label %if-true-block, label %endif-block

if-true-block:                                    ; preds = %main_body
  %22 = add i32 %14, 4
  %23 = add i32 %14, 0
  %24 = add i32 %23, 0
  %25 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %24
  %26 = load i32, i32 addrspace(3)* %25
  %27 = add i32 %23, 1
  %28 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %27
  %29 = load i32, i32 addrspace(3)* %28
  %30 = add i32 %23, 2
  %31 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %30
  %32 = load i32, i32 addrspace(3)* %31
  %33 = add i32 %23, 3
  %34 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %33
  %35 = load i32, i32 addrspace(3)* %34
  %36 = add i32 %22, 0
  %37 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %36
  %38 = load i32, i32 addrspace(3)* %37
  %39 = add i32 %22, 1
  %40 = getelementptr [16384 x i32], [16384 x i32] addrspace(3)* null, i32 0, i32 %39
  %41 = load i32, i32 addrspace(3)* %40
  %42 = insertelement <4 x i32> undef, i32 %26, i32 0
  %43 = insertelement <4 x i32> %42, i32 %29, i32 1
  %44 = insertelement <4 x i32> %43, i32 %32, i32 2
  %45 = insertelement <4 x i32> %44, i32 %35, i32 3
  %46 = insertelement <2 x i32> undef, i32 %38, i32 0
  %47 = insertelement <2 x i32> %46, i32 %41, i32 1
  %48 = and i32 %6, -524288
  %49 = add i32 %48, 8323072
  %50 = insertelement <4 x i32> undef, i32 %49, i32 0
  %51 = insertelement <4 x i32> %50, i32 0, i32 1
  %52 = insertelement <4 x i32> %51, i32 -1, i32 2
  %53 = insertelement <4 x i32> %52, i32 163756, i32 3
  %54 = mul i32 %12, 24
  %55 = icmp eq i32 %12, 0
  br i1 %55, label %if-true-block2, label %endif-block1

if-true-block2:                                   ; preds = %if-true-block
  %56 = add i32 %9, 0
  call void @llvm.amdgcn.buffer.store.f32(float -0.000000e+00, <4 x i32> %53, i32 0, i32 %56, i1 true, i1 false) #6
  br label %endif-block1

endif-block1:                                     ; preds = %if-true-block, %if-true-block2
  %57 = add i32 %9, 4
  %58 = add i32 %57, %54
  %59 = bitcast <4 x i32> %45 to <4 x float>
  call void @llvm.amdgcn.buffer.store.v4f32(<4 x float> %59, <4 x i32> %53, i32 0, i32 %58, i1 true, i1 false) #6
  %60 = add i32 %9, 20
  %61 = add i32 %60, %54
  %62 = bitcast <2 x i32> %47 to <2 x float>
  call void @llvm.amdgcn.buffer.store.v2f32(<2 x float> %62, <4 x i32> %53, i32 0, i32 %61, i1 true, i1 false) #6
  br label %endif-block

endif-block:                                      ; preds = %main_body, %endif-block1
  ret void
}

; Function Attrs: convergent nounwind
declare void @llvm.amdgcn.s.barrier() #3

; Function Attrs: nounwind writeonly
declare void @llvm.amdgcn.buffer.store.v2f32(<2 x float>, <4 x i32>, i32, i32, i1 immarg, i1 immarg) #2

define amdgpu_hs void @wrapper([0 x <4 x i32>] addrspace(6)* inreg noalias dereferenceable(18446744073709551615), [0 x <8 x i32>] addrspace(6)* inreg noalias dereferenceable(18446744073709551615), [0 x <4 x i32>] addrspace(6)* inreg noalias dereferenceable(18446744073709551615), [0 x <8 x i32>] addrspace(6)* inreg noalias dereferenceable(18446744073709551615), i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32 inreg, i32, i32) #4 {
main_body:
  %12 = ptrtoint [0 x <4 x i32>] addrspace(6)* %0 to i32
  %13 = ptrtoint [0 x <8 x i32>] addrspace(6)* %1 to i32
  %14 = ptrtoint [0 x <4 x i32>] addrspace(6)* %2 to i32
  %15 = ptrtoint [0 x <8 x i32>] addrspace(6)* %3 to i32
  %16 = bitcast i32 %10 to float
  %17 = bitcast i32 %11 to float
  %18 = inttoptr i32 %12 to [0 x <4 x i32>] addrspace(6)*
  %19 = inttoptr i32 %13 to [0 x <8 x i32>] addrspace(6)*
  %20 = inttoptr i32 %14 to [0 x <4 x i32>] addrspace(6)*
  %21 = inttoptr i32 %15 to [0 x <8 x i32>] addrspace(6)*
  %22 = bitcast float %16 to i32
  %23 = bitcast float %17 to i32
  %24 = call <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> @main([0 x <4 x i32>] addrspace(6)* %18, [0 x <8 x i32>] addrspace(6)* %19, [0 x <4 x i32>] addrspace(6)* %20, [0 x <8 x i32>] addrspace(6)* %21, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32 %22, i32 %23)
  %25 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 0
  %26 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 1
  %27 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 2
  %28 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 3
  %29 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 4
  %30 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 5
  %31 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 6
  %32 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 7
  %33 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 8
  %34 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 9
  %35 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 10
  %36 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 11
  %37 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 12
  %38 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 13
  %39 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 14
  %40 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 15
  %41 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 16
  %42 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 17
  %43 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 18
  %44 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 19
  %45 = extractvalue <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, float, float, float }> %24, 20
  %46 = bitcast float %35 to i32
  %47 = bitcast float %36 to i32
  %48 = bitcast float %37 to i32
  %49 = bitcast float %38 to i32
  %50 = bitcast float %39 to i32
  %51 = bitcast float %40 to i32
  %52 = bitcast float %41 to i32
  %53 = bitcast float %42 to i32
  %54 = bitcast float %43 to i32
  %55 = bitcast float %44 to i32
  %56 = bitcast float %45 to i32
  call void @tcs_epilog(i32 %25, i32 %26, i32 %27, i32 %28, i32 %29, i32 %30, i32 %31, i32 %32, i32 %33, i32 %34, i32 %46, i32 %47, i32 %48, i32 %49, i32 %50, i32 %51, i32 %52, i32 %53, i32 %54, i32 %55, i32 %56)
  ret void
}

attributes #0 = { alwaysinline "amdgpu-max-work-group-size"="0x80" "no-signed-zeros-fp-math"="true" }
attributes #1 = { nounwind readonly }
attributes #2 = { nounwind writeonly }
attributes #3 = { convergent nounwind }
attributes #4 = { "amdgpu-max-work-group-size"="0x80" "no-signed-zeros-fp-math"="true" }
attributes #5 = { nounwind readnone }
attributes #6 = { inaccessiblememonly nounwind }

!0 = !{}


More information about the llvm-commits mailing list