diff options
author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2016-07-26 20:30:30 +0000 |
---|---|---|
committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2016-07-26 20:30:30 +0000 |
commit | 43492b2a7afd5463270a631e5a5dc31f6de513ce (patch) | |
tree | 987fae74d626568d1be990d6dd8a58c023e3e5b5 /lib/Target/Hexagon/HexagonVLIWPacketizer.cpp | |
parent | 2deff156d06770ec4ea6e8213a96c56ebe66a9e1 (diff) |
[Hexagon] Post-increment loads/stores enhancements
- Generate vector post-increment stores more aggressively.
- Predicate post-increment and vector stores in early if-conversion.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@276800 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Hexagon/HexagonVLIWPacketizer.cpp')
-rw-r--r-- | lib/Target/Hexagon/HexagonVLIWPacketizer.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/Target/Hexagon/HexagonVLIWPacketizer.cpp b/lib/Target/Hexagon/HexagonVLIWPacketizer.cpp index ba98b27561c..ef879591b19 100644 --- a/lib/Target/Hexagon/HexagonVLIWPacketizer.cpp +++ b/lib/Target/Hexagon/HexagonVLIWPacketizer.cpp @@ -326,7 +326,13 @@ static bool doesModifyCalleeSavedReg(const MachineInstr *MI, // TODO: MI->isIndirectBranch() and IsRegisterJump(MI) // Returns true if an instruction can be promoted to .new predicate or // new-value store. -bool HexagonPacketizerList::isNewifiable(const MachineInstr* MI) { +bool HexagonPacketizerList::isNewifiable(const MachineInstr* MI, + const TargetRegisterClass *NewRC) { + // Vector stores can be predicated, and can be new-value stores, but + // they cannot be predicated on a .new predicate value. + if (NewRC == &Hexagon::PredRegsRegClass) + if (HII->isV60VectorInstruction(MI) && MI->mayStore()) + return false; return HII->isCondInst(MI) || MI->isReturn() || HII->mayBeNewStore(MI); } @@ -767,7 +773,7 @@ bool HexagonPacketizerList::canPromoteToDotNew(const MachineInstr *MI, if (HII->isDotNewInst(MI) && !HII->mayBeNewStore(MI)) return false; - if (!isNewifiable(MI)) + if (!isNewifiable(MI, RC)) return false; const MachineInstr *PI = PacketSU->getInstr(); |