|
2 | 2 | ; RUN: opt -passes='early-cse<memssa>' -S < %s | FileCheck %s |
3 | 3 |
|
4 | 4 | declare void @use(i1) |
5 | | -declare void @use.ptr(ptr) memory(read) |
| 5 | +declare void @use.ptr(i32, ptr) memory(read) |
6 | 6 |
|
7 | 7 | define void @load_first_noalias_addrspace(ptr %p) { |
8 | 8 | ; CHECK-LABEL: define void @load_first_noalias_addrspace( |
9 | 9 | ; CHECK-SAME: ptr [[P:%.*]]) { |
10 | 10 | ; CHECK-NEXT: [[V1:%.*]] = load ptr, ptr [[P]], align 8, !nonnull [[META0:![0-9]+]], !noundef [[META0]], !noalias.addrspace [[META1:![0-9]+]] |
11 | | -; CHECK-NEXT: call void @use.ptr(ptr [[V1]]) |
12 | | -; CHECK-NEXT: call void @use.ptr(ptr [[V1]]) |
| 11 | +; CHECK-NEXT: call void @use.ptr(i32 0, ptr [[V1]]) |
| 12 | +; CHECK-NEXT: call void @use.ptr(i32 1, ptr [[V1]]) |
13 | 13 | ; CHECK-NEXT: ret void |
14 | 14 | ; |
15 | 15 | %v1 = load ptr, ptr %p, !nonnull !{}, !noundef !{}, !noalias.addrspace !0 |
16 | | - call void @use.ptr(ptr %v1) |
| 16 | + call void @use.ptr(i32 0, ptr %v1) |
17 | 17 | %v2 = load ptr, ptr %p |
18 | | - call void @use.ptr(ptr %v2) |
| 18 | + call void @use.ptr(i32 1, ptr %v2) |
19 | 19 | ret void |
20 | 20 | } |
21 | 21 |
|
22 | 22 | define void @load_both_same_noalias_addrspace(ptr %p) { |
23 | 23 | ; CHECK-LABEL: define void @load_both_same_noalias_addrspace( |
24 | 24 | ; CHECK-SAME: ptr [[P:%.*]]) { |
25 | 25 | ; CHECK-NEXT: [[V1:%.*]] = load ptr, ptr [[P]], align 8, !nonnull [[META0]], !noundef [[META0]], !noalias.addrspace [[META1]] |
26 | | -; CHECK-NEXT: call void @use.ptr(ptr [[V1]]) |
27 | | -; CHECK-NEXT: call void @use.ptr(ptr [[V1]]) |
| 26 | +; CHECK-NEXT: call void @use.ptr(i32 0, ptr [[V1]]) |
| 27 | +; CHECK-NEXT: call void @use.ptr(i32 1, ptr [[V1]]) |
28 | 28 | ; CHECK-NEXT: ret void |
29 | 29 | ; |
30 | 30 | %v1 = load ptr, ptr %p, !nonnull !{}, !noundef !{}, !noalias.addrspace !0 |
31 | | - call void @use.ptr(ptr %v1) |
| 31 | + call void @use.ptr(i32 0, ptr %v1) |
32 | 32 | %v2 = load ptr, ptr %p, !noalias.addrspace !0 |
33 | | - call void @use.ptr(ptr %v2) |
| 33 | + call void @use.ptr(i32 1, ptr %v2) |
34 | 34 | ret void |
35 | 35 | } |
36 | 36 |
|
37 | 37 | define void @load_both_disjoint_noalias_addrspace(ptr %p) { |
38 | 38 | ; CHECK-LABEL: define void @load_both_disjoint_noalias_addrspace( |
39 | 39 | ; CHECK-SAME: ptr [[P:%.*]]) { |
40 | 40 | ; CHECK-NEXT: [[V1:%.*]] = load ptr, ptr [[P]], align 8, !nonnull [[META0]], !noundef [[META0]], !noalias.addrspace [[META1]] |
41 | | -; CHECK-NEXT: call void @use.ptr(ptr [[V1]]) |
42 | | -; CHECK-NEXT: call void @use.ptr(ptr [[V1]]) |
| 41 | +; CHECK-NEXT: call void @use.ptr(i32 0, ptr [[V1]]) |
| 42 | +; CHECK-NEXT: call void @use.ptr(i32 1, ptr [[V1]]) |
43 | 43 | ; CHECK-NEXT: ret void |
44 | 44 | ; |
45 | 45 | %v1 = load ptr, ptr %p, !nonnull !{}, !noundef !{}, !noalias.addrspace !0 |
46 | | - call void @use.ptr(ptr %v1) |
| 46 | + call void @use.ptr(i32 0, ptr %v1) |
47 | 47 | %v2 = load ptr, ptr %p, !noalias.addrspace !1 |
48 | | - call void @use.ptr(ptr %v2) |
| 48 | + call void @use.ptr(i32 1, ptr %v2) |
49 | 49 | ret void |
50 | 50 | } |
51 | 51 |
|
52 | 52 | define void @load_both_overlap_noalias_addrspace(ptr %p) { |
53 | 53 | ; CHECK-LABEL: define void @load_both_overlap_noalias_addrspace( |
54 | 54 | ; CHECK-SAME: ptr [[P:%.*]]) { |
55 | 55 | ; CHECK-NEXT: [[V1:%.*]] = load ptr, ptr [[P]], align 8, !nonnull [[META0]], !noundef [[META0]], !noalias.addrspace [[META1]] |
56 | | -; CHECK-NEXT: call void @use.ptr(ptr [[V1]]) |
57 | | -; CHECK-NEXT: call void @use.ptr(ptr [[V1]]) |
| 56 | +; CHECK-NEXT: call void @use.ptr(i32 0, ptr [[V1]]) |
| 57 | +; CHECK-NEXT: call void @use.ptr(i32 1, ptr [[V1]]) |
58 | 58 | ; CHECK-NEXT: ret void |
59 | 59 | ; |
60 | 60 | %v1 = load ptr, ptr %p, !nonnull !{}, !noundef !{}, !noalias.addrspace !0 |
61 | | - call void @use.ptr(ptr %v1) |
| 61 | + call void @use.ptr(i32 0, ptr %v1) |
62 | 62 | %v2 = load ptr, ptr %p, !noalias.addrspace !2 |
63 | | - call void @use.ptr(ptr %v2) |
| 63 | + call void @use.ptr(i32 1, ptr %v2) |
64 | 64 | ret void |
65 | 65 | } |
66 | 66 |
|
|
0 commit comments