diff options
author | Matt Davis <Matthew.Davis@sony.com> | 2018-03-19 16:06:40 +0000 |
---|---|---|
committer | Matt Davis <Matthew.Davis@sony.com> | 2018-03-19 16:06:40 +0000 |
commit | 4b54e5fc386e5aa62725efe893d8ac9b9ee1dd01 (patch) | |
tree | ab404b6142c29a0976fee270af56a6d88632e1f8 /llvm/lib/CodeGen/LivePhysRegs.cpp | |
parent | 5cca20f825e66eea684d5fb8c8303ee2b32456b4 (diff) | |
download | bcm5719-llvm-4b54e5fc386e5aa62725efe893d8ac9b9ee1dd01.tar.gz bcm5719-llvm-4b54e5fc386e5aa62725efe893d8ac9b9ee1dd01.zip |
[CodeGen] Avoid handling DBG_VALUE in the LivePhysRegs (addUses,removeDefs,stepForward)
Summary:
This patch prevents DBG_VALUE instructions from influencing
LivePhysRegs::stepBackwards and stepForwards. In at least one case,
specifically branch folding, the stepBackwards logic was having an
influence on code generation. The result was that certain code
compiled with '-g -O2' would differ from that compiled with '-O2'
alone. It seems that the original logic, accounting for DBG_VALUE,
was influencing the placement of an IMPLICIT_DEF which had a later
impact on how blocks were processed in branch folding.
Reviewers: kparzysz, MatzeB
Reviewed By: kparzysz
Subscribers: bjope, llvm-commits
Tags: #debug-info
Differential Revision: https://reviews.llvm.org/D43850
llvm-svn: 327862
Diffstat (limited to 'llvm/lib/CodeGen/LivePhysRegs.cpp')
-rw-r--r-- | llvm/lib/CodeGen/LivePhysRegs.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/LivePhysRegs.cpp b/llvm/lib/CodeGen/LivePhysRegs.cpp index 277212cf7da..62ff69600c9 100644 --- a/llvm/lib/CodeGen/LivePhysRegs.cpp +++ b/llvm/lib/CodeGen/LivePhysRegs.cpp @@ -44,7 +44,7 @@ void LivePhysRegs::removeRegsInMask(const MachineOperand &MO, void LivePhysRegs::removeDefs(const MachineInstr &MI) { for (ConstMIBundleOperands O(MI); O.isValid(); ++O) { if (O->isReg()) { - if (!O->isDef()) + if (!O->isDef() || O->isDebug()) continue; unsigned Reg = O->getReg(); if (!TargetRegisterInfo::isPhysicalRegister(Reg)) @@ -58,7 +58,7 @@ void LivePhysRegs::removeDefs(const MachineInstr &MI) { /// Add uses to the set. void LivePhysRegs::addUses(const MachineInstr &MI) { for (ConstMIBundleOperands O(MI); O.isValid(); ++O) { - if (!O->isReg() || !O->readsReg()) + if (!O->isReg() || !O->readsReg() || O->isDebug()) continue; unsigned Reg = O->getReg(); if (!TargetRegisterInfo::isPhysicalRegister(Reg)) @@ -85,7 +85,7 @@ void LivePhysRegs::stepForward(const MachineInstr &MI, SmallVectorImpl<std::pair<unsigned, const MachineOperand*>> &Clobbers) { // Remove killed registers from the set. for (ConstMIBundleOperands O(MI); O.isValid(); ++O) { - if (O->isReg()) { + if (O->isReg() && !O->isDebug()) { unsigned Reg = O->getReg(); if (!TargetRegisterInfo::isPhysicalRegister(Reg)) continue; |