summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-01-25 16:36:53 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-01-25 16:36:53 +0000
commit16610b0a57ddf66cd29ee6a4cbd2d81eef75dd69 (patch)
treeb0397b1e592f8f00aecf19fdcc8744c1684b364e /llvm/lib
parent1d68112c4b9ec7502ed9776555fd499cb2483347 (diff)
downloadbcm5719-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.cpp35
-rw-r--r--llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.h3
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;
OpenPOWER on IntegriCloud