1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -global-isel-abort=2 -pass-remarks-missed='gisel*' -verify-machineinstrs %s -o - 2>%t | FileCheck -check-prefix=GFX9 %s
3 # RUN: FileCheck -check-prefixes=ERR-GFX910,ERR %s < %t
5 # RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -global-isel-abort=2 -pass-remarks-missed='gisel*' -verify-machineinstrs %s -o - 2>%t | FileCheck -check-prefix=GFX10 %s
6 # RUN: FileCheck -check-prefixes=ERR-GFX910,ERR %s < %t
9 # ERR-GFX910: remark: <unknown>:0:0: cannot select: %2:sgpr(<2 x s16>) = G_ASHR %0:sgpr, %1:sgpr(<2 x s16>) (in function: ashr_v2s16_ss)
19 liveins: $sgpr0, $sgpr1
20 ; GFX6-LABEL: name: ashr_v2s16_ss
21 ; GFX6: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
22 ; GFX6: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1
23 ; GFX6: [[ASHR:%[0-9]+]]:sgpr(<2 x s16>) = G_ASHR [[COPY]], [[COPY1]](<2 x s16>)
24 ; GFX6: S_ENDPGM 0, implicit [[ASHR]](<2 x s16>)
25 ; GFX7-LABEL: name: ashr_v2s16_ss
26 ; GFX7: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
27 ; GFX7: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1
28 ; GFX7: [[ASHR:%[0-9]+]]:sgpr(<2 x s16>) = G_ASHR [[COPY]], [[COPY1]](<2 x s16>)
29 ; GFX7: S_ENDPGM 0, implicit [[ASHR]](<2 x s16>)
30 ; GFX8-LABEL: name: ashr_v2s16_ss
31 ; GFX8: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
32 ; GFX8: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1
33 ; GFX8: [[ASHR:%[0-9]+]]:sgpr(<2 x s16>) = G_ASHR [[COPY]], [[COPY1]](<2 x s16>)
34 ; GFX8: S_ENDPGM 0, implicit [[ASHR]](<2 x s16>)
35 ; GFX9-LABEL: name: ashr_v2s16_ss
36 ; GFX9: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
37 ; GFX9: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1
38 ; GFX9: [[ASHR:%[0-9]+]]:sgpr(<2 x s16>) = G_ASHR [[COPY]], [[COPY1]](<2 x s16>)
39 ; GFX9: S_ENDPGM 0, implicit [[ASHR]](<2 x s16>)
40 ; GFX10-LABEL: name: ashr_v2s16_ss
41 ; GFX10: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
42 ; GFX10: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1
43 ; GFX10: [[ASHR:%[0-9]+]]:sgpr(<2 x s16>) = G_ASHR [[COPY]], [[COPY1]](<2 x s16>)
44 ; GFX10: S_ENDPGM 0, implicit [[ASHR]](<2 x s16>)
45 %0:sgpr(<2 x s16>) = COPY $sgpr0
46 %1:sgpr(<2 x s16>) = COPY $sgpr1
47 %2:sgpr(<2 x s16>) = G_ASHR %0, %1
48 S_ENDPGM 0, implicit %2
58 liveins: $sgpr0, $vgpr0
59 ; GFX6-LABEL: name: ashr_v2s16_sv
60 ; GFX6: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
61 ; GFX6: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
62 ; GFX6: [[ASHR:%[0-9]+]]:vgpr(<2 x s16>) = G_ASHR [[COPY]], [[COPY1]](<2 x s16>)
63 ; GFX6: S_ENDPGM 0, implicit [[ASHR]](<2 x s16>)
64 ; GFX7-LABEL: name: ashr_v2s16_sv
65 ; GFX7: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
66 ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
67 ; GFX7: [[ASHR:%[0-9]+]]:vgpr(<2 x s16>) = G_ASHR [[COPY]], [[COPY1]](<2 x s16>)
68 ; GFX7: S_ENDPGM 0, implicit [[ASHR]](<2 x s16>)
69 ; GFX8-LABEL: name: ashr_v2s16_sv
70 ; GFX8: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
71 ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
72 ; GFX8: [[ASHR:%[0-9]+]]:vgpr(<2 x s16>) = G_ASHR [[COPY]], [[COPY1]](<2 x s16>)
73 ; GFX8: S_ENDPGM 0, implicit [[ASHR]](<2 x s16>)
74 ; GFX9-LABEL: name: ashr_v2s16_sv
75 ; GFX9: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
76 ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
77 ; GFX9: [[V_PK_ASHRREV_I16_:%[0-9]+]]:vgpr_32 = V_PK_ASHRREV_I16 8, [[COPY1]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $exec
78 ; GFX9: S_ENDPGM 0, implicit [[V_PK_ASHRREV_I16_]]
79 ; GFX10-LABEL: name: ashr_v2s16_sv
80 ; GFX10: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
81 ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
82 ; GFX10: [[V_PK_ASHRREV_I16_:%[0-9]+]]:vgpr_32 = V_PK_ASHRREV_I16 8, [[COPY1]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $exec
83 ; GFX10: S_ENDPGM 0, implicit [[V_PK_ASHRREV_I16_]]
84 %0:sgpr(<2 x s16>) = COPY $sgpr0
85 %1:vgpr(<2 x s16>) = COPY $vgpr0
86 %2:vgpr(<2 x s16>) = G_ASHR %0, %1
87 S_ENDPGM 0, implicit %2
97 liveins: $sgpr0, $vgpr0
98 ; GFX6-LABEL: name: ashr_v2s16_vs
99 ; GFX6: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
100 ; GFX6: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
101 ; GFX6: [[ASHR:%[0-9]+]]:vgpr(<2 x s16>) = G_ASHR [[COPY]], [[COPY1]](<2 x s16>)
102 ; GFX6: S_ENDPGM 0, implicit [[ASHR]](<2 x s16>)
103 ; GFX7-LABEL: name: ashr_v2s16_vs
104 ; GFX7: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
105 ; GFX7: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
106 ; GFX7: [[ASHR:%[0-9]+]]:vgpr(<2 x s16>) = G_ASHR [[COPY]], [[COPY1]](<2 x s16>)
107 ; GFX7: S_ENDPGM 0, implicit [[ASHR]](<2 x s16>)
108 ; GFX8-LABEL: name: ashr_v2s16_vs
109 ; GFX8: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
110 ; GFX8: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
111 ; GFX8: [[ASHR:%[0-9]+]]:vgpr(<2 x s16>) = G_ASHR [[COPY]], [[COPY1]](<2 x s16>)
112 ; GFX8: S_ENDPGM 0, implicit [[ASHR]](<2 x s16>)
113 ; GFX9-LABEL: name: ashr_v2s16_vs
114 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
115 ; GFX9: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0
116 ; GFX9: [[V_PK_ASHRREV_I16_:%[0-9]+]]:vgpr_32 = V_PK_ASHRREV_I16 8, [[COPY1]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $exec
117 ; GFX9: S_ENDPGM 0, implicit [[V_PK_ASHRREV_I16_]]
118 ; GFX10-LABEL: name: ashr_v2s16_vs
119 ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
120 ; GFX10: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0
121 ; GFX10: [[V_PK_ASHRREV_I16_:%[0-9]+]]:vgpr_32 = V_PK_ASHRREV_I16 8, [[COPY1]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $exec
122 ; GFX10: S_ENDPGM 0, implicit [[V_PK_ASHRREV_I16_]]
123 %0:vgpr(<2 x s16>) = COPY $vgpr0
124 %1:sgpr(<2 x s16>) = COPY $sgpr0
125 %2:vgpr(<2 x s16>) = G_ASHR %0, %1
126 S_ENDPGM 0, implicit %2
132 regBankSelected: true
136 liveins: $vgpr0, $vgpr1
137 ; GFX6-LABEL: name: ashr_v2s16_vv
138 ; GFX6: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
139 ; GFX6: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr1
140 ; GFX6: [[ASHR:%[0-9]+]]:vgpr(<2 x s16>) = G_ASHR [[COPY]], [[COPY1]](<2 x s16>)
141 ; GFX6: S_ENDPGM 0, implicit [[ASHR]](<2 x s16>)
142 ; GFX7-LABEL: name: ashr_v2s16_vv
143 ; GFX7: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
144 ; GFX7: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr1
145 ; GFX7: [[ASHR:%[0-9]+]]:vgpr(<2 x s16>) = G_ASHR [[COPY]], [[COPY1]](<2 x s16>)
146 ; GFX7: S_ENDPGM 0, implicit [[ASHR]](<2 x s16>)
147 ; GFX8-LABEL: name: ashr_v2s16_vv
148 ; GFX8: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
149 ; GFX8: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr1
150 ; GFX8: [[ASHR:%[0-9]+]]:vgpr(<2 x s16>) = G_ASHR [[COPY]], [[COPY1]](<2 x s16>)
151 ; GFX8: S_ENDPGM 0, implicit [[ASHR]](<2 x s16>)
152 ; GFX9-LABEL: name: ashr_v2s16_vv
153 ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
154 ; GFX9: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
155 ; GFX9: [[V_PK_ASHRREV_I16_:%[0-9]+]]:vgpr_32 = V_PK_ASHRREV_I16 8, [[COPY1]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $exec
156 ; GFX9: S_ENDPGM 0, implicit [[V_PK_ASHRREV_I16_]]
157 ; GFX10-LABEL: name: ashr_v2s16_vv
158 ; GFX10: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
159 ; GFX10: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
160 ; GFX10: [[V_PK_ASHRREV_I16_:%[0-9]+]]:vgpr_32 = V_PK_ASHRREV_I16 8, [[COPY1]], 8, [[COPY]], 0, 0, 0, 0, 0, implicit $exec
161 ; GFX10: S_ENDPGM 0, implicit [[V_PK_ASHRREV_I16_]]
162 %0:vgpr(<2 x s16>) = COPY $vgpr0
163 %1:vgpr(<2 x s16>) = COPY $vgpr1
164 %2:vgpr(<2 x s16>) = G_ASHR %0, %1
165 S_ENDPGM 0, implicit %2