@@ -148,60 +148,6 @@ static unsigned getLEArOpcode(bool IsLP64) {
148148 return IsLP64 ? X86::LEA64r : X86::LEA32r;
149149}
150150
151- // / findDeadCallerSavedReg - Return a caller-saved register that isn't live
152- // / when it reaches the "return" instruction. We can then pop a stack object
153- // / to this register without worry about clobbering it.
154- static unsigned findDeadCallerSavedReg (MachineBasicBlock &MBB,
155- MachineBasicBlock::iterator &MBBI,
156- const X86RegisterInfo *TRI,
157- bool Is64Bit) {
158- const MachineFunction *MF = MBB.getParent ();
159- if (MF->callsEHReturn ())
160- return 0 ;
161-
162- const TargetRegisterClass &AvailableRegs = *TRI->getGPRsForTailCall (*MF);
163-
164- if (MBBI == MBB.end ())
165- return 0 ;
166-
167- switch (MBBI->getOpcode ()) {
168- default : return 0 ;
169- case TargetOpcode::PATCHABLE_RET:
170- case X86::RET:
171- case X86::RETL:
172- case X86::RETQ:
173- case X86::RETIL:
174- case X86::RETIQ:
175- case X86::TCRETURNdi:
176- case X86::TCRETURNri:
177- case X86::TCRETURNmi:
178- case X86::TCRETURNdi64:
179- case X86::TCRETURNri64:
180- case X86::TCRETURNmi64:
181- case X86::EH_RETURN:
182- case X86::EH_RETURN64: {
183- SmallSet<uint16_t , 8 > Uses;
184- for (unsigned i = 0 , e = MBBI->getNumOperands (); i != e; ++i) {
185- MachineOperand &MO = MBBI->getOperand (i);
186- if (!MO.isReg () || MO.isDef ())
187- continue ;
188- Register Reg = MO.getReg ();
189- if (!Reg)
190- continue ;
191- for (MCRegAliasIterator AI (Reg, TRI, true ); AI.isValid (); ++AI)
192- Uses.insert (*AI);
193- }
194-
195- for (auto CS : AvailableRegs)
196- if (!Uses.count (CS) && CS != X86::RIP && CS != X86::RSP &&
197- CS != X86::ESP)
198- return CS;
199- }
200- }
201-
202- return 0 ;
203- }
204-
205151static bool isEAXLiveIn (MachineBasicBlock &MBB) {
206152 for (MachineBasicBlock::RegisterMaskPair RegMask : MBB.liveins ()) {
207153 unsigned Reg = RegMask.PhysReg ;
@@ -288,7 +234,7 @@ void X86FrameLowering::emitSPUpdate(MachineBasicBlock &MBB,
288234 if (isSub && !isEAXLiveIn (MBB))
289235 Reg = Rax;
290236 else
291- Reg = findDeadCallerSavedReg (MBB, MBBI, TRI, Is64Bit );
237+ Reg = TRI-> findDeadCallerSavedReg (MBB, MBBI);
292238
293239 unsigned MovRIOpc = Is64Bit ? X86::MOV64ri : X86::MOV32ri;
294240 unsigned AddSubRROpc =
@@ -345,7 +291,7 @@ void X86FrameLowering::emitSPUpdate(MachineBasicBlock &MBB,
345291 // need to find a dead register when using pop.
346292 unsigned Reg = isSub
347293 ? (unsigned )(Is64Bit ? X86::RAX : X86::EAX)
348- : findDeadCallerSavedReg (MBB, MBBI, TRI, Is64Bit );
294+ : TRI-> findDeadCallerSavedReg (MBB, MBBI);
349295 if (Reg) {
350296 unsigned Opc = isSub
351297 ? (Is64Bit ? X86::PUSH64r : X86::PUSH32r)
0 commit comments