X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FCodeGen%2FRegisterPressure.cpp;h=43448c850a0b136a987972af490ce2e11feec602;hb=fd45fa1503de725801be3db33c7e860298fc82a3;hp=015d6735380b33c65102b22a8a7c73aeb1450adf;hpb=ba17293a8827a7e0e390b0a1d6075148a58d9edd;p=oota-llvm.git diff --git a/lib/CodeGen/RegisterPressure.cpp b/lib/CodeGen/RegisterPressure.cpp index 015d6735380..43448c850a0 100644 --- a/lib/CodeGen/RegisterPressure.cpp +++ b/lib/CodeGen/RegisterPressure.cpp @@ -680,19 +680,13 @@ void RegPressureTracker::bumpUpwardPressure(const MachineInstr *MI) { // Generate liveness for uses. for (unsigned i = 0, e = PhysRegOpers.Uses.size(); i < e; ++i) { unsigned Reg = PhysRegOpers.Uses[i]; - if (!hasRegAlias(Reg, LivePhysRegs, TRI) - && (findRegAlias(Reg, PhysRegOpers.Defs, TRI) - == PhysRegOpers.Defs.end())) { + if (!hasRegAlias(Reg, LivePhysRegs, TRI)) increasePhysRegPressure(Reg); - } } for (unsigned i = 0, e = VirtRegOpers.Uses.size(); i < e; ++i) { unsigned Reg = VirtRegOpers.Uses[i]; - if (!LiveVirtRegs.count(Reg) - && (std::find(VirtRegOpers.Defs.begin(), VirtRegOpers.Defs.end(), Reg) - != VirtRegOpers.Defs.end())) { + if (!LiveVirtRegs.count(Reg)) increaseVirtRegPressure(Reg); - } } } @@ -817,25 +811,31 @@ getMaxDownwardPressureDelta(const MachineInstr *MI, RegPressureDelta &Delta, /// Get the pressure of each PSet after traversing this instruction bottom-up. void RegPressureTracker:: getUpwardPressure(const MachineInstr *MI, - std::vector &PressureResult) { + std::vector &PressureResult, + std::vector &MaxPressureResult) { // Snapshot pressure. PressureResult = CurrSetPressure; + MaxPressureResult = P.MaxSetPressure; bumpUpwardPressure(MI); // Current pressure becomes the result. Restore current pressure. + P.MaxSetPressure.swap(MaxPressureResult); CurrSetPressure.swap(PressureResult); } /// Get the pressure of each PSet after traversing this instruction top-down. void RegPressureTracker:: getDownwardPressure(const MachineInstr *MI, - std::vector &PressureResult) { + std::vector &PressureResult, + std::vector &MaxPressureResult) { // Snapshot pressure. PressureResult = CurrSetPressure; + MaxPressureResult = P.MaxSetPressure; bumpDownwardPressure(MI); // Current pressure becomes the result. Restore current pressure. + P.MaxSetPressure.swap(MaxPressureResult); CurrSetPressure.swap(PressureResult); }