summaryrefslogtreecommitdiff
path: root/lib/Target/AMDGPU/SIISelLowering.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2017-08-02 01:31:28 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2017-08-02 01:31:28 +0000
commit23e59ddf6d1bb9f28f69c2a64d97da041af1899c (patch)
tree5724f955139af3a1f71fbadec970a7fe8f614567 /lib/Target/AMDGPU/SIISelLowering.cpp
parentcbd284128f6bede7c09c6e28dd205d948a5d6ddf (diff)
AMDGPU: Analyze callee resource usage in AsmPrinter
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309781 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/AMDGPU/SIISelLowering.cpp')
-rw-r--r--lib/Target/AMDGPU/SIISelLowering.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/Target/AMDGPU/SIISelLowering.cpp b/lib/Target/AMDGPU/SIISelLowering.cpp
index 1d88b5d78d7..47a5aa4b0ce 100644
--- a/lib/Target/AMDGPU/SIISelLowering.cpp
+++ b/lib/Target/AMDGPU/SIISelLowering.cpp
@@ -2650,14 +2650,27 @@ MachineBasicBlock *SITargetLowering::EmitInstrWithCustomInserter(
.addReg(Info->getStackPtrOffsetReg(), RegState::Implicit);
return BB;
}
- case AMDGPU::SI_CALL: {
+ case AMDGPU::SI_CALL_ISEL: {
const SIInstrInfo *TII = getSubtarget()->getInstrInfo();
const DebugLoc &DL = MI.getDebugLoc();
unsigned ReturnAddrReg = TII->getRegisterInfo().getReturnAddressReg(*MF);
+
+ MachineRegisterInfo &MRI = MF->getRegInfo();
+ unsigned GlobalAddrReg = MI.getOperand(0).getReg();
+ MachineInstr *PCRel = MRI.getVRegDef(GlobalAddrReg);
+ assert(PCRel->getOpcode() == AMDGPU::SI_PC_ADD_REL_OFFSET);
+
+ const GlobalValue *G = PCRel->getOperand(1).getGlobal();
+
MachineInstrBuilder MIB =
- BuildMI(*BB, MI, DL, TII->get(AMDGPU::S_SWAPPC_B64), ReturnAddrReg);
- for (unsigned I = 0, E = MI.getNumOperands(); I != E; ++I)
+ BuildMI(*BB, MI, DL, TII->get(AMDGPU::SI_CALL), ReturnAddrReg)
+ .add(MI.getOperand(0))
+ .addGlobalAddress(G);
+
+ for (unsigned I = 1, E = MI.getNumOperands(); I != E; ++I)
MIB.add(MI.getOperand(I));
+
+
MIB.setMemRefs(MI.memoperands_begin(), MI.memoperands_end());
MI.eraseFromParent();