xref: /llvm-project/llvm/test/Transforms/MergeFunc/mergefunc-preserve-nonnull.ll (revision 2f5fdbfab8c63047bd4ebef154258868065168b3)
116b6826bSDing Xiang Fei; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
216b6826bSDing Xiang Fei; RUN: opt -passes=mergefunc -S < %s | FileCheck %s
316b6826bSDing Xiang Fei
416b6826bSDing Xiang Fei; This test makes sure that the mergefunc pass does not merge functions
516b6826bSDing Xiang Fei; that have different nonnull assertions.
616b6826bSDing Xiang Fei
716b6826bSDing Xiang Fei%1 = type ptr
816b6826bSDing Xiang Fei
916b6826bSDing Xiang Feidefine void @f1(ptr %0, ptr %1) {
1016b6826bSDing Xiang Fei; CHECK-LABEL: @f1(
1116b6826bSDing Xiang Fei; CHECK-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP1:%.*]], align 8, !nonnull !0
1216b6826bSDing Xiang Fei; CHECK-NEXT:    store ptr [[TMP3]], ptr [[TMP0:%.*]], align 8
1316b6826bSDing Xiang Fei; CHECK-NEXT:    ret void
1416b6826bSDing Xiang Fei;
1516b6826bSDing Xiang Fei  %3 = load ptr, ptr %1, align 8, !nonnull !0
1616b6826bSDing Xiang Fei  store ptr %3, ptr %0, align 8
1716b6826bSDing Xiang Fei  ret void
1816b6826bSDing Xiang Fei}
1916b6826bSDing Xiang Fei
2016b6826bSDing Xiang Feidefine void @f2(ptr %0, ptr %1) {
2116b6826bSDing Xiang Fei; CHECK-LABEL: @f2(
2216b6826bSDing Xiang Fei; CHECK-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP1:%.*]], align 8
2316b6826bSDing Xiang Fei; CHECK-NEXT:    store ptr [[TMP3]], ptr [[TMP0:%.*]], align 8
2416b6826bSDing Xiang Fei; CHECK-NEXT:    ret void
2516b6826bSDing Xiang Fei;
2616b6826bSDing Xiang Fei  %3 = load ptr, ptr %1, align 8
2716b6826bSDing Xiang Fei  store ptr %3, ptr %0, align 8
2816b6826bSDing Xiang Fei  ret void
2916b6826bSDing Xiang Fei}
3016b6826bSDing Xiang Fei
31*2f5fdbfaSNikita Popovdefine void @noundef(ptr %0, ptr %1) {
32*2f5fdbfaSNikita Popov; CHECK-LABEL: @noundef(
3316b6826bSDing Xiang Fei; CHECK-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP1:%.*]], align 8, !noundef !0
3416b6826bSDing Xiang Fei; CHECK-NEXT:    store ptr [[TMP3]], ptr [[TMP0:%.*]], align 8
3516b6826bSDing Xiang Fei; CHECK-NEXT:    ret void
3616b6826bSDing Xiang Fei;
3716b6826bSDing Xiang Fei  %3 = load ptr, ptr %1, align 8, !noundef !0
3816b6826bSDing Xiang Fei  store ptr %3, ptr %0, align 8
3916b6826bSDing Xiang Fei  ret void
4016b6826bSDing Xiang Fei}
4116b6826bSDing Xiang Fei
42*2f5fdbfaSNikita Popovdefine void @noalias_1(ptr %0, ptr %1) {
43*2f5fdbfaSNikita Popov; CHECK-LABEL: @noalias_1(
44*2f5fdbfaSNikita Popov; CHECK-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP1:%.*]], align 8, !noalias !1
45*2f5fdbfaSNikita Popov; CHECK-NEXT:    store ptr [[TMP3]], ptr [[TMP0:%.*]], align 8, !alias.scope !1
46*2f5fdbfaSNikita Popov; CHECK-NEXT:    ret void
47*2f5fdbfaSNikita Popov;
48*2f5fdbfaSNikita Popov  %3 = load ptr, ptr %1, align 8, !noalias !4
49*2f5fdbfaSNikita Popov  store ptr %3, ptr %0, align 8, !alias.scope !4
50*2f5fdbfaSNikita Popov  ret void
51*2f5fdbfaSNikita Popov}
52*2f5fdbfaSNikita Popov
53*2f5fdbfaSNikita Popovdefine void @noundef_dbg(ptr %0, ptr %1) {
54*2f5fdbfaSNikita Popov; CHECK-LABEL: @noundef_dbg(
55*2f5fdbfaSNikita Popov; CHECK-NEXT:    tail call void @noundef(ptr [[TMP0:%.*]], ptr [[TMP1:%.*]])
5616b6826bSDing Xiang Fei; CHECK-NEXT:    ret void
5716b6826bSDing Xiang Fei;
5816b6826bSDing Xiang Fei  %3 = load ptr, ptr %1, align 8, !noundef !0, !dbg !1
5916b6826bSDing Xiang Fei  store ptr %3, ptr %0, align 8
6016b6826bSDing Xiang Fei  ret void
6116b6826bSDing Xiang Fei}
6216b6826bSDing Xiang Fei
63*2f5fdbfaSNikita Popov; FIXME: This is merged despite different noalias metadata.
64*2f5fdbfaSNikita Popovdefine void @noalias_2(ptr %0, ptr %1) {
65*2f5fdbfaSNikita Popov; CHECK-LABEL: @noalias_2(
66*2f5fdbfaSNikita Popov; CHECK-NEXT:    tail call void @noalias_1(ptr [[TMP0:%.*]], ptr [[TMP1:%.*]])
67*2f5fdbfaSNikita Popov; CHECK-NEXT:    ret void
68*2f5fdbfaSNikita Popov;
69*2f5fdbfaSNikita Popov  %3 = load ptr, ptr %1, align 8, !noalias !7
70*2f5fdbfaSNikita Popov  store ptr %3, ptr %0, align 8, !alias.scope !7
71*2f5fdbfaSNikita Popov  ret void
72*2f5fdbfaSNikita Popov}
73*2f5fdbfaSNikita Popov
7416b6826bSDing Xiang Fei!0 = !{}
7516b6826bSDing Xiang Fei!1 = !{}
76*2f5fdbfaSNikita Popov!2 = !{!2}
77*2f5fdbfaSNikita Popov!3 = !{!3, !2}
78*2f5fdbfaSNikita Popov!4 = !{!3}
79*2f5fdbfaSNikita Popov!5 = !{!5}
80*2f5fdbfaSNikita Popov!6 = !{!6, !5}
81*2f5fdbfaSNikita Popov!7 = !{!6}
82