[PATCH] D46923: [MachineOutliner] Don't save/restore LR for tail calls.

Eli Friedman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed May 16 12:53:07 PDT 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL332514: [MachineOutliner] Don't save/restore LR for tail calls. (authored by efriedma, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D46923?vs=146980&id=147161#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D46923

Files:
  llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp
  llvm/trunk/test/CodeGen/AArch64/machine-outliner-tail.ll


Index: llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp
===================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp
+++ llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp
@@ -5255,10 +5255,11 @@
 void AArch64InstrInfo::insertOutlinerEpilogue(
     MachineBasicBlock &MBB, MachineFunction &MF,
     const MachineOutlinerInfo &MInfo) const {
-
   // Is there a call in the outlined range?
-  if (std::any_of(MBB.instr_begin(), MBB.instr_end(),
-                  [](MachineInstr &MI) { return MI.isCall(); })) {
+  auto IsNonTailCall = [](MachineInstr &MI) {
+    return MI.isCall() && !MI.isReturn();
+  };
+  if (std::any_of(MBB.instr_begin(), MBB.instr_end(), IsNonTailCall)) {
     // Fix up the instructions in the range, since we're going to modify the
     // stack.
     fixupPostOutline(MBB);
Index: llvm/trunk/test/CodeGen/AArch64/machine-outliner-tail.ll
===================================================================
--- llvm/trunk/test/CodeGen/AArch64/machine-outliner-tail.ll
+++ llvm/trunk/test/CodeGen/AArch64/machine-outliner-tail.ll
@@ -0,0 +1,22 @@
+; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple=aarch64-linux-gnu < %s | FileCheck %s
+
+; CHECK: OUTLINED_FUNCTION_0:
+; CHECK:      orr     w0, wzr, #0x1
+; CHECK-NEXT: orr     w1, wzr, #0x2
+; CHECK-NEXT: orr     w2, wzr, #0x3
+; CHECK-NEXT: orr     w3, wzr, #0x4
+; CHECK-NEXT: b       z
+
+define void @a() {
+entry:
+  tail call void @z(i32 1, i32 2, i32 3, i32 4)
+  ret void
+}
+
+declare void @z(i32, i32, i32, i32)
+
+define dso_local void @b(i32* nocapture readnone %p) {
+entry:
+  tail call void @z(i32 1, i32 2, i32 3, i32 4)
+  ret void
+}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D46923.147161.patch
Type: text/x-patch
Size: 1711 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180516/cdb089bc/attachment.bin>


More information about the llvm-commits mailing list