Lines Matching +full:tri +full:- +full:state
1 //===-- M68kCollapseMOVEMPass.cpp - Expand MOVEM pass -----------*- C++ -*-===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
15 //===----------------------------------------------------------------------===//
32 #define DEBUG_TYPE "m68k-collapse-movem"
114 } else if (Type == Descending && O == Start - 4) { in update()
115 Start -= 4; in update()
163 const M68kRegisterInfo *TRI; member in __anon3bad31010111::M68kCollapseMOVEM
169 void Finish(MachineBasicBlock &MBB, MOVEMState &State) { in Finish() argument
170 auto MI = State.begin(); in Finish()
171 auto End = State.end(); in Finish()
172 DebugLoc DL = MI->getDebugLoc(); in Finish()
176 State = MOVEMState(); in Finish()
188 if (State.isLoad()) { in Finish()
189 BuildMI(MBB, End, DL, TII->get(M68k::MOVM32mp)) in Finish()
190 .addImm(State.getMask()) in Finish()
191 .addImm(State.getFinalOffset()) in Finish()
192 .addReg(State.getBase()); in Finish()
194 BuildMI(MBB, End, DL, TII->get(M68k::MOVM32pm)) in Finish()
195 .addImm(State.getFinalOffset()) in Finish()
196 .addReg(State.getBase()) in Finish()
197 .addImm(State.getMask()); in Finish()
200 State = MOVEMState(); in Finish()
204 MOVEMState &State, unsigned Mask, int Offset, unsigned Reg, in ProcessMI() argument
206 if (State.hasBase()) { in ProcessMI()
208 // merge in the state in ProcessMI()
209 MOVEMState Temp = State; in ProcessMI()
210 if (State.isStore() == IsStore && State.getBase() == Reg && in ProcessMI()
211 State.update(Offset, Mask)) { in ProcessMI()
216 State = Temp; in ProcessMI()
217 State.setEnd(MI); in ProcessMI()
218 Finish(MBB, State); in ProcessMI()
219 return ProcessMI(MBB, MI, State, Mask, Offset, Reg, IsStore); in ProcessMI()
221 // If this is the first instruction is sequance then initialize the State in ProcessMI()
222 } else if (Reg == TRI->getStackRegister() || in ProcessMI()
223 Reg == TRI->getBaseRegister() || in ProcessMI()
224 Reg == TRI->getFrameRegister(*MBB.getParent())) { in ProcessMI()
225 State.setBegin(MI); in ProcessMI()
226 State.setBase(Reg); in ProcessMI()
227 State.update(Offset, Mask); in ProcessMI()
228 IsStore ? State.setStore() : State.setLoad(); in ProcessMI()
236 TII = STI->getInstrInfo(); in runOnMachineFunction()
237 TRI = STI->getRegisterInfo(); in runOnMachineFunction()
239 FL = STI->getFrameLowering(); in runOnMachineFunction()
243 MOVEMState State; in runOnMachineFunction() local
254 switch (MI->getOpcode()) { in runOnMachineFunction()
256 if (State.hasBase()) { in runOnMachineFunction()
257 State.setEnd(MI); in runOnMachineFunction()
258 Finish(MBB, State); in runOnMachineFunction()
263 Mask = MI->getOperand(1).getImm(); in runOnMachineFunction()
264 Reg = MI->getOperand(0).getReg(); in runOnMachineFunction()
266 Modified |= ProcessMI(MBB, MI, State, Mask, Offset, Reg, true); in runOnMachineFunction()
269 Mask = MI->getOperand(2).getImm(); in runOnMachineFunction()
270 Reg = MI->getOperand(1).getReg(); in runOnMachineFunction()
271 Offset = MI->getOperand(0).getImm(); in runOnMachineFunction()
272 Modified |= ProcessMI(MBB, MI, State, Mask, Offset, Reg, true); in runOnMachineFunction()
275 Mask = MI->getOperand(0).getImm(); in runOnMachineFunction()
276 Reg = MI->getOperand(1).getReg(); in runOnMachineFunction()
278 Modified |= ProcessMI(MBB, MI, State, Mask, Offset, Reg, false); in runOnMachineFunction()
281 Mask = MI->getOperand(0).getImm(); in runOnMachineFunction()
282 Reg = MI->getOperand(2).getReg(); in runOnMachineFunction()
283 Offset = MI->getOperand(1).getImm(); in runOnMachineFunction()
284 Modified |= ProcessMI(MBB, MI, State, Mask, Offset, Reg, false); in runOnMachineFunction()
290 if (State.hasBase()) { in runOnMachineFunction()
291 State.setEnd(MI); in runOnMachineFunction()
292 Finish(MBB, State); in runOnMachineFunction()