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