82 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=mergefunc -S < %s | FileCheck %s3 4; This test makes sure that the mergefunc pass does not merge functions5; that have different nonnull assertions.6 7%1 = type ptr8 9define void @f1(ptr %0, ptr %1) {10; CHECK-LABEL: @f1(11; CHECK-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP1:%.*]], align 8, !nonnull !012; CHECK-NEXT: store ptr [[TMP3]], ptr [[TMP0:%.*]], align 813; CHECK-NEXT: ret void14;15 %3 = load ptr, ptr %1, align 8, !nonnull !016 store ptr %3, ptr %0, align 817 ret void18}19 20define void @f2(ptr %0, ptr %1) {21; CHECK-LABEL: @f2(22; CHECK-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP1:%.*]], align 823; CHECK-NEXT: store ptr [[TMP3]], ptr [[TMP0:%.*]], align 824; CHECK-NEXT: ret void25;26 %3 = load ptr, ptr %1, align 827 store ptr %3, ptr %0, align 828 ret void29}30 31define void @noundef(ptr %0, ptr %1) {32; CHECK-LABEL: @noundef(33; CHECK-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP1:%.*]], align 8, !noundef !034; CHECK-NEXT: store ptr [[TMP3]], ptr [[TMP0:%.*]], align 835; CHECK-NEXT: ret void36;37 %3 = load ptr, ptr %1, align 8, !noundef !038 store ptr %3, ptr %0, align 839 ret void40}41 42define void @noalias_1(ptr %0, ptr %1) {43; CHECK-LABEL: @noalias_1(44; CHECK-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP1:%.*]], align 8, !noalias !145; CHECK-NEXT: store ptr [[TMP3]], ptr [[TMP0:%.*]], align 8, !alias.scope !146; CHECK-NEXT: ret void47;48 %3 = load ptr, ptr %1, align 8, !noalias !449 store ptr %3, ptr %0, align 8, !alias.scope !450 ret void51}52 53define 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 void57;58 %3 = load ptr, ptr %1, align 8, !noundef !0, !dbg !159 store ptr %3, ptr %0, align 860 ret void61}62 63; FIXME: This is merged despite different noalias metadata.64define 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 void68;69 %3 = load ptr, ptr %1, align 8, !noalias !770 store ptr %3, ptr %0, align 8, !alias.scope !771 ret void72}73 74!0 = !{}75!1 = !{}76!2 = !{!2}77!3 = !{!3, !2}78!4 = !{!3}79!5 = !{!5}80!6 = !{!6, !5}81!7 = !{!6}82