diff options
author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-01-25 16:36:53 +0000 |
---|---|---|
committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-01-25 16:36:53 +0000 |
commit | 16610b0a57ddf66cd29ee6a4cbd2d81eef75dd69 (patch) | |
tree | b0397b1e592f8f00aecf19fdcc8744c1684b364e /llvm/lib | |
parent | 1d68112c4b9ec7502ed9776555fd499cb2483347 (diff) | |
download | bcm5719-llvm-16610b0a57ddf66cd29ee6a4cbd2d81eef75dd69.tar.gz bcm5719-llvm-16610b0a57ddf66cd29ee6a4cbd2d81eef75dd69.zip |
Revert "[Hexagon] Replace EmitFunctionEntryCode with a DAG preprocessing code"
This reverts r323374. The fix needs a different approach.
llvm-svn: 323438
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp | 35 | ||||
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.h | 3 |
2 files changed, 16 insertions, 22 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp b/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp index 09c55cb2618..eb8fab13626 100644 --- a/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp +++ b/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp @@ -1034,23 +1034,6 @@ void HexagonDAGToDAGISel::ppHoistZextI1(std::vector<SDNode*> &&Nodes) { } } -void HexagonDAGToDAGISel::ppEmitAligna() { - auto &HST = static_cast<const HexagonSubtarget&>(MF->getSubtarget()); - auto &HFI = *HST.getFrameLowering(); - if (!HFI.needsAligna(*MF)) - return; - - MachineFrameInfo &MFI = MF->getFrameInfo(); - MachineBasicBlock &EntryBB = MF->front(); - unsigned AR = FuncInfo->CreateReg(MVT::i32); - unsigned MaxA = MFI.getMaxAlignment(); - MachineBasicBlock::iterator End = EntryBB.end(); - DebugLoc DL = EntryBB.findDebugLoc(End); - BuildMI(EntryBB, End, DL, HII->get(Hexagon::PS_aligna), AR) - .addImm(MaxA); - MF->getInfo<HexagonMachineFunctionInfo>()->setStackAlignBaseVReg(AR); -} - void HexagonDAGToDAGISel::PreprocessISelDAG() { // Repack all nodes before calling each preprocessing function, // because each of them can modify the set of nodes. @@ -1106,11 +1089,21 @@ void HexagonDAGToDAGISel::PreprocessISelDAG() { CurDAG->dump(); }); } +} + +void HexagonDAGToDAGISel::EmitFunctionEntryCode() { + auto &HST = static_cast<const HexagonSubtarget&>(MF->getSubtarget()); + auto &HFI = *HST.getFrameLowering(); + if (!HFI.needsAligna(*MF)) + return; - // Finally, emit the PS_aligna instruction, if necessary. Do it late, - // because the max required stack layout may change up until right before - // instruction selection. - ppEmitAligna(); + MachineFrameInfo &MFI = MF->getFrameInfo(); + MachineBasicBlock *EntryBB = &MF->front(); + unsigned AR = FuncInfo->CreateReg(MVT::i32); + unsigned MaxA = MFI.getMaxAlignment(); + BuildMI(EntryBB, DebugLoc(), HII->get(Hexagon::PS_aligna), AR) + .addImm(MaxA); + MF->getInfo<HexagonMachineFunctionInfo>()->setStackAlignBaseVReg(AR); } // Match a frame index that can be used in an addressing mode. diff --git a/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.h b/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.h index c80d375aa7b..dd2c6f4fc95 100644 --- a/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.h +++ b/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.h @@ -51,6 +51,8 @@ public: return true; } void PreprocessISelDAG() override; + void EmitFunctionEntryCode() override; + void Select(SDNode *N) override; // Complex Pattern Selectors. @@ -137,7 +139,6 @@ private: void ppAddrReorderAddShl(std::vector<SDNode*> &&Nodes); void ppAddrRewriteAndSrl(std::vector<SDNode*> &&Nodes); void ppHoistZextI1(std::vector<SDNode*> &&Nodes); - void ppEmitAligna(); SmallDenseMap<SDNode *,int> RootWeights; SmallDenseMap<SDNode *,int> RootHeights; |