[win/asan] GetInstructionSize: Fix `83 E4 XX` to return 3. (#119644)
[llvm-project.git] / llvm / test / Transforms / MergeFunc / mergefunc-preserve-nonnull.ll
blob3481d53b626fcc4c793c52e42ae3fff7b7c79321
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -passes=mergefunc -S < %s | FileCheck %s
4 ; This test makes sure that the mergefunc pass does not merge functions
5 ; that have different nonnull assertions.
7 %1 = type ptr
9 define void @f1(ptr %0, ptr %1) {
10 ; CHECK-LABEL: @f1(
11 ; CHECK-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP1:%.*]], align 8, !nonnull !0
12 ; CHECK-NEXT:    store ptr [[TMP3]], ptr [[TMP0:%.*]], align 8
13 ; CHECK-NEXT:    ret void
15   %3 = load ptr, ptr %1, align 8, !nonnull !0
16   store ptr %3, ptr %0, align 8
17   ret void
20 define void @f2(ptr %0, ptr %1) {
21 ; CHECK-LABEL: @f2(
22 ; CHECK-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP1:%.*]], align 8
23 ; CHECK-NEXT:    store ptr [[TMP3]], ptr [[TMP0:%.*]], align 8
24 ; CHECK-NEXT:    ret void
26   %3 = load ptr, ptr %1, align 8
27   store ptr %3, ptr %0, align 8
28   ret void
31 define void @noundef(ptr %0, ptr %1) {
32 ; CHECK-LABEL: @noundef(
33 ; CHECK-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP1:%.*]], align 8, !noundef !0
34 ; CHECK-NEXT:    store ptr [[TMP3]], ptr [[TMP0:%.*]], align 8
35 ; CHECK-NEXT:    ret void
37   %3 = load ptr, ptr %1, align 8, !noundef !0
38   store ptr %3, ptr %0, align 8
39   ret void
42 define void @noalias_1(ptr %0, ptr %1) {
43 ; CHECK-LABEL: @noalias_1(
44 ; CHECK-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP1:%.*]], align 8, !noalias !1
45 ; CHECK-NEXT:    store ptr [[TMP3]], ptr [[TMP0:%.*]], align 8, !alias.scope !1
46 ; CHECK-NEXT:    ret void
48   %3 = load ptr, ptr %1, align 8, !noalias !4
49   store ptr %3, ptr %0, align 8, !alias.scope !4
50   ret void
53 define void @noundef_dbg(ptr %0, ptr %1) {
54 ; CHECK-LABEL: @noundef_dbg(
55 ; CHECK-NEXT:    tail call void @noundef(ptr [[TMP0:%.*]], ptr [[TMP1:%.*]])
56 ; CHECK-NEXT:    ret void
58   %3 = load ptr, ptr %1, align 8, !noundef !0, !dbg !1
59   store ptr %3, ptr %0, align 8
60   ret void
63 ; FIXME: This is merged despite different noalias metadata.
64 define void @noalias_2(ptr %0, ptr %1) {
65 ; CHECK-LABEL: @noalias_2(
66 ; CHECK-NEXT:    tail call void @noalias_1(ptr [[TMP0:%.*]], ptr [[TMP1:%.*]])
67 ; CHECK-NEXT:    ret void
69   %3 = load ptr, ptr %1, align 8, !noalias !7
70   store ptr %3, ptr %0, align 8, !alias.scope !7
71   ret void
74 !0 = !{}
75 !1 = !{}
76 !2 = !{!2}
77 !3 = !{!3, !2}
78 !4 = !{!3}
79 !5 = !{!5}
80 !6 = !{!6, !5}
81 !7 = !{!6}