diff options
author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2016-08-19 18:46:13 +0000 |
---|---|---|
committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2016-08-19 18:46:13 +0000 |
commit | 8849a5137009509ef6c76115ffef62118f1b7fee (patch) | |
tree | 0fbd1017bc6d13bb443a280af94040eee285d60e /llvm/lib/Target | |
parent | 181f924beb494c2ac778eff09559132c3c942d31 (diff) | |
download | bcm5719-llvm-8849a5137009509ef6c76115ffef62118f1b7fee.tar.gz bcm5719-llvm-8849a5137009509ef6c76115ffef62118f1b7fee.zip |
[Hexagon] Do not cache alloca instructions during isel
They can be deleted or replicated, so the cache may become outdated.
They only need to be visited once during frame lowering, so just scan
the function instead.
llvm-svn: 279297
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp | 7 | ||||
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonISelLowering.cpp | 14 | ||||
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonISelLowering.h | 3 | ||||
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonInstrInfo.td | 3 | ||||
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonMachineFunctionInfo.h | 8 |
5 files changed, 6 insertions, 29 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp b/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp index cc1fdd4fbf2..644c643d066 100644 --- a/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp +++ b/llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp @@ -532,8 +532,11 @@ void HexagonFrameLowering::insertPrologueInBlock(MachineBasicBlock &MBB, unsigned MaxCF = MFI.getMaxCallFrameSize(); MachineBasicBlock::iterator InsertPt = MBB.begin(); - auto *FuncInfo = MF.getInfo<HexagonMachineFunctionInfo>(); - auto &AdjustRegs = FuncInfo->getAllocaAdjustInsts(); + SmallVector<MachineInstr *, 4> AdjustRegs; + for (auto &MBB : MF) + for (auto &MI : MBB) + if (MI.getOpcode() == Hexagon::PS_alloca) + AdjustRegs.push_back(&MI); for (auto MI : AdjustRegs) { assert((MI->getOpcode() == Hexagon::PS_alloca) && "Expected alloca"); diff --git a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp index fad6c982126..6ba9a31b316 100644 --- a/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp +++ b/llvm/lib/Target/Hexagon/HexagonISelLowering.cpp @@ -2958,20 +2958,6 @@ HexagonTargetLowering::getPICJumpTableRelocBase(SDValue Table, return DAG.getNode(HexagonISD::AT_PCREL, SDLoc(Table), VT, T); } -MachineBasicBlock *HexagonTargetLowering::EmitInstrWithCustomInserter( - MachineInstr &MI, MachineBasicBlock *BB) const { - switch (MI.getOpcode()) { - case Hexagon::PS_alloca: { - MachineFunction *MF = BB->getParent(); - auto *FuncInfo = MF->getInfo<HexagonMachineFunctionInfo>(); - FuncInfo->addAllocaAdjustInst(&MI); - return BB; - } - default: - llvm_unreachable("Unexpected instr type to insert"); - } // switch -} - //===----------------------------------------------------------------------===// // Inline Assembly Support //===----------------------------------------------------------------------===// diff --git a/llvm/lib/Target/Hexagon/HexagonISelLowering.h b/llvm/lib/Target/Hexagon/HexagonISelLowering.h index cfe24a137db..87e2d254750 100644 --- a/llvm/lib/Target/Hexagon/HexagonISelLowering.h +++ b/llvm/lib/Target/Hexagon/HexagonISelLowering.h @@ -182,9 +182,6 @@ bool isPositiveHalfWord(SDNode *N); const SDLoc &dl, SelectionDAG &DAG) const override; bool mayBeEmittedAsTailCall(CallInst *CI) const override; - MachineBasicBlock * - EmitInstrWithCustomInserter(MachineInstr &MI, - MachineBasicBlock *BB) const override; /// If a physical register, this returns the register that receives the /// exception address on entry to an EH pad. diff --git a/llvm/lib/Target/Hexagon/HexagonInstrInfo.td b/llvm/lib/Target/Hexagon/HexagonInstrInfo.td index eb084c66ed6..26e18b9916a 100644 --- a/llvm/lib/Target/Hexagon/HexagonInstrInfo.td +++ b/llvm/lib/Target/Hexagon/HexagonInstrInfo.td @@ -5071,8 +5071,7 @@ def HexagonALLOCA : SDNode<"HexagonISD::ALLOCA", SDTHexagonALLOCA, // The reason for the custom inserter is to record all ALLOCA instructions // in MachineFunctionInfo. -let Defs = [R29], isCodeGenOnly = 1, isPseudo = 1, hasSideEffects = 1, - usesCustomInserter = 1 in +let Defs = [R29], isCodeGenOnly = 1, isPseudo = 1, hasSideEffects = 1 in def PS_alloca: ALU32Inst<(outs IntRegs:$Rd), (ins IntRegs:$Rs, u32Imm:$A), "", [(set (i32 IntRegs:$Rd), diff --git a/llvm/lib/Target/Hexagon/HexagonMachineFunctionInfo.h b/llvm/lib/Target/Hexagon/HexagonMachineFunctionInfo.h index 26c5b63fec6..371b52108b9 100644 --- a/llvm/lib/Target/Hexagon/HexagonMachineFunctionInfo.h +++ b/llvm/lib/Target/Hexagon/HexagonMachineFunctionInfo.h @@ -29,7 +29,6 @@ class HexagonMachineFunctionInfo : public MachineFunctionInfo { unsigned SRetReturnReg; unsigned StackAlignBaseVReg; // Aligned-stack base register (virtual) unsigned StackAlignBasePhysReg; // (physical) - std::vector<MachineInstr*> AllocaAdjustInsts; int VarArgsFrameIndex; bool HasClobberLR; bool HasEHReturn; @@ -47,13 +46,6 @@ public: unsigned getSRetReturnReg() const { return SRetReturnReg; } void setSRetReturnReg(unsigned Reg) { SRetReturnReg = Reg; } - void addAllocaAdjustInst(MachineInstr* MI) { - AllocaAdjustInsts.push_back(MI); - } - const std::vector<MachineInstr*>& getAllocaAdjustInsts() { - return AllocaAdjustInsts; - } - void setVarArgsFrameIndex(int v) { VarArgsFrameIndex = v; } int getVarArgsFrameIndex() { return VarArgsFrameIndex; } |