[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.amdgcn.exp.ll
blobc120c58ce6f335f447027cecc4bf71e3c5fd3adf
1 ; RUN: llc -mtriple=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -strict-whitespace -check-prefixes=GCN,GFX8,PREGFX11 %s
2 ; RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -strict-whitespace -check-prefixes=GCN,GFX10,PREGFX11 %s
3 ; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-enable-vopd=0 -verify-machineinstrs < %s | FileCheck -strict-whitespace -check-prefixes=GCN,GFX11 %s
4 ; RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -amdgpu-enable-vopd=0 -verify-machineinstrs < %s | FileCheck -strict-whitespace -check-prefixes=GCN,GFX11 %s
6 declare void @llvm.amdgcn.exp.f32(i32, i32, float, float, float, float, i1, i1) #1
7 declare void @llvm.amdgcn.exp.i32(i32, i32, i32, i32, i32, i32, i1, i1) #1
8 declare float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8), i32, i32, i32) #2
10 ; GCN-LABEL: {{^}}test_export_zeroes_f32:
11 ; GCN: {{exp|export}} mrt0 off, off, off, off{{$}}
12 ; GCN: {{exp|export}} mrt0 off, off, off, off done{{$}}
13 define amdgpu_kernel void @test_export_zeroes_f32() #0 {
15   call void @llvm.amdgcn.exp.f32(i32 0, i32 0, float 0.0, float 0.0, float 0.0, float 0.0, i1 false, i1 false)
16   call void @llvm.amdgcn.exp.f32(i32 0, i32 0, float 0.0, float 0.0, float 0.0, float 0.0, i1 true, i1 false)
17   ret void
20 ; FIXME: Should not set up registers for the unused source registers.
22 ; GCN-LABEL: {{^}}test_export_en_src0_f32:
23 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
24 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
25 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
26 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
27 ; GCN: {{exp|export}} mrt0 [[SRC0]], off, off, off done{{$}}
28 define amdgpu_kernel void @test_export_en_src0_f32() #0 {
29   call void @llvm.amdgcn.exp.f32(i32 0, i32 1, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
30   ret void
33 ; GCN-LABEL: {{^}}test_export_en_src1_f32:
34 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
35 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
36 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
37 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
38 ; GCN: {{exp|export}} mrt0 off, [[SRC1]], off, off done{{$}}
39 define amdgpu_kernel void @test_export_en_src1_f32() #0 {
40   call void @llvm.amdgcn.exp.f32(i32 0, i32 2, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
41   ret void
44 ; GCN-LABEL: {{^}}test_export_en_src2_f32:
45 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
46 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
47 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
48 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
49 ; GCN: {{exp|export}} mrt0 off, off, [[SRC2]], off done{{$}}
50 define amdgpu_kernel void @test_export_en_src2_f32() #0 {
51   call void @llvm.amdgcn.exp.f32(i32 0, i32 4, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
52   ret void
55 ; GCN-LABEL: {{^}}test_export_en_src3_f32:
56 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
57 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
58 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
59 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
60 ; GCN: {{exp|export}} mrt0 off, off, off, [[SRC3]] done{{$}}
61 define amdgpu_kernel void @test_export_en_src3_f32() #0 {
62   call void @llvm.amdgcn.exp.f32(i32 0, i32 8, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
63   ret void
66 ; GCN-LABEL: {{^}}test_export_en_src0_src1_f32:
67 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
68 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
69 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
70 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
71 ; GCN: {{exp|export}} mrt0 [[SRC0]], [[SRC1]], off, off done{{$}}
72 define amdgpu_kernel void @test_export_en_src0_src1_f32() #0 {
73   call void @llvm.amdgcn.exp.f32(i32 0, i32 3, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
74   ret void
77 ; GCN-LABEL: {{^}}test_export_en_src0_src2_f32:
78 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
79 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
80 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
81 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
82 ; GCN: {{exp|export}} mrt0 [[SRC0]], off, [[SRC2]], off done{{$}}
83 define amdgpu_kernel void @test_export_en_src0_src2_f32() #0 {
84   call void @llvm.amdgcn.exp.f32(i32 0, i32 5, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
85   ret void
88 ; GCN-LABEL: {{^}}test_export_en_src0_src3_f32:
89 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
90 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
91 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
92 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
93 ; GCN: {{exp|export}} mrt0 [[SRC0]], off, off, [[SRC3]]{{$}}
94 ; GCN: {{exp|export}} mrt0 [[SRC0]], off, off, [[SRC3]] done{{$}}
95 define amdgpu_kernel void @test_export_en_src0_src3_f32() #0 {
96   call void @llvm.amdgcn.exp.f32(i32 0, i32 9, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false)
97   call void @llvm.amdgcn.exp.f32(i32 0, i32 9, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
98   ret void
101 ; GCN-LABEL: {{^}}test_export_en_src0_src1_src2_src3_f32:
102 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
103 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
104 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
105 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
106 ; GCN: {{exp|export}} mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
107 ; GCN: {{exp|export}} mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
108 define amdgpu_kernel void @test_export_en_src0_src1_src2_src3_f32() #0 {
109   call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false)
110   call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
111   ret void
114 ; GCN-LABEL: {{^}}test_export_mrt7_f32:
115 ; GCN-DAG: v_mov_b32_e32 [[VHALF:v[0-9]+]], 0.5
116 ; GCN: {{exp|export}} mrt7 [[VHALF]], [[VHALF]], [[VHALF]], [[VHALF]]{{$}}
117 ; GCN: {{exp|export}} mrt7 [[VHALF]], [[VHALF]], [[VHALF]], [[VHALF]] done{{$}}
118 define amdgpu_kernel void @test_export_mrt7_f32() #0 {
119   call void @llvm.amdgcn.exp.f32(i32 7, i32 15, float 0.5, float 0.5, float 0.5, float 0.5, i1 false, i1 false)
120   call void @llvm.amdgcn.exp.f32(i32 7, i32 15, float 0.5, float 0.5, float 0.5, float 0.5, i1 true, i1 false)
121   ret void
124 ; GCN-LABEL: {{^}}test_export_z_f32:
125 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
126 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
127 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
128 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
129 ; GCN: {{exp|export}} mrtz [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
130 ; GCN: {{exp|export}} mrtz [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
131 define amdgpu_kernel void @test_export_z_f32() #0 {
132   call void @llvm.amdgcn.exp.f32(i32 8, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false)
133   call void @llvm.amdgcn.exp.f32(i32 8, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
134   ret void
137 ; GCN-LABEL: {{^}}test_export_null_f32:
138 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
139 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
140 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
141 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
142 ; PREGFX11: {{exp|export}} null [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
143 ; PREGFX11: {{exp|export}} null [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
144 define amdgpu_kernel void @test_export_null_f32() #0 {
145   call void @llvm.amdgcn.exp.f32(i32 9, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false)
146   call void @llvm.amdgcn.exp.f32(i32 9, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
147   ret void
150 ; GCN-LABEL: {{^}}test_export_reserved10_f32:
151 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
152 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
153 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
154 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
155 ; GCN: {{exp|export}} invalid_target_10 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
156 ; GCN: {{exp|export}} invalid_target_10 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
157 define amdgpu_kernel void @test_export_reserved10_f32() #0 {
158   call void @llvm.amdgcn.exp.f32(i32 10, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false)
159   call void @llvm.amdgcn.exp.f32(i32 10, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
160   ret void
163 ; GCN-LABEL: {{^}}test_export_reserved11_f32:
164 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
165 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
166 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
167 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
168 ; GCN: {{exp|export}} invalid_target_11 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
169 ; GCN: {{exp|export}} invalid_target_11 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
170 define amdgpu_kernel void @test_export_reserved11_f32() #0 {
171   call void @llvm.amdgcn.exp.f32(i32 11, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false)
172   call void @llvm.amdgcn.exp.f32(i32 11, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
173   ret void
176 ; GCN-LABEL: {{^}}test_export_pos0_f32:
177 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
178 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
179 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
180 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
181 ; GCN: {{exp|export}} pos0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
182 ; GCN: {{exp|export}} pos0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
183 define amdgpu_kernel void @test_export_pos0_f32() #0 {
184   call void @llvm.amdgcn.exp.f32(i32 12, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false)
185   call void @llvm.amdgcn.exp.f32(i32 12, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
186   ret void
189 ; GCN-LABEL: {{^}}test_export_pos3_f32:
190 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
191 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
192 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
193 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
194 ; GCN: {{exp|export}} pos3 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
195 ; GCN: {{exp|export}} pos3 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
196 define amdgpu_kernel void @test_export_pos3_f32() #0 {
197   call void @llvm.amdgcn.exp.f32(i32 15, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false)
198   call void @llvm.amdgcn.exp.f32(i32 15, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
199   ret void
202 ; GCN-LABEL: {{^}}test_export_param0_f32:
203 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
204 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
205 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
206 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
207 ; PREGFX11: {{exp|export}} param0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
208 ; PREGFX11: {{exp|export}} param0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
209 define amdgpu_kernel void @test_export_param0_f32() #0 {
210   call void @llvm.amdgcn.exp.f32(i32 32, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false)
211   call void @llvm.amdgcn.exp.f32(i32 32, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
212   ret void
215 ; GCN-LABEL: {{^}}test_export_param31_f32:
216 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
217 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
218 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
219 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
220 ; PREGFX11: {{exp|export}} param31 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
221 ; PREGFX11: {{exp|export}} param31 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
222 define amdgpu_kernel void @test_export_param31_f32() #0 {
223   call void @llvm.amdgcn.exp.f32(i32 63, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false)
224   call void @llvm.amdgcn.exp.f32(i32 63, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false)
225   ret void
228 ; GCN-LABEL: {{^}}test_export_vm_f32:
229 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0
230 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0
231 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5
232 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0
233 ; PREGFX11: {{exp|export}} mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] vm{{$}}
234 ; PREGFX11: {{exp|export}} mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done vm{{$}}
235 ; GFX11: {{exp|export}} mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
236 ; GFX11: {{exp|export}} mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
237 define amdgpu_kernel void @test_export_vm_f32() #0 {
238   call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 true)
239   call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 true)
240   ret void
257 ; GCN-LABEL: {{^}}test_export_zeroes_i32:
258 ; GCN: {{exp|export}} mrt0 off, off, off, off{{$}}
259 ; GCN: {{exp|export}} mrt0 off, off, off, off done{{$}}
260 define amdgpu_kernel void @test_export_zeroes_i32() #0 {
262   call void @llvm.amdgcn.exp.i32(i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false)
263   call void @llvm.amdgcn.exp.i32(i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 true, i1 false)
264   ret void
267 ; FIXME: Should not set up registers for the unused source registers.
269 ; GCN-LABEL: {{^}}test_export_en_src0_i32:
270 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
271 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
272 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
273 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
274 ; GCN: {{exp|export}} mrt0 [[SRC0]], off, off, off done{{$}}
275 define amdgpu_kernel void @test_export_en_src0_i32() #0 {
276   call void @llvm.amdgcn.exp.i32(i32 0, i32 1, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
277   ret void
280 ; GCN-LABEL: {{^}}test_export_en_src1_i32:
281 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
282 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
283 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
284 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
285 ; GCN: {{exp|export}} mrt0 off, [[SRC1]], off, off done{{$}}
286 define amdgpu_kernel void @test_export_en_src1_i32() #0 {
287   call void @llvm.amdgcn.exp.i32(i32 0, i32 2, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
288   ret void
291 ; GCN-LABEL: {{^}}test_export_en_src2_i32:
292 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
293 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
294 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
295 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
296 ; GCN: {{exp|export}} mrt0 off, off, [[SRC2]], off done{{$}}
297 define amdgpu_kernel void @test_export_en_src2_i32() #0 {
298   call void @llvm.amdgcn.exp.i32(i32 0, i32 4, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
299   ret void
302 ; GCN-LABEL: {{^}}test_export_en_src3_i32:
303 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
304 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
305 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
306 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
307 ; GCN: {{exp|export}} mrt0 off, off, off, [[SRC3]] done{{$}}
308 define amdgpu_kernel void @test_export_en_src3_i32() #0 {
309   call void @llvm.amdgcn.exp.i32(i32 0, i32 8, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
310   ret void
313 ; GCN-LABEL: {{^}}test_export_en_src0_src1_i32:
314 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
315 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
316 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
317 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
318 ; GCN: {{exp|export}} mrt0 [[SRC0]], [[SRC1]], off, off done{{$}}
319 define amdgpu_kernel void @test_export_en_src0_src1_i32() #0 {
320   call void @llvm.amdgcn.exp.i32(i32 0, i32 3, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
321   ret void
324 ; GCN-LABEL: {{^}}test_export_en_src0_src2_i32:
325 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
326 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
327 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
328 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
329 ; GCN: {{exp|export}} mrt0 [[SRC0]], off, [[SRC2]], off done{{$}}
330 define amdgpu_kernel void @test_export_en_src0_src2_i32() #0 {
331   call void @llvm.amdgcn.exp.i32(i32 0, i32 5, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
332   ret void
335 ; GCN-LABEL: {{^}}test_export_en_src0_src3_i32:
336 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
337 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
338 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
339 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
340 ; GCN: {{exp|export}} mrt0 [[SRC0]], off, off, [[SRC3]]{{$}}
341 ; GCN: {{exp|export}} mrt0 [[SRC0]], off, off, [[SRC3]] done{{$}}
342 define amdgpu_kernel void @test_export_en_src0_src3_i32() #0 {
343   call void @llvm.amdgcn.exp.i32(i32 0, i32 9, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false)
344   call void @llvm.amdgcn.exp.i32(i32 0, i32 9, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
345   ret void
348 ; GCN-LABEL: {{^}}test_export_en_src0_src1_src2_src3_i32:
349 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
350 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
351 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
352 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
353 ; GCN: {{exp|export}} mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
354 ; GCN: {{exp|export}} mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
355 define amdgpu_kernel void @test_export_en_src0_src1_src2_src3_i32() #0 {
356   call void @llvm.amdgcn.exp.i32(i32 0, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false)
357   call void @llvm.amdgcn.exp.i32(i32 0, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
358   ret void
361 ; GCN-LABEL: {{^}}test_export_mrt7_i32:
362 ; GCN-DAG: v_mov_b32_e32 [[VHALF:v[0-9]+]], 5
363 ; GCN: {{exp|export}} mrt7 [[VHALF]], [[VHALF]], [[VHALF]], [[VHALF]]{{$}}
364 ; GCN: {{exp|export}} mrt7 [[VHALF]], [[VHALF]], [[VHALF]], [[VHALF]] done{{$}}
365 define amdgpu_kernel void @test_export_mrt7_i32() #0 {
366   call void @llvm.amdgcn.exp.i32(i32 7, i32 15, i32 5, i32 5, i32 5, i32 5, i1 false, i1 false)
367   call void @llvm.amdgcn.exp.i32(i32 7, i32 15, i32 5, i32 5, i32 5, i32 5, i1 true, i1 false)
368   ret void
371 ; GCN-LABEL: {{^}}test_export_z_i32:
372 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
373 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
374 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
375 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
376 ; GCN: {{exp|export}} mrtz [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
377 ; GCN: {{exp|export}} mrtz [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
378 define amdgpu_kernel void @test_export_z_i32() #0 {
379   call void @llvm.amdgcn.exp.i32(i32 8, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false)
380   call void @llvm.amdgcn.exp.i32(i32 8, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
381   ret void
384 ; GCN-LABEL: {{^}}test_export_null_i32:
385 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
386 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
387 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
388 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
389 ; PREGFX11: {{exp|export}} null [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
390 ; PREGFX11: {{exp|export}} null [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
391 define amdgpu_kernel void @test_export_null_i32() #0 {
392   call void @llvm.amdgcn.exp.i32(i32 9, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false)
393   call void @llvm.amdgcn.exp.i32(i32 9, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
394   ret void
397 ; GCN-LABEL: {{^}}test_export_reserved10_i32:
398 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
399 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
400 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
401 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
402 ; GCN: {{exp|export}} invalid_target_10 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
403 ; GCN: {{exp|export}} invalid_target_10 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
404 define amdgpu_kernel void @test_export_reserved10_i32() #0 {
405   call void @llvm.amdgcn.exp.i32(i32 10, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false)
406   call void @llvm.amdgcn.exp.i32(i32 10, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
407   ret void
410 ; GCN-LABEL: {{^}}test_export_reserved11_i32:
411 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
412 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
413 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
414 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
415 ; GCN: {{exp|export}} invalid_target_11 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
416 ; GCN: {{exp|export}} invalid_target_11 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
417 define amdgpu_kernel void @test_export_reserved11_i32() #0 {
418   call void @llvm.amdgcn.exp.i32(i32 11, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false)
419   call void @llvm.amdgcn.exp.i32(i32 11, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
420   ret void
423 ; GCN-LABEL: {{^}}test_export_pos0_i32:
424 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
425 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
426 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
427 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
428 ; GCN: {{exp|export}} pos0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
429 ; GCN: {{exp|export}} pos0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
430 define amdgpu_kernel void @test_export_pos0_i32() #0 {
431   call void @llvm.amdgcn.exp.i32(i32 12, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false)
432   call void @llvm.amdgcn.exp.i32(i32 12, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
433   ret void
436 ; GCN-LABEL: {{^}}test_export_pos3_i32:
437 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
438 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
439 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
440 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
441 ; GCN: {{exp|export}} pos3 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
442 ; GCN: {{exp|export}} pos3 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
443 define amdgpu_kernel void @test_export_pos3_i32() #0 {
444   call void @llvm.amdgcn.exp.i32(i32 15, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false)
445   call void @llvm.amdgcn.exp.i32(i32 15, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
446   ret void
449 ; GCN-LABEL: {{^}}test_export_param0_i32:
450 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
451 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
452 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
453 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
454 ; PREGFX11: {{exp|export}} param0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
455 ; PREGFX11: {{exp|export}} param0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
456 define amdgpu_kernel void @test_export_param0_i32() #0 {
457   call void @llvm.amdgcn.exp.i32(i32 32, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false)
458   call void @llvm.amdgcn.exp.i32(i32 32, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
459   ret void
462 ; GCN-LABEL: {{^}}test_export_param31_i32:
463 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
464 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
465 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
466 ; PREGFX11-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
467 ; PREGFX11: {{exp|export}} param31 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
468 ; PREGFX11: {{exp|export}} param31 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
469 define amdgpu_kernel void @test_export_param31_i32() #0 {
470   call void @llvm.amdgcn.exp.i32(i32 63, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false)
471   call void @llvm.amdgcn.exp.i32(i32 63, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false)
472   ret void
475 ; GCN-LABEL: {{^}}test_export_vm_i32:
476 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1
477 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2
478 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5
479 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4
480 ; PREGFX11: {{exp|export}} mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] vm{{$}}
481 ; PREGFX11: {{exp|export}} mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done vm{{$}}
482 ; GFX11: {{exp|export}} mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}}
483 ; GFX11: {{exp|export}} mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}}
484 define amdgpu_kernel void @test_export_vm_i32() #0 {
485   call void @llvm.amdgcn.exp.i32(i32 0, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 true)
486   call void @llvm.amdgcn.exp.i32(i32 0, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 true)
487   ret void
490 ; GCN-LABEL: {{^}}test_if_export_f32:
491 ; GCN: s_cbranch_execz
492 ; GCN: exp
493 define amdgpu_ps void @test_if_export_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 {
494   %cc = icmp eq i32 %flag, 0
495   br i1 %cc, label %end, label %exp
497 exp:
498   call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 false, i1 false)
499   br label %end
501 end:
502   ret void
505 ; GCN-LABEL: {{^}}test_if_export_vm_f32:
506 ; GCN: s_cbranch_execz
507 ; GCN: exp
508 define amdgpu_ps void @test_if_export_vm_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 {
509   %cc = icmp eq i32 %flag, 0
510   br i1 %cc, label %end, label %exp
512 exp:
513   call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 false, i1 true)
514   br label %end
516 end:
517   ret void
520 ; GCN-LABEL: {{^}}test_if_export_done_f32:
521 ; GCN: s_cbranch_execz
522 ; GCN: exp
523 define amdgpu_ps void @test_if_export_done_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 {
524   %cc = icmp eq i32 %flag, 0
525   br i1 %cc, label %end, label %exp
527 exp:
528   call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 true, i1 false)
529   br label %end
531 end:
532   ret void
535 ; GCN-LABEL: {{^}}test_if_export_vm_done_f32:
536 ; GCN: s_cbranch_execz
537 ; GCN: exp
538 define amdgpu_ps void @test_if_export_vm_done_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 {
539   %cc = icmp eq i32 %flag, 0
540   br i1 %cc, label %end, label %exp
542 exp:
543   call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 true, i1 true)
544   br label %end
546 end:
547   ret void
550 ; GCN-LABEL: {{^}}test_export_clustering:
551 ; PREGFX11-DAG: v_mov_b32_e32 [[W0:v[0-9]+]], 0
552 ; PREGFX11-DAG: v_mov_b32_e32 [[W1:v[0-9]+]], 1.0
554 ; GFX8-DAG: v_mov_b32_e32 [[X:v[0-9]+]], s1
555 ; GFX8-DAG: v_mov_b32_e32 [[Y:v[0-9]+]], s0
556 ; GFX8-DAG: v_add_f32_e{{32|64}} [[Z0:v[0-9]+]]
557 ; GFX8-DAG: v_sub_f32_e{{32|64}} [[Z1:v[0-9]+]]
558 ; GFX8: {{exp|export}} param0 [[Y]], [[X]], [[Z0]], [[W0]]{{$}}
559 ; GFX8-NEXT: {{exp|export}} param1 [[Y]], [[X]], [[Z1]], [[W1]] done{{$}}
561 ; GFX10-DAG: v_mov_b32_e32 [[X:v[0-9]+]], s0
562 ; GFX10-DAG: v_mov_b32_e32 [[Y:v[0-9]+]], s1
563 ; GFX10-DAG: v_add_f32_e{{32|64}} [[Z0:v[0-9]+]]
564 ; GFX10-DAG: v_sub_f32_e{{32|64}} [[Z1:v[0-9]+]]
565 ; GFX10: {{exp|export}} param0 [[X]], [[Y]], [[Z0]], [[W0]]{{$}}
566 ; GFX10-NEXT: {{exp|export}} param1 [[X]], [[Y]], [[Z1]], [[W1]] done{{$}}
567 define amdgpu_kernel void @test_export_clustering(float %x, float %y) #0 {
568   %z0 = fadd float %x, %y
569   call void @llvm.amdgcn.exp.f32(i32 32, i32 15, float %x, float %y, float %z0, float 0.0, i1 false, i1 false)
570   %z1 = fsub float %y, %x
571   call void @llvm.amdgcn.exp.f32(i32 33, i32 15, float %x, float %y, float %z1, float 1.0, i1 true, i1 false)
572   ret void
575 ; GCN-LABEL: {{^}}test_export_pos_before_param:
576 ; PREGFX11: {{exp|export}} pos0
577 ; PREGFX11-NOT: s_waitcnt
578 ; PREGFX11: {{exp|export}} param0
579 define amdgpu_kernel void @test_export_pos_before_param(float %x, float %y) #0 {
580   %z0 = fadd float %x, %y
581   call void @llvm.amdgcn.exp.f32(i32 32, i32 15, float 1.0, float 1.0, float 1.0, float %z0, i1 false, i1 false)
582   %z1 = fsub float %y, %x
583   call void @llvm.amdgcn.exp.f32(i32 12, i32 15, float 0.0, float 0.0, float 0.0, float %z1, i1 true, i1 false)
584   ret void
587 ; GCN-LABEL: {{^}}test_export_pos4_before_param:
588 ; GFX10: {{exp|export}} pos4
589 ; GFX10-NOT: s_waitcnt
590 ; GFX10: {{exp|export}} param0
591 define amdgpu_kernel void @test_export_pos4_before_param(float %x, float %y) #0 {
592   %z0 = fadd float %x, %y
593   call void @llvm.amdgcn.exp.f32(i32 32, i32 15, float 1.0, float 1.0, float 1.0, float %z0, i1 false, i1 false)
594   %z1 = fsub float %y, %x
595   call void @llvm.amdgcn.exp.f32(i32 16, i32 15, float 0.0, float 0.0, float 0.0, float %z1, i1 true, i1 false)
596   ret void
599 ; GCN-LABEL: {{^}}test_export_pos_before_param_ordered:
600 ; PREGFX11: {{exp|export}} pos0
601 ; PREGFX11: {{exp|export}} pos1
602 ; PREGFX11: {{exp|export}} pos2
603 ; PREGFX11-NOT: s_waitcnt
604 ; PREGFX11: {{exp|export}} param0
605 ; PREGFX11: {{exp|export}} param1
606 ; PREGFX11: {{exp|export}} param2
607 define amdgpu_kernel void @test_export_pos_before_param_ordered(float %x, float %y) #0 {
608   %z0 = fadd float %x, %y
609   call void @llvm.amdgcn.exp.f32(i32 32, i32 15, float 1.0, float 1.0, float 1.0, float %z0, i1 false, i1 false)
610   call void @llvm.amdgcn.exp.f32(i32 33, i32 15, float 1.0, float 1.0, float 1.0, float %z0, i1 false, i1 false)
611   call void @llvm.amdgcn.exp.f32(i32 34, i32 15, float 1.0, float 1.0, float 1.0, float %z0, i1 false, i1 false)
612   %z1 = fsub float %y, %x
613   call void @llvm.amdgcn.exp.f32(i32 12, i32 15, float 0.0, float 0.0, float 0.0, float %z1, i1 false, i1 false)
614   call void @llvm.amdgcn.exp.f32(i32 13, i32 15, float 0.0, float 0.0, float 0.0, float %z1, i1 false, i1 false)
615   call void @llvm.amdgcn.exp.f32(i32 14, i32 15, float 0.0, float 0.0, float 0.0, float %z1, i1 true, i1 false)
616   ret void
619 ; GCN-LABEL: {{^}}test_export_pos_before_param_across_load:
620 ; PREGFX11: {{exp|export}} pos0
621 ; PREGFX11-NEXT: {{exp|export}} param0
622 ; PREGFX11-NEXT: {{exp|export}} param1
623 define amdgpu_kernel void @test_export_pos_before_param_across_load(i32 %idx) #0 {
624   call void @llvm.amdgcn.exp.f32(i32 32, i32 15, float 1.0, float 1.0, float 1.0, float 1.0, i1 false, i1 false)
625   call void @llvm.amdgcn.exp.f32(i32 33, i32 15, float 1.0, float 1.0, float 1.0, float 0.5, i1 false, i1 false)
626   %load = call float @llvm.amdgcn.raw.ptr.buffer.load.f32(ptr addrspace(8) undef, i32 %idx, i32 0, i32 0)
627   call void @llvm.amdgcn.exp.f32(i32 12, i32 15, float 0.0, float 0.0, float 0.0, float %load, i1 true, i1 false)
628   ret void
631 ; GCN-LABEL: {{^}}test_export_across_store_load:
632 ; PREGFX11: buffer_store
633 ; PREGFX11: buffer_load
634 ; PREGFX11: {{exp|export}} pos0
635 ; PREGFX11: {{exp|export}} param0
636 ; PREGFX11: {{exp|export}} param1
637 define amdgpu_kernel void @test_export_across_store_load(i32 %idx, float %v) #0 {
638   %data0 = alloca <4 x float>, align 8, addrspace(5)
639   %data1 = alloca <4 x float>, align 8, addrspace(5)
640   %cmp = icmp eq i32 %idx, 1
641   %data = select i1 %cmp, ptr addrspace(5) %data0, ptr addrspace(5) %data1
642   store float %v, ptr addrspace(5) %data, align 8
643   call void @llvm.amdgcn.exp.f32(i32 12, i32 15, float 0.0, float 0.0, float 0.0, float 1.0, i1 true, i1 false)
644   %load0 = load float, ptr addrspace(5) %data0, align 8
645   call void @llvm.amdgcn.exp.f32(i32 32, i32 15, float %load0, float 0.0, float 1.0, float 0.0, i1 false, i1 false)
646   call void @llvm.amdgcn.exp.f32(i32 33, i32 15, float %load0, float 0.0, float 1.0, float 0.0, i1 false, i1 false)
647   ret void
650 attributes #0 = { nounwind }
651 attributes #1 = { nounwind inaccessiblememonly }
652 attributes #2 = { nounwind readnone }