xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/llvm.amdgcn.raw.ptr.tbuffer.store.ll (revision c3cfbbc4160c3e0284034c98b332b468328458e3)
1faa2c678SKrzysztof Drewniak; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2faa2c678SKrzysztof Drewniak; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -stop-after=instruction-select -verify-machineinstrs -o - %s | FileCheck %s
3faa2c678SKrzysztof Drewniak; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -stop-after=instruction-select -verify-machineinstrs -o - %s | FileCheck %s
4faa2c678SKrzysztof Drewniak
5faa2c678SKrzysztof Drewniak; Natural mapping
6faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) {
7faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset
8faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
9faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1
10faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
11faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
12faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
13faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
14faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
15faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
16faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
17faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6
18faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
19ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 78, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
20faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
21faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 0)
22faa2c678SKrzysztof Drewniak  ret void
23faa2c678SKrzysztof Drewniak}
24faa2c678SKrzysztof Drewniak
25faa2c678SKrzysztof Drewniak; Natural mapping
26faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_v2f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset(<2 x float> %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) {
27faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_v2f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset
28faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
29faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2
30faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
31faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
32faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
33faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1
34faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2
35faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3
36faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr4
37faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr5
38faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr2
39faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr6
40faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY3]], %subreg.sub1, [[COPY4]], %subreg.sub2, [[COPY5]], %subreg.sub3
41ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_XY_OFFEN_exact [[REG_SEQUENCE]], [[COPY6]], [[REG_SEQUENCE1]], [[COPY7]], 0, 78, 0, 0, implicit $exec :: (dereferenceable store (<2 x s32>) into %ir.rsrc, align 1, addrspace 8)
42faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
43faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.v2f32(<2 x float> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 0)
44faa2c678SKrzysztof Drewniak  ret void
45faa2c678SKrzysztof Drewniak}
46faa2c678SKrzysztof Drewniak
47faa2c678SKrzysztof Drewniak; Natural mapping
48faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_v3f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset(<3 x float> %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) {
49faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_v3f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset
50faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
51faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2, $vgpr3
52faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
53faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
54faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
55faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
56faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:vreg_96 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2
57faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr2
58faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr3
59faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr4
60faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr5
61faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:vgpr_32 = COPY $vgpr3
62faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY8:%[0-9]+]]:sreg_32 = COPY $sgpr6
63faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY4]], %subreg.sub1, [[COPY5]], %subreg.sub2, [[COPY6]], %subreg.sub3
64ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_XYZ_OFFEN_exact [[REG_SEQUENCE]], [[COPY7]], [[REG_SEQUENCE1]], [[COPY8]], 0, 78, 0, 0, implicit $exec :: (dereferenceable store (<3 x s32>) into %ir.rsrc, align 1, addrspace 8)
65faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
66faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.v3f32(<3 x float> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 0)
67faa2c678SKrzysztof Drewniak  ret void
68faa2c678SKrzysztof Drewniak}
69faa2c678SKrzysztof Drewniak
70faa2c678SKrzysztof Drewniak; Natural mapping
71faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_v4f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset(<4 x float> %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) {
72faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_v4f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset
73faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
74faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4
75faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
76faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
77faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
78faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
79faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
80faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1, [[COPY2]], %subreg.sub2, [[COPY3]], %subreg.sub3
81faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr2
82faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr3
83faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr4
84faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:sreg_32 = COPY $sgpr5
85faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY8:%[0-9]+]]:vgpr_32 = COPY $vgpr4
86faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY9:%[0-9]+]]:sreg_32 = COPY $sgpr6
87faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY5]], %subreg.sub1, [[COPY6]], %subreg.sub2, [[COPY7]], %subreg.sub3
88ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_XYZW_OFFEN_exact [[REG_SEQUENCE]], [[COPY8]], [[REG_SEQUENCE1]], [[COPY9]], 0, 78, 0, 0, implicit $exec :: (dereferenceable store (<4 x s32>) into %ir.rsrc, align 1, addrspace 8)
89faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
90faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.v4f32(<4 x float> %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 0)
91faa2c678SKrzysztof Drewniak  ret void
92faa2c678SKrzysztof Drewniak}
93faa2c678SKrzysztof Drewniak
94faa2c678SKrzysztof Drewniak; Copies for VGPR arguments
95faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__sgpr_voffset__sgpr_soffset(float %val, ptr addrspace(8) inreg %rsrc, i32 inreg %voffset, i32 inreg %soffset) {
96faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__sgpr_voffset__sgpr_soffset
97faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
98faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $sgpr7, $vgpr0
99faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
100faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
101faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
102faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
103faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
104faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
105faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6
106faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr7
107faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
108faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[COPY5]]
109ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY7]], [[REG_SEQUENCE]], [[COPY6]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
110faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
111faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0)
112faa2c678SKrzysztof Drewniak  ret void
113faa2c678SKrzysztof Drewniak}
114faa2c678SKrzysztof Drewniak
115faa2c678SKrzysztof Drewniak; Waterfall for rsrc
116faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__vgpr_rsrc__vgpr_voffset__sgpr_soffset(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 inreg %soffset) {
117faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__vgpr_rsrc__vgpr_voffset__sgpr_soffset
118faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
119faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.2(0x80000000)
120faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
121faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
122faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
123faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
124faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
125faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
126faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4
127faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr5
128faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr2
129faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
130faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
131faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
132faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.2:
133faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.3(0x80000000)
134faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
135faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec
136faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec
137faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec
138faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY4]], implicit $exec
139faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1, [[V_READFIRSTLANE_B32_2]], %subreg.sub2, [[V_READFIRSTLANE_B32_3]], %subreg.sub3
140faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1
141faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3
142faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY9:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1
143faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3
144faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY9]], [[COPY7]], implicit $exec
145faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec
146*c3cfbbc4Spvanhout  ; CHECK-NEXT:   [[S_AND_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_B32 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc
147faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_AND_SAVEEXEC_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_SAVEEXEC_B32 killed [[S_AND_B32_]], implicit-def $exec, implicit-def $scc, implicit $exec
148faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
149faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.3:
150faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.4(0x40000000), %bb.2(0x40000000)
151faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
152ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE1]], [[COPY6]], 0, 94, 1, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
153faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   $exec_lo = S_XOR_B32_term $exec_lo, [[S_AND_SAVEEXEC_B32_]], implicit-def $scc
154faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   SI_WATERFALL_LOOP %bb.2, implicit $exec
155faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
156faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.4:
157faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.5(0x80000000)
158faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
159faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   $exec_lo = S_MOV_B32_term [[S_MOV_B32_]]
160faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
161faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.5:
162faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
163faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 1)
164faa2c678SKrzysztof Drewniak  ret void
165faa2c678SKrzysztof Drewniak}
166faa2c678SKrzysztof Drewniak
167faa2c678SKrzysztof Drewniak; Waterfall for rsrc and soffset
168faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__vgpr_rsrc__vgpr_voffset__vgpr_soffset(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset) {
169faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__vgpr_rsrc__vgpr_voffset__vgpr_soffset
170faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
171faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.2(0x80000000)
172faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6
173faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
174faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
175faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
176faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
177faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
178faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4
179faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr5
180faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr6
181faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
182faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
183faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
184faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.2:
185faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.3(0x80000000)
186faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
187faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec
188faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec
189faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec
190faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY4]], implicit $exec
191faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1, [[V_READFIRSTLANE_B32_2]], %subreg.sub2, [[V_READFIRSTLANE_B32_3]], %subreg.sub3
192faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1
193faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3
194faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY9:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1
195faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3
196faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY9]], [[COPY7]], implicit $exec
197faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec
198*c3cfbbc4Spvanhout  ; CHECK-NEXT:   [[S_AND_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_B32 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc
199faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_4:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY6]], implicit $exec
200faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U32_e64 [[V_READFIRSTLANE_B32_4]], [[COPY6]], implicit $exec
201*c3cfbbc4Spvanhout  ; CHECK-NEXT:   [[S_AND_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_B32 [[S_AND_B32_]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc
202faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_AND_SAVEEXEC_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_SAVEEXEC_B32 killed [[S_AND_B32_1]], implicit-def $exec, implicit-def $scc, implicit $exec
203faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
204faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.3:
205faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.4(0x40000000), %bb.2(0x40000000)
206faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
207ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE1]], [[V_READFIRSTLANE_B32_4]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
208faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   $exec_lo = S_XOR_B32_term $exec_lo, [[S_AND_SAVEEXEC_B32_]], implicit-def $scc
209faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   SI_WATERFALL_LOOP %bb.2, implicit $exec
210faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
211faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.4:
212faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.5(0x80000000)
213faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
214faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   $exec_lo = S_MOV_B32_term [[S_MOV_B32_]]
215faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
216faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.5:
217faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
218faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0)
219faa2c678SKrzysztof Drewniak  ret void
220faa2c678SKrzysztof Drewniak}
221faa2c678SKrzysztof Drewniak
222faa2c678SKrzysztof Drewniak; Waterfall for rsrc and soffset, copy for voffset
223faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__vgpr_rsrc__sgpr_voffset__vgpr_soffset(float %val, ptr addrspace(8) %rsrc, i32 inreg %voffset, i32 %soffset) {
224faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__vgpr_rsrc__sgpr_voffset__vgpr_soffset
225faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
226faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.2(0x80000000)
227faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
228faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
229faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
230faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
231faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
232faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
233faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4
234faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr2
235faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:vgpr_32 = COPY $vgpr5
236faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
237faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[COPY5]]
238faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
239faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
240faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.2:
241faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.3(0x80000000)
242faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
243faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec
244faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec
245faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec
246faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY4]], implicit $exec
247faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1, [[V_READFIRSTLANE_B32_2]], %subreg.sub2, [[V_READFIRSTLANE_B32_3]], %subreg.sub3
248faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1
249faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY9:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3
250faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1
251faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY11:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3
252faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec
253faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY11]], [[COPY9]], implicit $exec
254*c3cfbbc4Spvanhout  ; CHECK-NEXT:   [[S_AND_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_B32 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc
255faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_4:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY6]], implicit $exec
256faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U32_e64 [[V_READFIRSTLANE_B32_4]], [[COPY6]], implicit $exec
257*c3cfbbc4Spvanhout  ; CHECK-NEXT:   [[S_AND_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_B32 [[S_AND_B32_]], [[V_CMP_EQ_U32_e64_]], implicit-def dead $scc
258faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_AND_SAVEEXEC_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_SAVEEXEC_B32 killed [[S_AND_B32_1]], implicit-def $exec, implicit-def $scc, implicit $exec
259faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
260faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.3:
261faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.4(0x40000000), %bb.2(0x40000000)
262faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
263ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY7]], [[REG_SEQUENCE1]], [[V_READFIRSTLANE_B32_4]], 0, 78, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
264faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   $exec_lo = S_XOR_B32_term $exec_lo, [[S_AND_SAVEEXEC_B32_]], implicit-def $scc
265faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   SI_WATERFALL_LOOP %bb.2, implicit $exec
266faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
267faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.4:
268faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.5(0x80000000)
269faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
270faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   $exec_lo = S_MOV_B32_term [[S_MOV_B32_]]
271faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
272faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.5:
273faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
274faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 0)
275faa2c678SKrzysztof Drewniak  ret void
276faa2c678SKrzysztof Drewniak}
277faa2c678SKrzysztof Drewniak
278faa2c678SKrzysztof Drewniak; Natural mapping + glc
279faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_glc(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) {
280faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_glc
281faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
282faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1
283faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
284faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
285faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
286faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
287faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
288faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
289faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
290faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6
291faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
292ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 78, 1, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
293faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
294faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 1)
295faa2c678SKrzysztof Drewniak  ret void
296faa2c678SKrzysztof Drewniak}
297faa2c678SKrzysztof Drewniak
298faa2c678SKrzysztof Drewniak; Natural mapping + slc
299faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) {
300faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc
301faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
302faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1
303faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
304faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
305faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
306faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
307faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
308faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
309faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
310faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6
311faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
312ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 78, 2, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
313faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
314faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 2)
315faa2c678SKrzysztof Drewniak  ret void
316faa2c678SKrzysztof Drewniak}
317faa2c678SKrzysztof Drewniak
318faa2c678SKrzysztof Drewniak; Natural mapping + glc + slc
319faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc_glc(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) {
320faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_slc_glc
321faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
322faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1
323faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
324faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
325faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
326faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
327faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
328faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
329faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
330faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6
331faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
332ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 78, 3, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
333faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
334faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 3)
335faa2c678SKrzysztof Drewniak  ret void
336faa2c678SKrzysztof Drewniak}
337faa2c678SKrzysztof Drewniak
338faa2c678SKrzysztof Drewniak; Natural mapping + dlc
339faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_dlc(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset) {
340faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_dlc
341faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
342faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1
343faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
344faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
345faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
346faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
347faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
348faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
349faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
350faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6
351faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
352ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 0, 78, 4, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
353faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
354faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 78, i32 4)
355faa2c678SKrzysztof Drewniak  ret void
356faa2c678SKrzysztof Drewniak}
357faa2c678SKrzysztof Drewniak
358faa2c678SKrzysztof Drewniak
359faa2c678SKrzysztof Drewniak
360faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vdpr_voffset__sgpr_soffset__voffset0(float %val, ptr addrspace(8) inreg %rsrc, i32 inreg %soffset) {
361faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vdpr_voffset__sgpr_soffset__voffset0
362faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
363faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0
364faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
365faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
366faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
367faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
368faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
369faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
370faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6
371faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
372ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFSET_exact [[COPY]], [[REG_SEQUENCE]], [[COPY5]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
373faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
374faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 0, i32 %soffset, i32 94, i32 0)
375faa2c678SKrzysztof Drewniak  ret void
376faa2c678SKrzysztof Drewniak}
377faa2c678SKrzysztof Drewniak
378faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset4095(float %val, ptr addrspace(8) inreg %rsrc, i32 inreg %soffset) {
379faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset4095
380faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
381faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0
382faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
383faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
384faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
385faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
386faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
387faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
388faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6
389faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
390ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFSET_exact [[COPY]], [[REG_SEQUENCE]], [[COPY5]], 4095, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
391faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
392faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 4095, i32 %soffset, i32 94, i32 0)
393faa2c678SKrzysztof Drewniak  ret void
394faa2c678SKrzysztof Drewniak}
395faa2c678SKrzysztof Drewniak
396faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset4096(float %val, ptr addrspace(8) inreg %rsrc, i32 inreg %soffset) {
397faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset4096
398faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
399faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0
400faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
401faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
402faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
403faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
404faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
405faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
406faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:sreg_32 = COPY $sgpr6
407faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096
408faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
409faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]
410ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY6]], [[REG_SEQUENCE]], [[COPY5]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
411faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
412faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 4096, i32 %soffset, i32 94, i32 0)
413faa2c678SKrzysztof Drewniak  ret void
414faa2c678SKrzysztof Drewniak}
415faa2c678SKrzysztof Drewniak
416faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_voffset_add16(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset.base, i32 inreg %soffset) {
417faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_voffset_add16
418faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
419faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1
420faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
421faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
422faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
423faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
424faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
425faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
426faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
427faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6
428faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
429ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 16, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
430faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
431faa2c678SKrzysztof Drewniak  %voffset = add i32 %voffset.base, 16
432faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0)
433faa2c678SKrzysztof Drewniak  ret void
434faa2c678SKrzysztof Drewniak}
435faa2c678SKrzysztof Drewniak
436faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset_add4095(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset.base, i32 inreg %soffset) {
437faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset_add4095
438faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
439faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1
440faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
441faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
442faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
443faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
444faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
445faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
446faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
447faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6
448faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
449ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[COPY6]], 4095, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
450faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
451faa2c678SKrzysztof Drewniak  %voffset = add i32 %voffset.base, 4095
452faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0)
453faa2c678SKrzysztof Drewniak  ret void
454faa2c678SKrzysztof Drewniak}
455faa2c678SKrzysztof Drewniak
456faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset_add4096(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset.base, i32 inreg %soffset) {
457faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset__voffset_add4096
458faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
459faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1
460faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
461faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
462faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
463faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
464faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
465faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
466faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
467faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6
468faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096
469faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]
470faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY5]], [[COPY7]], 0, implicit $exec
471faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
472ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[V_ADD_U32_e64_]], [[REG_SEQUENCE]], [[COPY6]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
473faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
474faa2c678SKrzysztof Drewniak  %voffset = add i32 %voffset.base, 4096
475faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0)
476faa2c678SKrzysztof Drewniak  ret void
477faa2c678SKrzysztof Drewniak}
478faa2c678SKrzysztof Drewniak
479faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset4095(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset) {
480faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset4095
481faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
482faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $vgpr0, $vgpr1
483faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
484faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
485faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
486faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
487faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
488faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
489faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
490faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4095
491faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
492ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[S_MOV_B32_]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
493faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
494faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 4095, i32 94, i32 0)
495faa2c678SKrzysztof Drewniak  ret void
496faa2c678SKrzysztof Drewniak}
497faa2c678SKrzysztof Drewniak
498faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset4096(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset) {
499faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset4096
500faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
501faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $vgpr0, $vgpr1
502faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
503faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
504faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
505faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
506faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
507faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
508faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
509faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096
510faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
511ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[S_MOV_B32_]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
512faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
513faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 4096, i32 94, i32 0)
514faa2c678SKrzysztof Drewniak  ret void
515faa2c678SKrzysztof Drewniak}
516faa2c678SKrzysztof Drewniak
517faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add16(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset.base) {
518faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add16
519faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
520faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1
521faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
522faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
523faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
524faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
525faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
526faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
527faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
528faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6
529faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 16
530*c3cfbbc4Spvanhout  ; CHECK-NEXT:   [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY6]], [[S_MOV_B32_]], implicit-def dead $scc
531faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
532ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[S_ADD_I32_]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
533faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
534faa2c678SKrzysztof Drewniak  %soffset = add i32 %soffset.base, 16
535faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0)
536faa2c678SKrzysztof Drewniak  ret void
537faa2c678SKrzysztof Drewniak}
538faa2c678SKrzysztof Drewniak
539faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add4095(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset.base) {
540faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add4095
541faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
542faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1
543faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
544faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
545faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
546faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
547faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
548faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
549faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
550faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6
551faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4095
552*c3cfbbc4Spvanhout  ; CHECK-NEXT:   [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY6]], [[S_MOV_B32_]], implicit-def dead $scc
553faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
554ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[S_ADD_I32_]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
555faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
556faa2c678SKrzysztof Drewniak  %soffset = add i32 %soffset.base, 4095
557faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0)
558faa2c678SKrzysztof Drewniak  ret void
559faa2c678SKrzysztof Drewniak}
560faa2c678SKrzysztof Drewniak
561faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add4096(float %val, ptr addrspace(8) inreg %rsrc, i32 %voffset, i32 inreg %soffset.base) {
562faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add4096
563faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
564faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $sgpr3, $sgpr4, $sgpr5, $sgpr6, $vgpr0, $vgpr1
565faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
566faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
567faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr2
568faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr3
569faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr4
570faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:sreg_32 = COPY $sgpr5
571faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr1
572faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr6
573faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096
574*c3cfbbc4Spvanhout  ; CHECK-NEXT:   [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY6]], [[S_MOV_B32_]], implicit-def dead $scc
575faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
576ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE]], [[S_ADD_I32_]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
577faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
578faa2c678SKrzysztof Drewniak  %soffset = add i32 %soffset.base, 4096
579faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0)
580faa2c678SKrzysztof Drewniak  ret void
581faa2c678SKrzysztof Drewniak}
582faa2c678SKrzysztof Drewniak
583faa2c678SKrzysztof Drewniak; An add of the offset is necessary, with a waterfall loop. Make sure the add is done outside of the waterfall loop.
584faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add5000(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 inreg %soffset.base) {
585faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_soffset_add5000
586faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
587faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.2(0x80000000)
588faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
589faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
590faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
591faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
592faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
593faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
594faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4
595faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr5
596faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr2
597faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 5000
598*c3cfbbc4Spvanhout  ; CHECK-NEXT:   [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY6]], [[S_MOV_B32_]], implicit-def dead $scc
599faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
600faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
601faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
602faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.2:
603faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.3(0x80000000)
604faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
605faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec
606faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec
607faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec
608faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY4]], implicit $exec
609faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1, [[V_READFIRSTLANE_B32_2]], %subreg.sub2, [[V_READFIRSTLANE_B32_3]], %subreg.sub3
610faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1
611faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3
612faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY9:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1
613faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3
614faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY9]], [[COPY7]], implicit $exec
615faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec
616*c3cfbbc4Spvanhout  ; CHECK-NEXT:   [[S_AND_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_B32 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc
617faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_AND_SAVEEXEC_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_SAVEEXEC_B32 killed [[S_AND_B32_]], implicit-def $exec, implicit-def $scc, implicit $exec
618faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
619faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.3:
620faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.4(0x40000000), %bb.2(0x40000000)
621faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
622ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[COPY5]], [[REG_SEQUENCE1]], [[S_ADD_I32_]], 0, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
623faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   $exec_lo = S_XOR_B32_term $exec_lo, [[S_AND_SAVEEXEC_B32_]], implicit-def $scc
624faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   SI_WATERFALL_LOOP %bb.2, implicit $exec
625faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
626faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.4:
627faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.5(0x80000000)
628faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
629faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   $exec_lo = S_MOV_B32_term [[S_MOV_B32_1]]
630faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
631faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.5:
632faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
633faa2c678SKrzysztof Drewniak  %soffset = add i32 %soffset.base, 5000
634faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0)
635faa2c678SKrzysztof Drewniak  ret void
636faa2c678SKrzysztof Drewniak}
637faa2c678SKrzysztof Drewniak
638faa2c678SKrzysztof Drewniak; An add of the offset is necessary, with a waterfall loop. Make sure the add is done outside of the waterfall loop.
639faa2c678SKrzysztof Drewniakdefine amdgpu_ps void @raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_voffset_add5000(float %val, ptr addrspace(8) %rsrc, i32 %voffset.base, i32 inreg %soffset) {
640faa2c678SKrzysztof Drewniak  ; CHECK-LABEL: name: raw_tbuffer_store_f32__sgpr_rsrc__vgpr_voffset__sgpr_soffset_voffset_add5000
641faa2c678SKrzysztof Drewniak  ; CHECK: bb.1 (%ir-block.0):
642faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.2(0x80000000)
643faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   liveins: $sgpr2, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
644faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
645faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
646faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
647faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
648faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
649faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr4
650faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:vgpr_32 = COPY $vgpr5
651faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:sreg_32 = COPY $sgpr2
652faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY2]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY4]], %subreg.sub3
653faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 4096
654faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[S_MOV_B32_]]
655faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY5]], [[COPY7]], 0, implicit $exec
656faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_MOV_B32_1:%[0-9]+]]:sreg_32_xm0_xexec = S_MOV_B32 $exec_lo
657faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
658faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.2:
659faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.3(0x80000000)
660faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
661faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY1]], implicit $exec
662faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_1:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY2]], implicit $exec
663faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_2:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY3]], implicit $exec
664faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_READFIRSTLANE_B32_3:%[0-9]+]]:sreg_32 = V_READFIRSTLANE_B32 [[COPY4]], implicit $exec
665faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[V_READFIRSTLANE_B32_]], %subreg.sub0, [[V_READFIRSTLANE_B32_1]], %subreg.sub1, [[V_READFIRSTLANE_B32_2]], %subreg.sub2, [[V_READFIRSTLANE_B32_3]], %subreg.sub3
666faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY8:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub0_sub1
667faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY9:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]].sub2_sub3
668faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY10:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub0_sub1
669faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[COPY11:%[0-9]+]]:sreg_64 = COPY [[REG_SEQUENCE1]].sub2_sub3
670faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_CMP_EQ_U64_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY10]], [[COPY8]], implicit $exec
671faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[V_CMP_EQ_U64_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U64_e64 [[COPY11]], [[COPY9]], implicit $exec
672*c3cfbbc4Spvanhout  ; CHECK-NEXT:   [[S_AND_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_B32 [[V_CMP_EQ_U64_e64_]], [[V_CMP_EQ_U64_e64_1]], implicit-def dead $scc
673faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   [[S_AND_SAVEEXEC_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_AND_SAVEEXEC_B32 killed [[S_AND_B32_]], implicit-def $exec, implicit-def $scc, implicit $exec
674faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
675faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.3:
676faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.4(0x40000000), %bb.2(0x40000000)
677faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
678ab379378SKrzysztof Drewniak  ; CHECK-NEXT:   TBUFFER_STORE_FORMAT_X_OFFEN_exact [[COPY]], [[V_ADD_U32_e64_]], [[REG_SEQUENCE1]], [[COPY6]], 904, 94, 0, 0, implicit $exec :: (dereferenceable store (s32) into %ir.rsrc, align 1, addrspace 8)
679faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   $exec_lo = S_XOR_B32_term $exec_lo, [[S_AND_SAVEEXEC_B32_]], implicit-def $scc
680faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   SI_WATERFALL_LOOP %bb.2, implicit $exec
681faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
682faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.4:
683faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   successors: %bb.5(0x80000000)
684faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
685faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   $exec_lo = S_MOV_B32_term [[S_MOV_B32_1]]
686faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: {{  $}}
687faa2c678SKrzysztof Drewniak  ; CHECK-NEXT: bb.5:
688faa2c678SKrzysztof Drewniak  ; CHECK-NEXT:   S_ENDPGM 0
689faa2c678SKrzysztof Drewniak  %voffset = add i32 %voffset.base, 5000
690faa2c678SKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float %val, ptr addrspace(8) %rsrc, i32 %voffset, i32 %soffset, i32 94, i32 0)
691faa2c678SKrzysztof Drewniak  ret void
692faa2c678SKrzysztof Drewniak}
693faa2c678SKrzysztof Drewniak
694faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.tbuffer.store.f32(float, ptr addrspace(8), i32, i32, i32 immarg, i32 immarg)
695faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.tbuffer.store.v2f32(<2 x float>, ptr addrspace(8), i32, i32, i32 immarg, i32 immarg)
696faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.tbuffer.store.v3f32(<3 x float>, ptr addrspace(8), i32, i32, i32 immarg, i32 immarg)
697faa2c678SKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.tbuffer.store.v4f32(<4 x float>, ptr addrspace(8), i32, i32, i32 immarg, i32 immarg)
698