[AMDGPU] Make v8i16/v8f16 legal
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-store-global.s96.mir
bloba566455df26eefa37b4f98f11756058122e5fd4c
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=hawaii -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7 %s
3 # RUN: llc -march=amdgcn -mcpu=hawaii -mattr=+flat-for-global -run-pass=instruction-select -verify-machineinstrs  -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX7-FLAT %s
4 # RUN: llc -march=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX8 %s
5 # RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX9 %s
6 # RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s | FileCheck -check-prefix=GFX10 %s
8 # 96-bit load/store is only legal for SI, so split the test out.
10 ---
12 name: store_global_v3s32
13 legalized:       true
14 tracksRegLiveness: true
15 regBankSelected: true
17 body: |
18   bb.0:
19     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
21     ; GFX7-LABEL: name: store_global_v3s32
22     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
23     ; GFX7-NEXT: {{  $}}
24     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
25     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
26     ; GFX7-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
27     ; GFX7-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 61440
28     ; GFX7-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_1]], %subreg.sub1
29     ; GFX7-NEXT: [[S_MOV_B64_:%[0-9]+]]:sreg_64 = S_MOV_B64 0
30     ; GFX7-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:sgpr_128 = REG_SEQUENCE [[S_MOV_B64_]], %subreg.sub0_sub1, [[REG_SEQUENCE]], %subreg.sub2_sub3
31     ; GFX7-NEXT: BUFFER_STORE_DWORDX3_ADDR64 [[COPY1]], [[COPY]], [[REG_SEQUENCE1]], 0, 0, 0, 0, 0, implicit $exec :: (store (<3 x s32>), align 16, addrspace 1)
32     ; GFX7-FLAT-LABEL: name: store_global_v3s32
33     ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
34     ; GFX7-FLAT-NEXT: {{  $}}
35     ; GFX7-FLAT-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
36     ; GFX7-FLAT-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
37     ; GFX7-FLAT-NEXT: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<3 x s32>), align 16, addrspace 1)
38     ; GFX8-LABEL: name: store_global_v3s32
39     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
40     ; GFX8-NEXT: {{  $}}
41     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
42     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
43     ; GFX8-NEXT: FLAT_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec, implicit $flat_scr :: (store (<3 x s32>), align 16, addrspace 1)
44     ; GFX9-LABEL: name: store_global_v3s32
45     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
46     ; GFX9-NEXT: {{  $}}
47     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
48     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
49     ; GFX9-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (<3 x s32>), align 16, addrspace 1)
50     ; GFX10-LABEL: name: store_global_v3s32
51     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
52     ; GFX10-NEXT: {{  $}}
53     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
54     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vreg_96 = COPY $vgpr2_vgpr3_vgpr4
55     ; GFX10-NEXT: GLOBAL_STORE_DWORDX3 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (store (<3 x s32>), align 16, addrspace 1)
56     %0:vgpr(p1) = COPY $vgpr0_vgpr1
57     %1:vgpr(<3 x s32>) = COPY $vgpr2_vgpr3_vgpr4
58     G_STORE %1, %0 :: (store (<3 x s32>), align 16, addrspace 1)
60 ...
62 ---
64 name: store_global_s96
65 legalized:       true
66 tracksRegLiveness: true
67 regBankSelected: true
69 body: |
70   bb.0:
71     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
73     ; GFX6-LABEL: name: store_global_s96
74     ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
75     ; GFX6: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
76     ; GFX6: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
77     ; GFX6: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store 12, align 16, addrspace 1)
78     ; GFX7-LABEL: name: store_global_s96
79     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
80     ; GFX7-NEXT: {{  $}}
81     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
82     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
83     ; GFX7-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16, addrspace 1)
84     ; GFX7-FLAT-LABEL: name: store_global_s96
85     ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
86     ; GFX7-FLAT-NEXT: {{  $}}
87     ; GFX7-FLAT-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
88     ; GFX7-FLAT-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
89     ; GFX7-FLAT-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16, addrspace 1)
90     ; GFX8-LABEL: name: store_global_s96
91     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
92     ; GFX8-NEXT: {{  $}}
93     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
94     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
95     ; GFX8-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16, addrspace 1)
96     ; GFX9-LABEL: name: store_global_s96
97     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
98     ; GFX9-NEXT: {{  $}}
99     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
100     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
101     ; GFX9-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16, addrspace 1)
102     ; GFX10-LABEL: name: store_global_s96
103     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
104     ; GFX10-NEXT: {{  $}}
105     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
106     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
107     ; GFX10-NEXT: G_STORE [[COPY1]](s96), [[COPY]](p1) :: (store (s96), align 16, addrspace 1)
108     %0:vgpr(p1) = COPY $vgpr0_vgpr1
109     %1:vgpr(s96) = COPY $vgpr2_vgpr3_vgpr4
110     G_STORE %1, %0 :: (store (s96), align 16, addrspace 1)
116 name: store_global_v6s16
117 legalized:       true
118 tracksRegLiveness: true
119 regBankSelected: true
121 body: |
122   bb.0:
123     liveins:  $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
125     ; GFX6-LABEL: name: store_global_v6s16
126     ; GFX6: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
127     ; GFX6: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
128     ; GFX6: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
129     ; GFX6: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store 12, align 16, addrspace 1)
130     ; GFX7-LABEL: name: store_global_v6s16
131     ; GFX7: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
132     ; GFX7-NEXT: {{  $}}
133     ; GFX7-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
134     ; GFX7-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
135     ; GFX7-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16, addrspace 1)
136     ; GFX7-FLAT-LABEL: name: store_global_v6s16
137     ; GFX7-FLAT: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
138     ; GFX7-FLAT-NEXT: {{  $}}
139     ; GFX7-FLAT-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
140     ; GFX7-FLAT-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
141     ; GFX7-FLAT-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16, addrspace 1)
142     ; GFX8-LABEL: name: store_global_v6s16
143     ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
144     ; GFX8-NEXT: {{  $}}
145     ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
146     ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
147     ; GFX8-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16, addrspace 1)
148     ; GFX9-LABEL: name: store_global_v6s16
149     ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
150     ; GFX9-NEXT: {{  $}}
151     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
152     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
153     ; GFX9-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16, addrspace 1)
154     ; GFX10-LABEL: name: store_global_v6s16
155     ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4
156     ; GFX10-NEXT: {{  $}}
157     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
158     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
159     ; GFX10-NEXT: G_STORE [[COPY1]](<6 x s16>), [[COPY]](p1) :: (store (<6 x s16>), align 16, addrspace 1)
160     %0:vgpr(p1) = COPY $vgpr0_vgpr1
161     %1:vgpr(<6 x s16>) = COPY $vgpr2_vgpr3_vgpr4
162     G_STORE %1, %0 :: (store (<6 x s16>), align 16, addrspace 1)