1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck %s -check-prefixes=GCN
11 liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5
13 ; GCN-LABEL: name: select_s64_scc
14 ; GCN: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
15 ; GCN: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
16 ; GCN: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
17 ; GCN: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5
18 ; GCN: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc
19 ; GCN: [[COPY4:%[0-9]+]]:sreg_32_xm0 = COPY $scc
20 ; GCN: $scc = COPY [[COPY4]]
21 ; GCN: [[S_CSELECT_B64_:%[0-9]+]]:sreg_64 = S_CSELECT_B64 [[COPY2]], [[COPY3]], implicit $scc
22 ; GCN: S_ENDPGM 0, implicit [[S_CSELECT_B64_]]
23 %0:sgpr(s32) = COPY $sgpr0
24 %1:sgpr(s32) = COPY $sgpr1
25 %2:sgpr(s64) = COPY $sgpr2_sgpr3
26 %3:sgpr(s64) = COPY $sgpr4_sgpr5
27 %4:scc(s1) = G_ICMP intpred(eq), %0, %1
28 %5:sgpr(s64) = G_SELECT %4, %2, %3
29 S_ENDPGM 0, implicit %5
34 name: select_v4s16_scc
40 liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5
42 ; GCN-LABEL: name: select_v4s16_scc
43 ; GCN: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
44 ; GCN: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
45 ; GCN: [[COPY2:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3
46 ; GCN: [[COPY3:%[0-9]+]]:sreg_64 = COPY $sgpr4_sgpr5
47 ; GCN: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc
48 ; GCN: [[COPY4:%[0-9]+]]:sreg_32_xm0 = COPY $scc
49 ; GCN: $scc = COPY [[COPY4]]
50 ; GCN: [[S_CSELECT_B64_:%[0-9]+]]:sreg_64 = S_CSELECT_B64 [[COPY2]], [[COPY3]], implicit $scc
51 ; GCN: S_ENDPGM 0, implicit [[S_CSELECT_B64_]]
52 %0:sgpr(s32) = COPY $sgpr0
53 %1:sgpr(s32) = COPY $sgpr1
54 %2:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
55 %3:sgpr(<4 x s16>) = COPY $sgpr4_sgpr5
56 %4:scc(s1) = G_ICMP intpred(eq), %0, %1
57 %5:sgpr(<4 x s16>) = G_SELECT %4, %2, %3
58 S_ENDPGM 0, implicit %5
69 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3
71 ; GCN-LABEL: name: select_s16_scc
72 ; GCN: [[COPY:%[0-9]+]]:sreg_32_xm0 = COPY $sgpr0
73 ; GCN: [[COPY1:%[0-9]+]]:sreg_32_xm0 = COPY $sgpr1
74 ; GCN: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2
75 ; GCN: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3
76 ; GCN: S_CMP_EQ_U32 [[COPY2]], [[COPY3]], implicit-def $scc
77 ; GCN: [[COPY4:%[0-9]+]]:sreg_32_xm0 = COPY $scc
78 ; GCN: $scc = COPY [[COPY4]]
79 ; GCN: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[COPY]], [[COPY1]], implicit $scc
80 ; GCN: S_ENDPGM 0, implicit [[S_CSELECT_B32_]]
81 %0:sgpr(s32) = COPY $sgpr0
82 %1:sgpr(s32) = COPY $sgpr1
83 %2:sgpr(s32) = COPY $sgpr2
84 %3:sgpr(s32) = COPY $sgpr3
85 %4:sgpr(s16) = G_TRUNC %0
86 %5:sgpr(s16) = G_TRUNC %1
87 %6:scc(s1) = G_ICMP intpred(eq), %2, %3
88 %7:sgpr(s16) = G_SELECT %6, %4, %5
89 S_ENDPGM 0, implicit %7
94 name: select_v2s16_scc
100 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3
102 ; GCN-LABEL: name: select_v2s16_scc
103 ; GCN: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
104 ; GCN: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
105 ; GCN: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2
106 ; GCN: [[COPY3:%[0-9]+]]:sreg_32 = COPY $sgpr3
107 ; GCN: S_CMP_EQ_U32 [[COPY]], [[COPY1]], implicit-def $scc
108 ; GCN: [[COPY4:%[0-9]+]]:sreg_32_xm0 = COPY $scc
109 ; GCN: $scc = COPY [[COPY4]]
110 ; GCN: [[S_CSELECT_B32_:%[0-9]+]]:sreg_32 = S_CSELECT_B32 [[COPY2]], [[COPY3]], implicit $scc
111 ; GCN: S_ENDPGM 0, implicit [[S_CSELECT_B32_]]
112 %0:sgpr(s32) = COPY $sgpr0
113 %1:sgpr(s32) = COPY $sgpr1
114 %2:sgpr(<2 x s16>) = COPY $sgpr2
115 %3:sgpr(<2 x s16>) = COPY $sgpr3
116 %4:scc(s1) = G_ICMP intpred(eq), %0, %1
117 %5:sgpr(<2 x s16>) = G_SELECT %4, %2, %3
118 S_ENDPGM 0, implicit %5
125 regBankSelected: true
129 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
131 ; GCN-LABEL: name: select_s16_vcc
132 ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
133 ; GCN: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
134 ; GCN: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
135 ; GCN: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
136 ; GCN: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY2]], [[COPY3]], implicit $exec
137 ; GCN: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY1]], 0, [[COPY]], [[V_CMP_EQ_U32_e64_]], implicit $exec
138 ; GCN: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]
139 %0:vgpr(s32) = COPY $vgpr0
140 %1:vgpr(s32) = COPY $vgpr1
141 %2:vgpr(s32) = COPY $vgpr2
142 %3:vgpr(s32) = COPY $vgpr3
143 %4:vgpr(s16) = G_TRUNC %0
144 %5:vgpr(s16) = G_TRUNC %1
145 %6:vcc(s1) = G_ICMP intpred(eq), %2, %3
146 %7:vgpr(s16) = G_SELECT %6, %4, %5
147 S_ENDPGM 0, implicit %7
152 name: select_v2s16_vcc
154 regBankSelected: true
158 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
160 ; GCN-LABEL: name: select_v2s16_vcc
161 ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
162 ; GCN: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
163 ; GCN: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
164 ; GCN: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3
165 ; GCN: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[COPY1]], implicit $exec
166 ; GCN: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, [[COPY3]], 0, [[COPY2]], [[V_CMP_EQ_U32_e64_]], implicit $exec
167 ; GCN: S_ENDPGM 0, implicit [[V_CNDMASK_B32_e64_]]
168 %0:vgpr(s32) = COPY $vgpr0
169 %1:vgpr(s32) = COPY $vgpr1
170 %2:vgpr(<2 x s16>) = COPY $vgpr2
171 %3:vgpr(<2 x s16>) = COPY $vgpr3
172 %4:vcc(s1) = G_ICMP intpred(eq), %0, %1
173 %5:vgpr(<2 x s16>) = G_SELECT %4, %2, %3
174 S_ENDPGM 0, implicit %5