|
3 | 3 |
|
4 | 4 | ; Ensure poison-generating flags are stripped by the time a freeze operand is visited. |
5 | 5 |
|
6 | | -@g_ptr = global ptr null, align 4 |
7 | | - |
8 | | -define ptr @drop_flags(i32 noundef %numentries, i64 %cond, i64 %arg) { |
| 6 | +define i1 @drop_flags(i32 noundef %numentries, i64 %cond, i64 %arg) { |
9 | 7 | ; CHECK-LABEL: drop_flags: |
10 | 8 | ; CHECK: @ %bb.0: @ %entry |
11 | 9 | ; CHECK-NEXT: ldm sp, {r1, r12} |
12 | 10 | ; CHECK-NEXT: subs r1, r2, r1 |
13 | 11 | ; CHECK-NEXT: sbcs r1, r3, r12 |
14 | 12 | ; CHECK-NEXT: movlo r0, r2 |
15 | | -; CHECK-NEXT: cmp r0, #0 |
16 | | -; CHECK-NEXT: ldr r0, .LCPI0_0 |
17 | | -; CHECK-NEXT: ldr r0, [r0] |
| 13 | +; CHECK-NEXT: clz r0, r0 |
| 14 | +; CHECK-NEXT: lsr r0, r0, #5 |
18 | 15 | ; CHECK-NEXT: bx lr |
19 | | -; CHECK-NEXT: .p2align 2 |
20 | | -; CHECK-NEXT: @ %bb.1: |
21 | | -; CHECK-NEXT: .LCPI0_0: |
22 | | -; CHECK-NEXT: .long g_ptr |
23 | 16 | entry: |
24 | 17 | %cmp4 = icmp samesign ult i64 %cond, %arg |
25 | 18 | %conv6 = trunc nuw i64 %cond to i32 |
26 | 19 | %spec.select = select i1 %cmp4, i32 %conv6, i32 %numentries |
27 | 20 | %spec.select.fr = freeze i32 %spec.select |
28 | 21 | %cmpz = icmp eq i32 %spec.select.fr, 0 |
29 | | - br i1 %cmpz, label %bb.end, label %bb.false |
30 | | - |
31 | | -bb.false: ; preds = %entry |
32 | | - %2 = tail call range(i32 0, 33) i32 @llvm.ctlz.i32(i32 %spec.select.fr, i1 true) |
33 | | - br label %bb.end |
34 | | - |
35 | | -bb.end: ; preds = %entry, %bb.false |
36 | | - %3 = load ptr, ptr @g_ptr, align 4 |
37 | | - ret ptr %3 |
| 22 | + ret i1 %cmpz |
38 | 23 | } |
39 | 24 |
|
40 | 25 | declare i32 @llvm.ctlz.i32(i32, i1) |
0 commit comments