Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.amdgcn.buffer.load.dwordx3.ll
blob71130736a3d48fb2fb0d6c165cc6462a117988b0
1 ;RUN: llc < %s -march=amdgcn -mcpu=gfx600 -verify-machineinstrs | FileCheck %s -check-prefixes=CHECK,SI
2 ;RUN: llc < %s -march=amdgcn -mcpu=gfx700 -verify-machineinstrs | FileCheck %s -check-prefixes=CHECK,GCNX3
4 ;CHECK-LABEL: {{^}}buffer_load_format_immoffs_x3:
5 ;SI: buffer_load_format_xyzw v[0:3], off, s[0:3], 0 offset:42
6 ;GCNX3: buffer_load_format_xyz v[0:2], off, s[0:3], 0 offset:42
7 ;CHECK: s_waitcnt
8 define amdgpu_ps <3 x float> @buffer_load_format_immoffs_x3(<4 x i32> inreg) {
9 main_body:
10   %data = call <3 x float> @llvm.amdgcn.buffer.load.format.v3f32(<4 x i32> %0, i32 0, i32 42, i1 0, i1 0)
11   ret <3 x float> %data
14 ;CHECK-LABEL: {{^}}buffer_load_immoffs_x3:
15 ;SI: buffer_load_dwordx4 v[0:3], off, s[0:3], 0 offset:40
16 ;GCNX3: buffer_load_dwordx3 v[0:2], off, s[0:3], 0 offset:40
17 ;CHECK: s_waitcnt
18 define amdgpu_ps <3 x float> @buffer_load_immoffs_x3(<4 x i32> inreg) {
19 main_body:
20   %data = call <3 x float> @llvm.amdgcn.buffer.load.v3f32(<4 x i32> %0, i32 0, i32 40, i1 0, i1 0)
21   ret <3 x float> %data
24 ;CHECK-LABEL: {{^}}buffer_raw_load_immoffs_x3:
25 ;SI: buffer_load_dwordx4 v[0:3], off, s[0:3], 0 offset:40
26 ;GCNX3: buffer_load_dwordx3 v[0:2], off, s[0:3], 0 offset:40
27 ;CHECK: s_waitcnt
28 define amdgpu_ps <3 x float> @buffer_raw_load_immoffs_x3(<4 x i32> inreg) {
29 main_body:
30   %data = call <3 x float> @llvm.amdgcn.raw.buffer.load.v3f32(<4 x i32> %0, i32 40, i32 0, i32 0)
31   ret <3 x float> %data
34 ;CHECK-LABEL: {{^}}buffer_struct_load_format_immoffs_x3:
35 ;SI: buffer_load_format_xyzw v[0:3], {{v[0-9]+}}, s[0:3], 0 idxen offset:42
36 ;GCNX3: buffer_load_format_xyz v[0:2], {{v[0-9]+}}, s[0:3], 0 idxen offset:42
37 ;CHECK: s_waitcnt
38 define amdgpu_ps <3 x float> @buffer_struct_load_format_immoffs_x3(<4 x i32> inreg) {
39 main_body:
40   %data = call <3 x float> @llvm.amdgcn.struct.buffer.load.format.v3f32(<4 x i32> %0, i32 0, i32 42, i32 0, i32 0)
41   ret <3 x float> %data
44 ;CHECK-LABEL: {{^}}struct_buffer_load_immoffs_x3:
45 ;SI: buffer_load_dwordx4 v[0:3], {{v[0-9]+}}, s[0:3], 0 idxen offset:40
46 ;GCNX3: buffer_load_dwordx3 v[0:2], {{v[0-9]+}}, s[0:3], 0 idxen offset:40
47 ;CHECK: s_waitcnt
48 define amdgpu_ps <3 x float> @struct_buffer_load_immoffs_x3(<4 x i32> inreg) {
49 main_body:
50   %data = call <3 x float> @llvm.amdgcn.struct.buffer.load.v3f32(<4 x i32> %0, i32 0, i32 40, i32 0, i32 0)
51   ret <3 x float> %data
54 ;CHECK-LABEL: {{^}}buffer_raw_ptr_load_immoffs_x3:
55 ;SI: buffer_load_dwordx4 v[0:3], off, s[0:3], 0 offset:40
56 ;GCNX3: buffer_load_dwordx3 v[0:2], off, s[0:3], 0 offset:40
57 ;CHECK: s_waitcnt
58 define amdgpu_ps <3 x float> @buffer_raw_ptr_load_immoffs_x3(ptr addrspace(8) inreg) {
59 main_body:
60   %data = call <3 x float> @llvm.amdgcn.raw.ptr.buffer.load.v3f32(ptr addrspace(8) %0, i32 40, i32 0, i32 0)
61   ret <3 x float> %data
64 ;CHECK-LABEL: {{^}}buffer_struct_ptr_load_format_immoffs_x3:
65 ;SI: buffer_load_format_xyzw v[0:3], {{v[0-9]+}}, s[0:3], 0 idxen offset:42
66 ;GCNX3: buffer_load_format_xyz v[0:2], {{v[0-9]+}}, s[0:3], 0 idxen offset:42
67 ;CHECK: s_waitcnt
68 define amdgpu_ps <3 x float> @buffer_struct_ptr_load_format_immoffs_x3(ptr addrspace(8) inreg) {
69 main_body:
70   %data = call <3 x float> @llvm.amdgcn.struct.ptr.buffer.load.format.v3f32(ptr addrspace(8) %0, i32 0, i32 42, i32 0, i32 0)
71   ret <3 x float> %data
74 ;CHECK-LABEL: {{^}}struct_ptr_buffer_load_immoffs_x3:
75 ;SI: buffer_load_dwordx4 v[0:3], {{v[0-9]+}}, s[0:3], 0 idxen offset:40
76 ;GCNX3: buffer_load_dwordx3 v[0:2], {{v[0-9]+}}, s[0:3], 0 idxen offset:40
77 ;CHECK: s_waitcnt
78 define amdgpu_ps <3 x float> @struct_ptr_buffer_load_immoffs_x3(ptr addrspace(8) inreg) {
79 main_body:
80   %data = call <3 x float> @llvm.amdgcn.struct.ptr.buffer.load.v3f32(ptr addrspace(8) %0, i32 0, i32 40, i32 0, i32 0)
81   ret <3 x float> %data
84 declare <3 x float> @llvm.amdgcn.buffer.load.format.v3f32(<4 x i32>, i32, i32, i1, i1) #0
85 declare <3 x float> @llvm.amdgcn.buffer.load.v3f32(<4 x i32>, i32, i32, i1, i1) #0
86 declare <3 x float> @llvm.amdgcn.raw.buffer.load.format.v3f32(<4 x i32>, i32, i32, i32) #0
87 declare <3 x float> @llvm.amdgcn.raw.buffer.load.v3f32(<4 x i32>, i32, i32, i32) #0
88 declare <3 x float> @llvm.amdgcn.struct.buffer.load.format.v3f32(<4 x i32>, i32, i32, i32, i32) #0
89 declare <3 x float> @llvm.amdgcn.struct.buffer.load.v3f32(<4 x i32>, i32, i32, i32, i32) #0
90 declare <3 x float> @llvm.amdgcn.raw.ptr.buffer.load.format.v3f32(ptr addrspace(8), i32, i32, i32) #0
91 declare <3 x float> @llvm.amdgcn.raw.ptr.buffer.load.v3f32(ptr addrspace(8), i32, i32, i32) #0
92 declare <3 x float> @llvm.amdgcn.struct.ptr.buffer.load.format.v3f32(ptr addrspace(8), i32, i32, i32, i32) #0
93 declare <3 x float> @llvm.amdgcn.struct.ptr.buffer.load.v3f32(ptr addrspace(8), i32, i32, i32, i32) #0