Lines Matching defs:Lo

35   bool detectFoldable(MachineInstr &Hi, MachineInstr *&Lo);
37 bool detectAndFoldOffset(MachineInstr &Hi, MachineInstr &Lo);
38 void foldOffset(MachineInstr &Hi, MachineInstr &Lo, MachineInstr &Tail,
40 bool foldLargeOffset(MachineInstr &Hi, MachineInstr &Lo,
42 bool foldShiftedOffset(MachineInstr &Hi, MachineInstr &Lo,
45 bool foldIntoMemoryOps(MachineInstr &Hi, MachineInstr &Lo);
86 MachineInstr *&Lo) {
103 // setting Lo and Hi both point to PseudoMovAddr
104 Lo = &Hi;
110 Lo = &*MRI->use_instr_begin(HiDestReg);
111 if (Lo->getOpcode() != RISCV::ADDI)
115 const MachineOperand &LoOp2 = Lo->getOperand(2);
142 // Update the offset in Hi and Lo instructions.
144 // output from Lo.
145 void RISCVMergeBaseOffsetOpt::foldOffset(MachineInstr &Hi, MachineInstr &Lo,
148 // Put the offset back in Hi and the Lo
151 Lo.getOperand(2).setOffset(Offset);
153 MRI->constrainRegClass(Lo.getOperand(0).getReg(),
155 MRI->replaceRegWith(Tail.getOperand(0).getReg(), Lo.getOperand(0).getReg());
158 << " " << Hi << " " << Lo;);
162 // If the pattern is found, updates the offset in Hi and Lo instructions
167 // Lo: addi vreg2, vreg1, %lo(s)
182 MachineInstr &Lo,
208 foldOffset(Hi, Lo, TailAdd, OffLo);
229 foldOffset(Hi, Lo, TailAdd, Offset);
238 foldOffset(Hi, Lo, TailAdd, Offset);
249 // If the pattern is found, updates the offset in Hi and Lo instructions
253 // Lo: addi vreg2, vreg1, %lo(s)
257 MachineInstr &Lo,
297 foldOffset(Hi, Lo, TailShXAdd, Offset);
303 MachineInstr &Lo) {
304 Register DestReg = Lo.getOperand(0).getReg();
312 // Lo has only one use.
330 foldOffset(Hi, Lo, TailTail, Offset);
337 foldOffset(Hi, Lo, Tail, Offset);
349 return foldLargeOffset(Hi, Lo, Tail, DestReg);
356 return foldShiftedOffset(Hi, Lo, Tail, DestReg);
363 MachineInstr &Lo) {
364 Register DestReg = Lo.getOperand(0).getReg();
370 // Lo: addi vreg2, vreg1, %lo(foo) ---> lw vreg3, lo(foo+8)(vreg1)
375 // Lo: addi vreg2, vreg1, %pcrel_lo(1b) ---> lw vreg3, %pcrel_lo(1b)(vreg1)
409 // Register defined by Lo should not be the value register.
487 MachineOperand &ImmOp = Lo.getOperand(2);
530 // Prevent Lo (originally PseudoMovAddr, which is also pointed by Hi) from
532 if (&Lo == &Hi)
535 MRI->replaceRegWith(Lo.getOperand(0).getReg(), Hi.getOperand(0).getReg());
536 Lo.eraseFromParent();
551 MachineInstr *Lo = nullptr;
552 if (!detectFoldable(Hi, Lo))
554 MadeChange |= detectAndFoldOffset(Hi, *Lo);
555 MadeChange |= foldIntoMemoryOps(Hi, *Lo);