diff options
author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-02-17 22:14:51 +0000 |
---|---|---|
committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-02-17 22:14:51 +0000 |
commit | 1aaf41af54fca47baa8caf3a4ec5b097d4c17976 (patch) | |
tree | cf9568c0b367b03e4a4c91d6f035f06783a0dbcd /llvm/lib/Target/Hexagon/HexagonCopyToCombine.cpp | |
parent | bca05df38b0122945b58c559c452c03b8e81c2ce (diff) | |
download | bcm5719-llvm-1aaf41af54fca47baa8caf3a4ec5b097d4c17976.tar.gz bcm5719-llvm-1aaf41af54fca47baa8caf3a4ec5b097d4c17976.zip |
[Hexagon] Start using regmasks on calls
Reapply r295371 with a fix for the Windows bot failures.
llvm-svn: 295504
Diffstat (limited to 'llvm/lib/Target/Hexagon/HexagonCopyToCombine.cpp')
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonCopyToCombine.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonCopyToCombine.cpp b/llvm/lib/Target/Hexagon/HexagonCopyToCombine.cpp index 36080997ec6..5f375f8dc74 100644 --- a/llvm/lib/Target/Hexagon/HexagonCopyToCombine.cpp +++ b/llvm/lib/Target/Hexagon/HexagonCopyToCombine.cpp @@ -440,17 +440,21 @@ HexagonCopyToCombine::findPotentialNewifiableTFRs(MachineBasicBlock &BB) { // Put instructions that last defined integer or double registers into the // map. - for (unsigned I = 0, E = MI.getNumOperands(); I != E; ++I) { - MachineOperand &Op = MI.getOperand(I); - if (!Op.isReg() || !Op.isDef() || !Op.getReg()) - continue; - unsigned Reg = Op.getReg(); - if (Hexagon::DoubleRegsRegClass.contains(Reg)) { - for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs) { - LastDef[*SubRegs] = &MI; - } - } else if (Hexagon::IntRegsRegClass.contains(Reg)) - LastDef[Reg] = &MI; + for (MachineOperand &Op : MI.operands()) { + if (Op.isReg()) { + if (!Op.isDef() || !Op.getReg()) + continue; + unsigned Reg = Op.getReg(); + if (Hexagon::DoubleRegsRegClass.contains(Reg)) { + for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs) + LastDef[*SubRegs] = &MI; + } else if (Hexagon::IntRegsRegClass.contains(Reg)) + LastDef[Reg] = &MI; + } else if (Op.isRegMask()) { + for (unsigned Reg : Hexagon::IntRegsRegClass) + if (Op.clobbersPhysReg(Reg)) + LastDef[Reg] = &MI; + } } } } |