87 lines · plain
1;; Test verifies inlining happens cross module when module flags are upgraded.2;; `foo` and `main` are both old semantic while bar is the new semantic.3;; Regression test for #827634 5; RUN: split-file %s %t6; RUN: opt -module-summary %t/foo.ll -o %t/foo.o7; RUN: opt -module-summary %t/bar.ll -o %t/bar.o8; RUN: opt -module-summary %t/main.ll -o %t/main.o9; RUN: llvm-lto2 run %t/main.o %t/foo.o %t/bar.o -save-temps \10; RUN: -o %t/t.exe \11; RUN: -r=%t/foo.o,foo,plx \12; RUN: -r=%t/bar.o,bar,plx \13; RUN: -r=%t/main.o,foo,l \14; RUN: -r=%t/main.o,bar,l \15; RUN: -r=%t/main.o,main,plx 2>&116; RUN: llvm-dis %t/t.exe.1.4.opt.bc -o - | FileCheck %s17 18; CHECK: define dso_local noundef i32 @main() local_unnamed_addr #0 {19; CHECK-NEXT: entry:20; CHECK-NEXT: ret i32 3521; CHECK-NEXT: }22 23; CHECK: attributes #0 = { {{.*}}"branch-target-enforcement" "sign-return-address"="all" "sign-return-address-key"="b_key" }24 25; CHECK: !llvm.module.flags = !{!0, !1, !2, !3}26 27; CHECK: !0 = !{i32 8, !"branch-target-enforcement", i32 2}28; CHECK: !1 = !{i32 8, !"sign-return-address", i32 2}29; CHECK: !2 = !{i32 8, !"sign-return-address-all", i32 2}30; CHECK: !3 = !{i32 8, !"sign-return-address-with-bkey", i32 2}31 32 33;--- foo.ll34target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"35target triple = "aarch64-unknown-linux-gnu"36 37define dso_local noundef i32 @foo() local_unnamed_addr #0 {38entry:39 ret i32 3440}41 42attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) }43!llvm.module.flags = !{!0, !1, !2, !3 }44!0 = !{i32 8, !"branch-target-enforcement", i32 1}45!1 = !{i32 8, !"sign-return-address", i32 1}46!2 = !{i32 8, !"sign-return-address-all", i32 1}47!3 = !{i32 8, !"sign-return-address-with-bkey", i32 1}48 49;--- bar.ll50target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"51target triple = "aarch64-unknown-linux-gnu"52 53define dso_local noundef i32 @bar() local_unnamed_addr #0 {54entry:55 ret i32 156}57 58attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) "branch-target-enforcement" "sign-return-address"="all" "sign-return-address-key"="b_key" }59!llvm.module.flags = !{!0, !1, !2, !3 }60!0 = !{i32 8, !"branch-target-enforcement", i32 2}61!1 = !{i32 8, !"sign-return-address", i32 2}62!2 = !{i32 8, !"sign-return-address-all", i32 2}63!3 = !{i32 8, !"sign-return-address-with-bkey", i32 2}64 65;--- main.ll66target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"67target triple = "aarch64-unknown-linux-gnu"68 69declare i32 @foo();70declare i32 @bar();71 72define i32 @main() #0 {73entry:74 %1 = call i32 @foo()75 %2 = call i32 @bar()76 %3 = add i32 %1, %277 ret i32 %378}79 80attributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) }81 82!llvm.module.flags = !{!0, !1, !2, !3 }83!0 = !{i32 8, !"branch-target-enforcement", i32 1}84!1 = !{i32 8, !"sign-return-address", i32 1}85!2 = !{i32 8, !"sign-return-address-all", i32 1}86!3 = !{i32 8, !"sign-return-address-with-bkey", i32 1}87