[clang] [llvm] [llvm][AArch64] Do not inline a function with different signing scheme. (PR #80642)

Nick Desaulniers via cfe-commits cfe-commits at lists.llvm.org
Tue Feb 13 09:48:23 PST 2024


================
@@ -0,0 +1,126 @@
+; Check the inliner doesn't inline a function with different sign return address schemes.
+; RUN: opt < %s -passes=inline -S | FileCheck %s
+
+declare void @init(ptr)
+
+define internal i32 @foo_all() #0 {
+  ret i32 43
+}
+
+define internal i32 @foo_nonleaf() #1 {
+  ret i32 44
+}
+
+define internal i32 @foo_none() #2 {
+  ret i32 42
+}
+
+define internal i32 @foo_lr() #3 {
+  ret i32 45
+}
+
+define internal i32 @foo_bkey() #4 {
+  ret i32 46
+}
+
+define dso_local i32 @bar_all() #0 {
+; CHECK-LABEL: bar_all
+; CHECK-NOT:   call i32 @foo_all()
+; CHECK:       call i32 @foo_nonleaf()
+; CHECK:       call i32 @foo_none()
+; CHECK:       call i32 @foo_lr()
+; CHECK:       call i32 @foo_bkey()
+  %1 = call i32 @foo_all()
+  %2 = call i32 @foo_nonleaf()
+  %3 = call i32 @foo_none()
+  %4 = call i32 @foo_lr()
+  %5 = call i32 @foo_bkey()
+  %6 = add nsw i32 %1, %2
+  %7 = add nsw i32 %6, %3
+  %8 = add nsw i32 %7, %4
+  %9 = add nsw i32 %8, %5
+  ret i32 %9
----------------
nickdesaulniers wrote:

These `add` are adding noise to the test.  Just make the called functions `void` functions, and don't bother with these adds.

https://github.com/llvm/llvm-project/pull/80642


More information about the cfe-commits mailing list