[llvm] 955417a - Revert "[llvm][AArch64] Copy all operands when expanding BLR_BTI bundle (#78267)"

David Spickett via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 19 04:07:04 PST 2024


Author: David Spickett
Date: 2024-01-19T12:06:30Z
New Revision: 955417ade2648c2b1a4e5f0be697f61570590a88

URL: https://github.com/llvm/llvm-project/commit/955417ade2648c2b1a4e5f0be697f61570590a88
DIFF: https://github.com/llvm/llvm-project/commit/955417ade2648c2b1a4e5f0be697f61570590a88.diff

LOG: Revert "[llvm][AArch64] Copy all operands when expanding BLR_BTI bundle (#78267)"

This reverts commit 228aecbcf106a50c30b1f8f1915d61850860cbcd.

Failing expensive checks: https://lab.llvm.org/buildbot/#/builders/16/builds/59798

Added: 
    llvm/test/CodeGen/AArch64/blr-bti-preserves-regmask.mir

Modified: 
    llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp

Removed: 
    llvm/test/CodeGen/AArch64/blr-bti-preserves-operands.mir


################################################################################
diff  --git a/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp b/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp
index c45cb8eba89723..bb7f4d907ffd7f 100644
--- a/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp
@@ -842,11 +842,9 @@ bool AArch64ExpandPseudo::expandCALL_BTI(MachineBasicBlock &MBB,
   unsigned Opc = CallTarget.isGlobal() ? AArch64::BL : AArch64::BLR;
   MachineInstr *Call =
       BuildMI(MBB, MBBI, MI.getDebugLoc(), TII->get(Opc)).getInstr();
-
-  for (const MachineOperand &MO : MI.operands())
-    Call->addOperand(MO);
-
+  Call->addOperand(CallTarget);
   Call->setCFIType(*MBB.getParent(), MI.getCFIType());
+  Call->copyImplicitOps(*MBB.getParent(), MI);
 
   MachineInstr *BTI =
       BuildMI(MBB, MBBI, MI.getDebugLoc(), TII->get(AArch64::HINT))

diff  --git a/llvm/test/CodeGen/AArch64/blr-bti-preserves-operands.mir b/llvm/test/CodeGen/AArch64/blr-bti-preserves-operands.mir
deleted file mode 100644
index 3b2f10348bd773..00000000000000
--- a/llvm/test/CodeGen/AArch64/blr-bti-preserves-operands.mir
+++ /dev/null
@@ -1,24 +0,0 @@
-# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass=aarch64-expand-pseudo -o - %s | FileCheck %s
-
-# When expanding a BLR_BTI, we should copy all the operands to the branch in the
-# bundle. Otherwise we could end up using a register after the BL which was
-# clobbered by the function that was called, or overwriting an argument to that
-# function before we make the call.
-# CHECK:    BUNDLE implicit-def $lr, implicit-def $w30, implicit-def $sp, implicit-def $wsp, implicit $x0, implicit $w1, implicit $sp {
-# CHECK:      BL @_setjmp, $x0, $w1, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit-def dead $lr, implicit $sp, implicit-def $sp
-# CHECK:      HINT 36
-# CHECK:    }
-
---- |
-  define void @a() {
-    ret void
-  }
-
-  declare void @_setjmp(...)
-...
----
-name: a
-body: |
-  bb.0:
-    BLR_BTI @_setjmp, $x0, $w1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp
-...

diff  --git a/llvm/test/CodeGen/AArch64/blr-bti-preserves-regmask.mir b/llvm/test/CodeGen/AArch64/blr-bti-preserves-regmask.mir
new file mode 100644
index 00000000000000..91652c6e20c8f8
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/blr-bti-preserves-regmask.mir
@@ -0,0 +1,23 @@
+# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass=aarch64-expand-pseudo -o - %s | FileCheck %s
+
+# When expanding a BLR_BTI, we should keep the regmask that was attached to it.
+# Otherwise we could end up using a register after the BL which was clobbered by
+# the function that was called.
+# CHECK:    BUNDLE implicit-def $lr, implicit-def $w30, implicit-def $sp, implicit-def $wsp, implicit $sp {
+# CHECK:      BL @_setjmp, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit-def dead $lr, implicit $sp, implicit-def $sp
+# CHECK:      HINT 36
+# CHECK:    }
+
+--- |
+  define void @a() {
+    ret void
+  }
+
+  declare void @_setjmp(...)
+...
+---
+name: a
+body: |
+  bb.0:
+    BLR_BTI @_setjmp, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp
+...


        


More information about the llvm-commits mailing list