[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AMDGPU / llvm.amdgcn.image.store.a16.d16.ll
blob48d26f7db20a184ca8bf25c7ef8da0005889fc23
1 ; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN %s
3 ; GCN-LABEL: {{^}}store.f16.1d:
4 ; GCN: image_store v[1:2], v0, s[0:7] dmask:0x1 unorm a16 d16
5 define amdgpu_ps void @store.f16.1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <2 x i32> %val) {
6 main_body:
7   %x = extractelement <2 x i16> %coords, i32 0
8   %bitcast = bitcast <2 x i32> %val to <4 x half>
9   call void @llvm.amdgcn.image.store.1d.v4f16.i16(<4 x half> %bitcast, i32 1, i16 %x, <8 x i32> %rsrc, i32 0, i32 0)
10   ret void
13 ; GCN-LABEL: {{^}}store.v2f16.1d:
14 ; GCN: image_store v[1:2], v0, s[0:7] dmask:0x3 unorm a16 d16
15 define amdgpu_ps void @store.v2f16.1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <2 x i32> %val) {
16 main_body:
17   %x = extractelement <2 x i16> %coords, i32 0
18   %bitcast = bitcast <2 x i32> %val to <4 x half>
19   call void @llvm.amdgcn.image.store.1d.v4f16.i16(<4 x half> %bitcast, i32 3, i16 %x, <8 x i32> %rsrc, i32 0, i32 0)
20   ret void
23 ; GCN-LABEL: {{^}}store.v3f16.1d:
24 ; GCN: image_store v[1:2], v0, s[0:7] dmask:0x7 unorm a16 d16
25 define amdgpu_ps void @store.v3f16.1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <2 x i32> %val) {
26 main_body:
27   %x = extractelement <2 x i16> %coords, i32 0
28   %bitcast = bitcast <2 x i32> %val to <4 x half>
29   call void @llvm.amdgcn.image.store.1d.v4f16.i16(<4 x half> %bitcast, i32 7, i16 %x, <8 x i32> %rsrc, i32 0, i32 0)
30   ret void
33 ; GCN-LABEL: {{^}}store.v4f16.1d:
34 ; GCN: image_store v[1:2], v0, s[0:7] dmask:0xf unorm a16 d16
35 define amdgpu_ps void @store.v4f16.1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <2 x i32> %val) {
36 main_body:
37   %x = extractelement <2 x i16> %coords, i32 0
38   %bitcast = bitcast <2 x i32> %val to <4 x half>
39   call void @llvm.amdgcn.image.store.1d.v4f16.i16(<4 x half> %bitcast, i32 15, i16 %x, <8 x i32> %rsrc, i32 0, i32 0)
40   ret void
43 ; GCN-LABEL: {{^}}store.f16.2d:
44 ; GCN: image_store v[1:2], v0, s[0:7] dmask:0x1 unorm a16 d16
45 define amdgpu_ps void @store.f16.2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <2 x i32> %val) {
46 main_body:
47   %x = extractelement <2 x i16> %coords, i32 0
48   %y = extractelement <2 x i16> %coords, i32 1
49   %bitcast = bitcast <2 x i32> %val to <4 x half>
50   call void @llvm.amdgcn.image.store.2d.v4f16.i16(<4 x half> %bitcast, i32 1, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0)
51   ret void
54 ; GCN-LABEL: {{^}}store.v2f16.2d:
55 ; GCN: image_store v[1:2], v0, s[0:7] dmask:0x3 unorm a16 d16
56 define amdgpu_ps void @store.v2f16.2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <2 x i32> %val) {
57 main_body:
58   %x = extractelement <2 x i16> %coords, i32 0
59   %y = extractelement <2 x i16> %coords, i32 1
60   %bitcast = bitcast <2 x i32> %val to <4 x half>
61   call void @llvm.amdgcn.image.store.2d.v4f16.i16(<4 x half> %bitcast, i32 3, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0)
62   ret void
65 ; GCN-LABEL: {{^}}store.v3f16.2d:
66 ; GCN: image_store v[1:2], v0, s[0:7] dmask:0x7 unorm a16 d16
67 define amdgpu_ps void @store.v3f16.2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <2 x i32> %val) {
68 main_body:
69   %x = extractelement <2 x i16> %coords, i32 0
70   %y = extractelement <2 x i16> %coords, i32 1
71   %bitcast = bitcast <2 x i32> %val to <4 x half>
72   call void @llvm.amdgcn.image.store.2d.v4f16.i16(<4 x half> %bitcast, i32 7, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0)
73   ret void
76 ; GCN-LABEL: {{^}}store.v4f16.2d:
77 ; GCN: image_store v[1:2], v0, s[0:7] dmask:0xf unorm a16 d16
78 define amdgpu_ps void @store.v4f16.2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <2 x i32> %val) {
79 main_body:
80   %x = extractelement <2 x i16> %coords, i32 0
81   %y = extractelement <2 x i16> %coords, i32 1
82   %bitcast = bitcast <2 x i32> %val to <4 x half>
83   call void @llvm.amdgcn.image.store.2d.v4f16.i16(<4 x half> %bitcast, i32 15, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0)
84   ret void
87 ; GCN-LABEL: {{^}}store.f16.3d:
88 ; GCN: image_store v[2:3], v[0:1], s[0:7] dmask:0x1 unorm a16 d16
89 define amdgpu_ps void @store.f16.3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi, <2 x i32> %val) {
90 main_body:
91   %x = extractelement <2 x i16> %coords_lo, i32 0
92   %y = extractelement <2 x i16> %coords_lo, i32 1
93   %z = extractelement <2 x i16> %coords_hi, i32 0
94   %bitcast = bitcast <2 x i32> %val to <4 x half>
95   call void @llvm.amdgcn.image.store.3d.v4f16.i16(<4 x half> %bitcast, i32 1, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0)
96   ret void
99 ; GCN-LABEL: {{^}}store.v2f16.3d:
100 ; GCN: image_store v[2:3], v[0:1], s[0:7] dmask:0x3 unorm a16 d16
101 define amdgpu_ps void @store.v2f16.3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi, <2 x i32> %val) {
102 main_body:
103   %x = extractelement <2 x i16> %coords_lo, i32 0
104   %y = extractelement <2 x i16> %coords_lo, i32 1
105   %z = extractelement <2 x i16> %coords_hi, i32 0
106   %bitcast = bitcast <2 x i32> %val to <4 x half>
107   call void @llvm.amdgcn.image.store.3d.v4f16.i16(<4 x half> %bitcast, i32 3, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0)
108   ret void
111 ; GCN-LABEL: {{^}}store.v3f16.3d:
112 ; GCN: image_store v[2:3], v[0:1], s[0:7] dmask:0x7 unorm a16 d16
113 define amdgpu_ps void @store.v3f16.3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi, <2 x i32> %val) {
114 main_body:
115   %x = extractelement <2 x i16> %coords_lo, i32 0
116   %y = extractelement <2 x i16> %coords_lo, i32 1
117   %z = extractelement <2 x i16> %coords_hi, i32 0
118   %bitcast = bitcast <2 x i32> %val to <4 x half>
119   call void @llvm.amdgcn.image.store.3d.v4f16.i16(<4 x half> %bitcast, i32 7, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0)
120   ret void
123 ; GCN-LABEL: {{^}}store.v4f16.3d:
124 ; GCN: image_store v[2:3], v[0:1], s[0:7] dmask:0xf unorm a16 d16
125 define amdgpu_ps void @store.v4f16.3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi, <2 x i32> %val) {
126 main_body:
127   %x = extractelement <2 x i16> %coords_lo, i32 0
128   %y = extractelement <2 x i16> %coords_lo, i32 1
129   %z = extractelement <2 x i16> %coords_hi, i32 0
130   %bitcast = bitcast <2 x i32> %val to <4 x half>
131   call void @llvm.amdgcn.image.store.3d.v4f16.i16(<4 x half> %bitcast, i32 15, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0)
132   ret void
135 declare void @llvm.amdgcn.image.store.1d.v4f16.i16(<4 x half>, i32, i16, <8 x i32>, i32, i32) #2
136 declare void @llvm.amdgcn.image.store.2d.v4f16.i16(<4 x half>, i32, i16, i16, <8 x i32>, i32, i32) #2
137 declare void @llvm.amdgcn.image.store.3d.v4f16.i16(<4 x half>, i32, i16, i16, i16, <8 x i32>, i32, i32) #2
139 attributes #0 = { nounwind }
140 attributes #1 = { nounwind readonly }