|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 |
1 | 2 | ; RUN: llc < %s -mtriple=aarch64-none-linux-gnu | FileCheck %s
|
2 | 3 |
|
3 | 4 | ; and can be eliminated
|
4 |
| -; CHECK-LABEL: {{^}}test_call_known_max_range: |
5 |
| -; CHECK: bl foo |
6 |
| -; CHECK-NOT: and |
7 |
| -; CHECK: ret |
8 | 5 | define i32 @test_call_known_max_range() #0 {
|
| 6 | +; CHECK-LABEL: test_call_known_max_range: |
| 7 | +; CHECK: // %bb.0: // %entry |
| 8 | +; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill |
| 9 | +; CHECK-NEXT: bl foo |
| 10 | +; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload |
| 11 | +; CHECK-NEXT: ret |
9 | 12 | entry:
|
10 | 13 | %id = tail call i32 @foo(), !range !0, !noundef !{}
|
11 | 14 | %and = and i32 %id, 1023
|
12 | 15 | ret i32 %and
|
13 | 16 | }
|
14 | 17 |
|
15 |
| -; CHECK-LABEL: {{^}}test_call_known_trunc_1_bit_range: |
16 |
| -; CHECK: bl foo |
17 |
| -; CHECK: and w{{[0-9]+}}, w0, #0x1ff |
18 |
| -; CHECK: ret |
19 | 18 | define i32 @test_call_known_trunc_1_bit_range() #0 {
|
| 19 | +; CHECK-LABEL: test_call_known_trunc_1_bit_range: |
| 20 | +; CHECK: // %bb.0: // %entry |
| 21 | +; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill |
| 22 | +; CHECK-NEXT: bl foo |
| 23 | +; CHECK-NEXT: and w0, w0, #0x1ff |
| 24 | +; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload |
| 25 | +; CHECK-NEXT: ret |
20 | 26 | entry:
|
21 | 27 | %id = tail call i32 @foo(), !range !0, !noundef !{}
|
22 | 28 | %and = and i32 %id, 511
|
23 | 29 | ret i32 %and
|
24 | 30 | }
|
25 | 31 |
|
26 |
| -; CHECK-LABEL: {{^}}test_call_known_max_range_m1: |
27 |
| -; CHECK: bl foo |
28 |
| -; CHECK: and w{{[0-9]+}}, w0, #0xff |
29 |
| -; CHECK: ret |
30 | 32 | define i32 @test_call_known_max_range_m1() #0 {
|
| 33 | +; CHECK-LABEL: test_call_known_max_range_m1: |
| 34 | +; CHECK: // %bb.0: // %entry |
| 35 | +; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill |
| 36 | +; CHECK-NEXT: bl foo |
| 37 | +; CHECK-NEXT: and w0, w0, #0xff |
| 38 | +; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload |
| 39 | +; CHECK-NEXT: ret |
31 | 40 | entry:
|
32 | 41 | %id = tail call i32 @foo(), !range !1, !noundef !{}
|
33 | 42 | %and = and i32 %id, 255
|
34 | 43 | ret i32 %and
|
35 | 44 | }
|
36 | 45 |
|
37 | 46 | ; and can be eliminated
|
38 |
| -; CHECK-LABEL: {{^}}test_call_known_max_range_attr: |
39 |
| -; CHECK: bl foo |
40 |
| -; CHECK-NOT: and |
41 |
| -; CHECK: ret |
42 | 47 | define i32 @test_call_known_max_range_attr() #0 {
|
| 48 | +; CHECK-LABEL: test_call_known_max_range_attr: |
| 49 | +; CHECK: // %bb.0: // %entry |
| 50 | +; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill |
| 51 | +; CHECK-NEXT: bl foo |
| 52 | +; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload |
| 53 | +; CHECK-NEXT: ret |
43 | 54 | entry:
|
44 | 55 | %id = tail call noundef range(i32 0, 1024) i32 @foo()
|
45 | 56 | %and = and i32 %id, 1023
|
46 | 57 | ret i32 %and
|
47 | 58 | }
|
48 | 59 |
|
49 |
| -; CHECK-LABEL: {{^}}test_call_known_max_range_attr_no_noundef: |
50 |
| -; CHECK: bl foo |
51 |
| -; CHECK: and w{{[0-9]+}}, w0, #0x3ff |
52 |
| -; CHECK: ret |
53 | 60 | define i32 @test_call_known_max_range_attr_no_noundef() #0 {
|
| 61 | +; CHECK-LABEL: test_call_known_max_range_attr_no_noundef: |
| 62 | +; CHECK: // %bb.0: // %entry |
| 63 | +; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill |
| 64 | +; CHECK-NEXT: bl foo |
| 65 | +; CHECK-NEXT: and w0, w0, #0x3ff |
| 66 | +; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload |
| 67 | +; CHECK-NEXT: ret |
54 | 68 | entry:
|
55 | 69 | %id = tail call range(i32 0, 1024) i32 @foo()
|
56 | 70 | %and = and i32 %id, 1023
|
|
0 commit comments