1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2; RUN: llc -mtriple aarch64 -aarch64-enable-atomic-cfg-tidy=0 -stop-after=irtranslator -global-isel -verify-machineinstrs -disable-cgp-delete-phis %s -o - 2>&1 | FileCheck %s 3 4define i32 @test_bittest(i16 %p) { 5 ; CHECK-LABEL: name: test_bittest 6 ; CHECK: bb.1 (%ir-block.0): 7 ; CHECK-NEXT: successors: %bb.4(0x1b6db6db), %bb.5(0x64924925) 8 ; CHECK-NEXT: liveins: $w0 9 ; CHECK-NEXT: {{ $}} 10 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 11 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 12 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 114 13 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 42 14 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 15 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s16) 16 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 17 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[ZEXT]], [[C3]] 18 ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[SUB]](s32) 19 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 59 20 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ugt), [[SUB]](s32), [[C4]] 21 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.4 22 ; CHECK-NEXT: G_BR %bb.5 23 ; CHECK-NEXT: {{ $}} 24 ; CHECK-NEXT: bb.4 (%ir-block.0): 25 ; CHECK-NEXT: successors: %bb.3(0x40000000), %bb.2(0x40000000) 26 ; CHECK-NEXT: {{ $}} 27 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[ZEXT]](s32), [[C]] 28 ; CHECK-NEXT: G_BRCOND [[ICMP1]](s1), %bb.3 29 ; CHECK-NEXT: G_BR %bb.2 30 ; CHECK-NEXT: {{ $}} 31 ; CHECK-NEXT: bb.5 (%ir-block.0): 32 ; CHECK-NEXT: successors: %bb.3(0x745d1746), %bb.4(0x0ba2e8ba) 33 ; CHECK-NEXT: {{ $}} 34 ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 1 35 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[C5]], [[ZEXT1]](s64) 36 ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 866239240827043840 37 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C6]] 38 ; CHECK-NEXT: [[C7:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 39 ; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[AND]](s64), [[C7]] 40 ; CHECK-NEXT: G_BRCOND [[ICMP2]](s1), %bb.3 41 ; CHECK-NEXT: G_BR %bb.4 42 ; CHECK-NEXT: {{ $}} 43 ; CHECK-NEXT: bb.2.sw.epilog: 44 ; CHECK-NEXT: $w0 = COPY [[C2]](s32) 45 ; CHECK-NEXT: RET_ReallyLR implicit $w0 46 ; CHECK-NEXT: {{ $}} 47 ; CHECK-NEXT: bb.3.cb1: 48 ; CHECK-NEXT: $w0 = COPY [[C1]](s32) 49 ; CHECK-NEXT: RET_ReallyLR implicit $w0 50 switch i16 %p, label %sw.epilog [ 51 i16 58, label %cb1 52 i16 59, label %cb1 53 i16 47, label %cb1 54 i16 48, label %cb1 55 i16 50, label %cb1 56 i16 114, label %cb1 57 ] 58sw.epilog: 59 ret i32 0 60 61cb1: 62 ret i32 42 63} 64 65 66declare void @callee() 67 68define void @test_bittest_2_bt(i32 %p) { 69 ; CHECK-LABEL: name: test_bittest_2_bt 70 ; CHECK: bb.1.entry: 71 ; CHECK-NEXT: successors: %bb.5(0x345d1746), %bb.6(0x4ba2e8ba) 72 ; CHECK-NEXT: liveins: $w0 73 ; CHECK-NEXT: {{ $}} 74 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 75 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 176 76 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[COPY]], [[C]] 77 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 15 78 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ugt), [[SUB]](s32), [[C1]] 79 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.5 80 ; CHECK-NEXT: G_BR %bb.6 81 ; CHECK-NEXT: {{ $}} 82 ; CHECK-NEXT: bb.5.entry: 83 ; CHECK-NEXT: successors: %bb.4(0x0ccccccd), %bb.7(0x73333333) 84 ; CHECK-NEXT: {{ $}} 85 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 86 ; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(s32) = G_SUB [[COPY]], [[C2]] 87 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[SUB1]](s32) 88 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 38 89 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ugt), [[SUB1]](s32), [[C3]] 90 ; CHECK-NEXT: G_BRCOND [[ICMP1]](s1), %bb.4 91 ; CHECK-NEXT: G_BR %bb.7 92 ; CHECK-NEXT: {{ $}} 93 ; CHECK-NEXT: bb.6.entry: 94 ; CHECK-NEXT: successors: %bb.2(0x76276276), %bb.5(0x09d89d8a) 95 ; CHECK-NEXT: {{ $}} 96 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 97 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[C4]], [[SUB]](s32) 98 ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 57351 99 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[SHL]], [[C5]] 100 ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 101 ; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[AND]](s32), [[C6]] 102 ; CHECK-NEXT: G_BRCOND [[ICMP2]](s1), %bb.2 103 ; CHECK-NEXT: G_BR %bb.5 104 ; CHECK-NEXT: {{ $}} 105 ; CHECK-NEXT: bb.7.entry: 106 ; CHECK-NEXT: successors: %bb.3(0x71c71c72), %bb.4(0x0e38e38e) 107 ; CHECK-NEXT: {{ $}} 108 ; CHECK-NEXT: [[C7:%[0-9]+]]:_(s64) = G_CONSTANT i64 1 109 ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[C7]], [[ZEXT]](s64) 110 ; CHECK-NEXT: [[C8:%[0-9]+]]:_(s64) = G_CONSTANT i64 365072220160 111 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[SHL1]], [[C8]] 112 ; CHECK-NEXT: [[C9:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 113 ; CHECK-NEXT: [[ICMP3:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[AND1]](s64), [[C9]] 114 ; CHECK-NEXT: G_BRCOND [[ICMP3]](s1), %bb.3 115 ; CHECK-NEXT: G_BR %bb.4 116 ; CHECK-NEXT: {{ $}} 117 ; CHECK-NEXT: bb.2.sw.bb37: 118 ; CHECK-NEXT: TCRETURNdi @callee, 0, csr_aarch64_aapcs, implicit $sp 119 ; CHECK-NEXT: {{ $}} 120 ; CHECK-NEXT: bb.3.sw.bb55: 121 ; CHECK-NEXT: TCRETURNdi @callee, 0, csr_aarch64_aapcs, implicit $sp 122 ; CHECK-NEXT: {{ $}} 123 ; CHECK-NEXT: bb.4.sw.default: 124 ; CHECK-NEXT: RET_ReallyLR 125entry: 126 switch i32 %p, label %sw.default [ 127 i32 32, label %sw.bb55 128 i32 34, label %sw.bb55 129 i32 36, label %sw.bb55 130 i32 191, label %sw.bb37 131 i32 190, label %sw.bb37 132 i32 189, label %sw.bb37 133 i32 178, label %sw.bb37 134 i32 177, label %sw.bb37 135 i32 176, label %sw.bb37 136 i32 38, label %sw.bb55 137 ] 138 139sw.bb37: ; preds = %entry, %entry, %entry, %entry, %entry, %entry 140 tail call void @callee() 141 ret void 142 143sw.bb55: ; preds = %entry, %entry, %entry, %entry 144 tail call void @callee() 145 ret void 146 147sw.default: ; preds = %entry 148 ret void 149} 150 151define i32 @test_bittest_single_bt_only_with_fallthrough(i16 %p) { 152 ; CHECK-LABEL: name: test_bittest_single_bt_only_with_fallthrough 153 ; CHECK: bb.1 (%ir-block.0): 154 ; CHECK-NEXT: successors: %bb.2(0x0aaaaaab), %bb.4(0x75555555) 155 ; CHECK-NEXT: liveins: $w0 156 ; CHECK-NEXT: {{ $}} 157 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 158 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 159 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 42 160 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 161 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[TRUNC]](s16) 162 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 163 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[ZEXT]], [[C2]] 164 ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[SUB]](s32) 165 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 59 166 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ugt), [[SUB]](s32), [[C3]] 167 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.2 168 ; CHECK-NEXT: {{ $}} 169 ; CHECK-NEXT: bb.4 (%ir-block.0): 170 ; CHECK-NEXT: successors: %bb.3(0x745d1746), %bb.2(0x0ba2e8ba) 171 ; CHECK-NEXT: {{ $}} 172 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 1 173 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[C4]], [[ZEXT1]](s64) 174 ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 866239240827043840 175 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C5]] 176 ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 177 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[AND]](s64), [[C6]] 178 ; CHECK-NEXT: G_BRCOND [[ICMP1]](s1), %bb.3 179 ; CHECK-NEXT: {{ $}} 180 ; CHECK-NEXT: bb.2.sw.epilog: 181 ; CHECK-NEXT: $w0 = COPY [[C1]](s32) 182 ; CHECK-NEXT: RET_ReallyLR implicit $w0 183 ; CHECK-NEXT: {{ $}} 184 ; CHECK-NEXT: bb.3.cb1: 185 ; CHECK-NEXT: $w0 = COPY [[C]](s32) 186 ; CHECK-NEXT: RET_ReallyLR implicit $w0 187 switch i16 %p, label %sw.epilog [ 188 i16 58, label %cb1 189 i16 59, label %cb1 190 i16 47, label %cb1 191 i16 48, label %cb1 192 i16 50, label %cb1 193 ] 194sw.epilog: 195 ret i32 0 196 197cb1: 198 ret i32 42 199} 200 201define void @bit_test_block_incomplete_phi() { 202 ; CHECK-LABEL: name: bit_test_block_incomplete_phi 203 ; CHECK: bb.1.entry: 204 ; CHECK-NEXT: successors: %bb.5(0x80000000) 205 ; CHECK-NEXT: {{ $}} 206 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF 207 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(p0) = G_IMPLICIT_DEF 208 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false 209 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s1) = G_CONSTANT i1 true 210 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 211 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[DEF]], [[C2]] 212 ; CHECK-NEXT: {{ $}} 213 ; CHECK-NEXT: bb.5.entry: 214 ; CHECK-NEXT: successors: %bb.3(0x51745d17), %bb.4(0x2e8ba2e9) 215 ; CHECK-NEXT: {{ $}} 216 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 217 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[C3]], [[SUB]](s32) 218 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 491 219 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[SHL]], [[C4]] 220 ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 221 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[AND]](s32), [[C5]] 222 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.3 223 ; CHECK-NEXT: G_BR %bb.4 224 ; CHECK-NEXT: {{ $}} 225 ; CHECK-NEXT: bb.6.entry: 226 ; CHECK-NEXT: successors: 227 ; CHECK: bb.2.sw.epilog.i: 228 ; CHECK-NEXT: successors: 229 ; CHECK: bb.3.if.end: 230 ; CHECK-NEXT: successors: %bb.4(0x80000000) 231 ; CHECK-NEXT: {{ $}} 232 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[DEF1]](p0) :: (load (p0) from `ptr undef`) 233 ; CHECK-NEXT: {{ $}} 234 ; CHECK-NEXT: bb.4.return: 235 ; CHECK-NEXT: [[PHI:%[0-9]+]]:_(s1) = G_PHI [[C]](s1), %bb.3, [[C1]](s1), %bb.5 236 ; CHECK-NEXT: RET_ReallyLR 237entry: 238 switch i32 undef, label %sw.epilog.i [ 239 i32 4, label %return 240 i32 2, label %return 241 i32 10, label %return 242 i32 9, label %return 243 i32 1, label %if.end 244 i32 3, label %if.end 245 i32 5, label %if.end 246 i32 0, label %if.end 247 i32 6, label %if.end 248 i32 7, label %if.end 249 i32 8, label %if.end 250 ] 251 252sw.epilog.i: ; preds = %entry 253 unreachable 254 255if.end: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry 256 %0 = load ptr, ptr undef, align 8 257 br label %return 258 259return: ; preds = %if.end, %entry, %entry, %entry, %entry 260 %retval.0 = phi i1 [ false, %if.end ], [ true, %entry ], [ true, %entry ], [ true, %entry ], [ true, %entry ] 261 ret void 262} 263 264define i32 @test_odd_type(i328 %p) { 265 ; CHECK-LABEL: name: test_odd_type 266 ; CHECK: bb.1 (%ir-block.0): 267 ; CHECK-NEXT: successors: %bb.4(0x1b6db6db), %bb.5(0x64924925) 268 ; CHECK-NEXT: liveins: $x0, $x1, $x2, $x3, $x4, $x5 269 ; CHECK-NEXT: {{ $}} 270 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 271 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1 272 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2 273 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3 274 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s64) = COPY $x4 275 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:_(s64) = COPY $x5 276 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s384) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64), [[COPY2]](s64), [[COPY3]](s64), [[COPY4]](s64), [[COPY5]](s64) 277 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s328) = G_TRUNC [[MV]](s384) 278 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s328) = G_CONSTANT i328 114 279 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 42 280 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 281 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s328) = G_CONSTANT i328 0 282 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s328) = G_SUB [[TRUNC]], [[C3]] 283 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s64) = G_TRUNC [[SUB]](s328) 284 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s328) = G_CONSTANT i328 59 285 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ugt), [[SUB]](s328), [[C4]] 286 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.4 287 ; CHECK-NEXT: G_BR %bb.5 288 ; CHECK-NEXT: {{ $}} 289 ; CHECK-NEXT: bb.4 (%ir-block.0): 290 ; CHECK-NEXT: successors: %bb.3(0x40000000), %bb.2(0x40000000) 291 ; CHECK-NEXT: {{ $}} 292 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[TRUNC]](s328), [[C]] 293 ; CHECK-NEXT: G_BRCOND [[ICMP1]](s1), %bb.3 294 ; CHECK-NEXT: G_BR %bb.2 295 ; CHECK-NEXT: {{ $}} 296 ; CHECK-NEXT: bb.5 (%ir-block.0): 297 ; CHECK-NEXT: successors: %bb.3(0x745d1746), %bb.4(0x0ba2e8ba) 298 ; CHECK-NEXT: {{ $}} 299 ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 1 300 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[C5]], [[TRUNC1]](s64) 301 ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 866239240827043840 302 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C6]] 303 ; CHECK-NEXT: [[C7:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 304 ; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[AND]](s64), [[C7]] 305 ; CHECK-NEXT: G_BRCOND [[ICMP2]](s1), %bb.3 306 ; CHECK-NEXT: G_BR %bb.4 307 ; CHECK-NEXT: {{ $}} 308 ; CHECK-NEXT: bb.2.sw.epilog: 309 ; CHECK-NEXT: $w0 = COPY [[C2]](s32) 310 ; CHECK-NEXT: RET_ReallyLR implicit $w0 311 ; CHECK-NEXT: {{ $}} 312 ; CHECK-NEXT: bb.3.cb1: 313 ; CHECK-NEXT: $w0 = COPY [[C1]](s32) 314 ; CHECK-NEXT: RET_ReallyLR implicit $w0 315 switch i328 %p, label %sw.epilog [ 316 i328 58, label %cb1 317 i328 59, label %cb1 318 i328 47, label %cb1 319 i328 48, label %cb1 320 i328 50, label %cb1 321 i328 114, label %cb1 322 ] 323sw.epilog: 324 ret i32 0 325cb1: 326 ret i32 42 327} 328 329define i32 @test_large_pow2_type(i256 %p) { 330 ; CHECK-LABEL: name: test_large_pow2_type 331 ; CHECK: bb.1 (%ir-block.0): 332 ; CHECK-NEXT: successors: %bb.4(0x1b6db6db), %bb.5(0x64924925) 333 ; CHECK-NEXT: liveins: $x0, $x1, $x2, $x3 334 ; CHECK-NEXT: {{ $}} 335 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 336 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1 337 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2 338 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3 339 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s256) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64), [[COPY2]](s64), [[COPY3]](s64) 340 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s256) = G_CONSTANT i256 114 341 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 42 342 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 343 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s256) = G_CONSTANT i256 0 344 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s256) = G_SUB [[MV]], [[C3]] 345 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[SUB]](s256) 346 ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s256) = G_CONSTANT i256 59 347 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ugt), [[SUB]](s256), [[C4]] 348 ; CHECK-NEXT: G_BRCOND [[ICMP]](s1), %bb.4 349 ; CHECK-NEXT: G_BR %bb.5 350 ; CHECK-NEXT: {{ $}} 351 ; CHECK-NEXT: bb.4 (%ir-block.0): 352 ; CHECK-NEXT: successors: %bb.3(0x40000000), %bb.2(0x40000000) 353 ; CHECK-NEXT: {{ $}} 354 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[MV]](s256), [[C]] 355 ; CHECK-NEXT: G_BRCOND [[ICMP1]](s1), %bb.3 356 ; CHECK-NEXT: G_BR %bb.2 357 ; CHECK-NEXT: {{ $}} 358 ; CHECK-NEXT: bb.5 (%ir-block.0): 359 ; CHECK-NEXT: successors: %bb.3(0x745d1746), %bb.4(0x0ba2e8ba) 360 ; CHECK-NEXT: {{ $}} 361 ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 1 362 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[C5]], [[TRUNC]](s64) 363 ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 866239240827043840 364 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[SHL]], [[C6]] 365 ; CHECK-NEXT: [[C7:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 366 ; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[AND]](s64), [[C7]] 367 ; CHECK-NEXT: G_BRCOND [[ICMP2]](s1), %bb.3 368 ; CHECK-NEXT: G_BR %bb.4 369 ; CHECK-NEXT: {{ $}} 370 ; CHECK-NEXT: bb.2.sw.epilog: 371 ; CHECK-NEXT: $w0 = COPY [[C2]](s32) 372 ; CHECK-NEXT: RET_ReallyLR implicit $w0 373 ; CHECK-NEXT: {{ $}} 374 ; CHECK-NEXT: bb.3.cb1: 375 ; CHECK-NEXT: $w0 = COPY [[C1]](s32) 376 ; CHECK-NEXT: RET_ReallyLR implicit $w0 377 switch i256 %p, label %sw.epilog [ 378 i256 58, label %cb1 379 i256 59, label %cb1 380 i256 47, label %cb1 381 i256 48, label %cb1 382 i256 50, label %cb1 383 i256 114, label %cb1 384 ] 385sw.epilog: 386 ret i32 0 387cb1: 388 ret i32 42 389} 390 391