1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2 ; RUN: opt -passes='early-cse<memssa>' -S < %s | FileCheck %s
5 declare void @use.ptr(ptr) memory(read)
7 define void @load_first_noalias_addrspace(ptr %p) {
8 ; CHECK-LABEL: define void @load_first_noalias_addrspace(
9 ; CHECK-SAME: ptr [[P:%.*]]) {
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]])
13 ; CHECK-NEXT: ret void
15 %v1 = load ptr, ptr %p, !nonnull !{}, !noundef !{}, !noalias.addrspace !0
16 call void @use.ptr(ptr %v1)
17 %v2 = load ptr, ptr %p
18 call void @use.ptr(ptr %v2)
22 define void @load_both_same_noalias_addrspace(ptr %p) {
23 ; CHECK-LABEL: define void @load_both_same_noalias_addrspace(
24 ; CHECK-SAME: ptr [[P:%.*]]) {
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]])
28 ; CHECK-NEXT: ret void
30 %v1 = load ptr, ptr %p, !nonnull !{}, !noundef !{}, !noalias.addrspace !0
31 call void @use.ptr(ptr %v1)
32 %v2 = load ptr, ptr %p, !noalias.addrspace !0
33 call void @use.ptr(ptr %v2)
37 define void @load_both_disjoint_noalias_addrspace(ptr %p) {
38 ; CHECK-LABEL: define void @load_both_disjoint_noalias_addrspace(
39 ; CHECK-SAME: ptr [[P:%.*]]) {
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]])
43 ; CHECK-NEXT: ret void
45 %v1 = load ptr, ptr %p, !nonnull !{}, !noundef !{}, !noalias.addrspace !0
46 call void @use.ptr(ptr %v1)
47 %v2 = load ptr, ptr %p, !noalias.addrspace !1
48 call void @use.ptr(ptr %v2)
52 define void @load_both_overlap_noalias_addrspace(ptr %p) {
53 ; CHECK-LABEL: define void @load_both_overlap_noalias_addrspace(
54 ; CHECK-SAME: ptr [[P:%.*]]) {
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]])
58 ; CHECK-NEXT: ret void
60 %v1 = load ptr, ptr %p, !nonnull !{}, !noundef !{}, !noalias.addrspace !0
61 call void @use.ptr(ptr %v1)
62 %v2 = load ptr, ptr %p, !noalias.addrspace !2
63 call void @use.ptr(ptr %v2)
71 ; CHECK: [[META0]] = !{}
72 ; CHECK: [[META1]] = !{i32 5, i32 6}