1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-fast | FileCheck %s 3# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-greedy | FileCheck %s 4 5--- 6name: sext_s32_to_s64_s 7legalized: true 8 9body: | 10 bb.0: 11 liveins: $sgpr0 12 ; CHECK-LABEL: name: sext_s32_to_s64_s 13 ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 14 ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s64) = G_SEXT [[COPY]](s32) 15 %0:_(s32) = COPY $sgpr0 16 %1:_(s64) = G_SEXT %0 17... 18 19--- 20name: sext_s16_to_s64_s 21legalized: true 22 23body: | 24 bb.0: 25 liveins: $sgpr0 26 ; CHECK-LABEL: name: sext_s16_to_s64_s 27 ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 28 ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32) 29 ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s64) = G_SEXT [[TRUNC]](s16) 30 %0:_(s32) = COPY $sgpr0 31 %1:_(s16) = G_TRUNC %0 32 %2:_(s64) = G_SEXT %1 33... 34 35--- 36name: sext_s32_to_s64_v 37legalized: true 38 39body: | 40 bb.0: 41 liveins: $vgpr0_vgpr1 42 ; CHECK-LABEL: name: sext_s32_to_s64_v 43 ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 44 ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32) 45 ; CHECK: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 31 46 ; CHECK: [[ASHR:%[0-9]+]]:vgpr(s32) = G_ASHR [[COPY1]], [[C]](s32) 47 ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY1]](s32), [[ASHR]](s32) 48 %0:_(s32) = COPY $vgpr0 49 %1:_(s64) = G_SEXT %0 50... 51 52--- 53name: sext_s1_to_s16_scc 54legalized: true 55 56body: | 57 bb.0: 58 liveins: $sgpr0, $sgpr1 59 ; CHECK-LABEL: name: sext_s1_to_s16_scc 60 ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 61 ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1 62 ; CHECK: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]] 63 ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32) 64 ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s16) = G_SEXT [[TRUNC]](s1) 65 %0:_(s32) = COPY $sgpr0 66 %1:_(s32) = COPY $sgpr1 67 %2:_(s1) = G_ICMP intpred(eq), %0, %1 68 %3:_(s16) = G_SEXT %2 69... 70 71--- 72name: sext_s1_to_s32_scc 73legalized: true 74 75body: | 76 bb.0: 77 liveins: $sgpr0, $sgpr1 78 ; CHECK-LABEL: name: sext_s1_to_s32_scc 79 ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 80 ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1 81 ; CHECK: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]] 82 ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32) 83 ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s32) = G_SEXT [[TRUNC]](s1) 84 %0:_(s32) = COPY $sgpr0 85 %1:_(s32) = COPY $sgpr1 86 %2:_(s1) = G_ICMP intpred(eq), %0, %1 87 %3:_(s32) = G_SEXT %2 88... 89 90--- 91name: sext_s1_to_s64_scc 92legalized: true 93 94body: | 95 bb.0: 96 liveins: $sgpr0, $sgpr1 97 ; CHECK-LABEL: name: sext_s1_to_s64_scc 98 ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 99 ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1 100 ; CHECK: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]] 101 ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32) 102 ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s64) = G_SEXT [[TRUNC]](s1) 103 %0:_(s32) = COPY $sgpr0 104 %1:_(s32) = COPY $sgpr1 105 %2:_(s1) = G_ICMP intpred(eq), %0, %1 106 %3:_(s64) = G_SEXT %2 107... 108 109--- 110name: sext_s1_to_s16_vcc 111legalized: true 112 113body: | 114 bb.0: 115 liveins: $vgpr0, $vgpr1 116 ; CHECK-LABEL: name: sext_s1_to_s16_vcc 117 ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 118 ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1 119 ; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]] 120 ; CHECK: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 -1 121 ; CHECK: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0 122 ; CHECK: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[C]], [[C1]] 123 ; CHECK: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[SELECT]](s32) 124 %0:_(s32) = COPY $vgpr0 125 %1:_(s32) = COPY $vgpr1 126 %2:_(s1) = G_ICMP intpred(eq), %0, %1 127 %3:_(s16) = G_SEXT %2 128... 129 130--- 131name: sext_s1_to_s32_vcc 132legalized: true 133 134body: | 135 bb.0: 136 liveins: $vgpr0, $vgpr1 137 ; CHECK-LABEL: name: sext_s1_to_s32_vcc 138 ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 139 ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1 140 ; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]] 141 ; CHECK: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 -1 142 ; CHECK: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0 143 ; CHECK: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[C]], [[C1]] 144 %0:_(s32) = COPY $vgpr0 145 %1:_(s32) = COPY $vgpr1 146 %2:_(s1) = G_ICMP intpred(eq), %0, %1 147 %3:_(s32) = G_SEXT %2 148... 149 150--- 151name: sext_s1_to_s64_vcc 152legalized: true 153 154body: | 155 bb.0: 156 liveins: $vgpr0, $vgpr1 157 ; CHECK-LABEL: name: sext_s1_to_s64_vcc 158 ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 159 ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1 160 ; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]] 161 ; CHECK: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 -1 162 ; CHECK: [[C1:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 0 163 ; CHECK: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[C]], [[C1]] 164 ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[SELECT]](s32) 165 ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[COPY2]](s32) 166 %0:_(s32) = COPY $vgpr0 167 %1:_(s32) = COPY $vgpr1 168 %2:_(s1) = G_ICMP intpred(eq), %0, %1 169 %3:_(s64) = G_SEXT %2 170... 171 172--- 173name: sext_s1_to_s16_sgpr 174legalized: true 175 176body: | 177 bb.0: 178 liveins: $sgpr0 179 ; CHECK-LABEL: name: sext_s1_to_s16_sgpr 180 ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 181 ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32) 182 ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s16) = G_SEXT [[TRUNC]](s1) 183 %0:_(s32) = COPY $sgpr0 184 %1:_(s1) = G_TRUNC %0 185 %2:_(s16) = G_SEXT %1 186... 187 188--- 189name: sext_s1_to_s32_sgpr 190legalized: true 191 192body: | 193 bb.0: 194 liveins: $sgpr0 195 ; CHECK-LABEL: name: sext_s1_to_s32_sgpr 196 ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 197 ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32) 198 ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s32) = G_SEXT [[TRUNC]](s1) 199 %0:_(s32) = COPY $sgpr0 200 %1:_(s1) = G_TRUNC %0 201 %2:_(s32) = G_SEXT %1 202... 203 204--- 205name: sext_s1_to_s64_sgpr 206legalized: true 207 208body: | 209 bb.0: 210 liveins: $sgpr0 211 ; CHECK-LABEL: name: sext_s1_to_s64_sgpr 212 ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0 213 ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32) 214 ; CHECK: [[SEXT:%[0-9]+]]:sgpr(s64) = G_SEXT [[TRUNC]](s1) 215 %0:_(s32) = COPY $sgpr0 216 %1:_(s1) = G_TRUNC %0 217 %2:_(s64) = G_SEXT %1 218... 219 220--- 221name: sext_s1_to_s16_vgpr 222legalized: true 223 224body: | 225 bb.0: 226 liveins: $vgpr0 227 ; CHECK-LABEL: name: sext_s1_to_s16_vgpr 228 ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 229 ; CHECK: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32) 230 ; CHECK: [[SEXT:%[0-9]+]]:vgpr(s16) = G_SEXT [[TRUNC]](s1) 231 %0:_(s32) = COPY $vgpr0 232 %1:_(s1) = G_TRUNC %0 233 %2:_(s16) = G_SEXT %1 234... 235 236--- 237name: sext_s1_to_s32_vgpr 238legalized: true 239 240body: | 241 bb.0: 242 liveins: $vgpr0 243 ; CHECK-LABEL: name: sext_s1_to_s32_vgpr 244 ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 245 ; CHECK: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32) 246 ; CHECK: [[SEXT:%[0-9]+]]:vgpr(s32) = G_SEXT [[TRUNC]](s1) 247 %0:_(s32) = COPY $vgpr0 248 %1:_(s1) = G_TRUNC %0 249 %2:_(s32) = G_SEXT %1 250... 251 252--- 253name: sext_s1_to_s64_vgpr 254legalized: true 255 256body: | 257 bb.0: 258 liveins: $vgpr0 259 ; CHECK-LABEL: name: sext_s1_to_s64_vgpr 260 ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 261 ; CHECK: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32) 262 ; CHECK: [[SEXT:%[0-9]+]]:vgpr(s32) = G_SEXT [[TRUNC]](s1) 263 ; CHECK: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 31 264 ; CHECK: [[ASHR:%[0-9]+]]:vgpr(s32) = G_ASHR [[SEXT]], [[C]](s32) 265 ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SEXT]](s32), [[ASHR]](s32) 266 %0:_(s32) = COPY $vgpr0 267 %1:_(s1) = G_TRUNC %0 268 %2:_(s64) = G_SEXT %1 269... 270 271--- 272name: sext_s16_to_s64_vgpr 273legalized: true 274 275body: | 276 bb.0: 277 liveins: $vgpr0 278 ; CHECK-LABEL: name: sext_s16_to_s64_vgpr 279 ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 280 ; CHECK: [[TRUNC:%[0-9]+]]:vgpr(s16) = G_TRUNC [[COPY]](s32) 281 ; CHECK: [[SEXT:%[0-9]+]]:vgpr(s32) = G_SEXT [[TRUNC]](s16) 282 ; CHECK: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 31 283 ; CHECK: [[ASHR:%[0-9]+]]:vgpr(s32) = G_ASHR [[SEXT]], [[C]](s32) 284 ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SEXT]](s32), [[ASHR]](s32) 285 %0:_(s32) = COPY $vgpr0 286 %1:_(s16) = G_TRUNC %0 287 %2:_(s64) = G_SEXT %1 288... 289