[PATCH] D21561: [IPRA] Set callee saved registers to none for local function when IPRA is enabled.
Vivek Pandya via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 21 12:37:24 PDT 2016
vivekvpandya updated this revision to Diff 61426.
vivekvpandya added a comment.
Changes as per reviews.
http://reviews.llvm.org/D21561
Files:
include/llvm/Target/TargetFrameLowering.h
lib/CodeGen/TargetFrameLoweringImpl.cpp
test/CodeGen/X86/ipra-local-linkage.ll
Index: test/CodeGen/X86/ipra-local-linkage.ll
===================================================================
--- /dev/null
+++ test/CodeGen/X86/ipra-local-linkage.ll
@@ -0,0 +1,22 @@
+; RUN: llc < %s | FileCheck %s -check-prefix=NOIPRA
+; RUN: llc -enable-ipra < %s | FileCheck %s
+
+target triple = "x86_64--"
+
+define void @bar() #0 {
+ call void @foo()
+ ret void
+}
+
+define internal void @foo() #0 {
+; When IPRA is not enabled R15 will be saved by foo as it is callee saved reg.
+; NOIPRA-LABEL: foo:
+; NOIPRA: pushq %r15
+; When IPRA is enabled none register should be saved as foo() is local function
+; so we optimize it to save no registers.
+; CHECK: foo:
+; CHECK-NOT: pushq %r15
+ call void asm sideeffect "", "~{eax},~{ecx},~{edi},~{r15}"() #0
+ ret void
+}
+attributes #0 = {nounwind}
Index: lib/CodeGen/TargetFrameLoweringImpl.cpp
===================================================================
--- lib/CodeGen/TargetFrameLoweringImpl.cpp
+++ lib/CodeGen/TargetFrameLoweringImpl.cpp
@@ -59,6 +59,14 @@
void TargetFrameLowering::determineCalleeSaves(MachineFunction &MF,
BitVector &SavedRegs,
RegScavenger *RS) const {
+ // When interprocedural register allocation is enabled caller saved registers
+ // are preferred over callee saved registers.
+ if (UseIPRA) {
+ Function *F = const_cast<Function *>(MF.getFunction());
+ if (F->hasLocalLinkage() && !F->hasAddressTaken())
+ return;
+ }
+
// Get the callee saved register list...
const TargetRegisterInfo &TRI = *MF.getSubtarget().getRegisterInfo();
const MCPhysReg *CSRegs = TRI.getCalleeSavedRegs(&MF);
Index: include/llvm/Target/TargetFrameLowering.h
===================================================================
--- include/llvm/Target/TargetFrameLowering.h
+++ include/llvm/Target/TargetFrameLowering.h
@@ -18,6 +18,8 @@
#include <utility>
#include <vector>
+extern llvm::cl::opt<bool> UseIPRA;
+
namespace llvm {
class BitVector;
class CalleeSavedInfo;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D21561.61426.patch
Type: text/x-patch
Size: 2080 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160621/21bcdb11/attachment.bin>
More information about the llvm-commits
mailing list