Lines Matching defs:Fold

1 //===-- SIFoldOperands.cpp - Fold operands --- ----------------------------===//
103 bool updateOperand(FoldCandidate &Fold) const;
105 bool canUseImmWithOpSel(FoldCandidate &Fold) const;
107 bool tryFoldImmWithOpSel(FoldCandidate &Fold) const;
163 StringRef getPassName() const override { return "SI Fold Operands"; }
173 INITIALIZE_PASS(SIFoldOperandsLegacy, DEBUG_TYPE, "SI Fold Operands", false,
251 /// Fold %vgpr = COPY (S_ADD_I32 x, frameindex)
325 bool SIFoldOperandsImpl::canUseImmWithOpSel(FoldCandidate &Fold) const {
326 MachineInstr *MI = Fold.UseMI;
327 MachineOperand &Old = MI->getOperand(Fold.UseOpNo);
330 assert(Old.isReg() && Fold.isImm());
355 bool SIFoldOperandsImpl::tryFoldImmWithOpSel(FoldCandidate &Fold) const {
356 MachineInstr *MI = Fold.UseMI;
357 MachineOperand &Old = MI->getOperand(Fold.UseOpNo);
365 if (AMDGPU::isInlinableLiteralV216(Fold.ImmToFold, OpType)) {
366 Old.ChangeToImmediate(Fold.ImmToFold);
390 Fold.ImmToFold >> (ModVal & SISrcMods::OP_SEL_0 ? 16 : 0));
392 Fold.ImmToFold >> (ModVal & SISrcMods::OP_SEL_1 ? 16 : 0));
479 bool SIFoldOperandsImpl::updateOperand(FoldCandidate &Fold) const {
480 MachineInstr *MI = Fold.UseMI;
481 MachineOperand &Old = MI->getOperand(Fold.UseOpNo);
484 if (Fold.isImm() && canUseImmWithOpSel(Fold)) {
485 if (tryFoldImmWithOpSel(Fold))
490 MachineOperand New = MachineOperand::CreateImm(Fold.ImmToFold);
494 Old.ChangeToImmediate(Fold.ImmToFold);
498 if ((Fold.isImm() || Fold.isFI() || Fold.isGlobal()) && Fold.needsShrink()) {
506 int Op32 = Fold.ShrinkOpcode;
535 if (Fold.Commuted)
540 assert(!Fold.needsShrink() && "not handled");
542 if (Fold.isImm()) {
550 Old.ChangeToImmediate(Fold.ImmToFold);
554 if (Fold.isGlobal()) {
555 Old.ChangeToGA(Fold.OpToFold->getGlobal(), Fold.OpToFold->getOffset(),
556 Fold.OpToFold->getTargetFlags());
560 if (Fold.isFI()) {
561 Old.ChangeToFrameIndex(Fold.FrameIndexToFold);
565 MachineOperand *New = Fold.OpToFold;
581 for (FoldCandidate &Fold : FoldList)
582 if (Fold.UseMI == MI && Fold.UseOpNo == OpNo)
630 FoldCandidate Fold(MI, OpNo, OpToFold);
631 IsLegal = canUseImmWithOpSel(Fold);
886 // FIXME: Fold operands with subregs.
1523 for (FoldCandidate &Fold : FoldList) {
1524 assert(!Fold.isReg() || Fold.OpToFold);
1525 if (Fold.isReg() && Fold.OpToFold->getReg().isVirtual()) {
1526 Register Reg = Fold.OpToFold->getReg();
1527 MachineInstr *DefMI = Fold.OpToFold->getParent();
1529 execMayBeModifiedBeforeUse(*MRI, Reg, *DefMI, *Fold.UseMI))
1532 if (updateOperand(Fold)) {
1534 if (Fold.isReg()) {
1535 assert(Fold.OpToFold && Fold.OpToFold->isReg());
1539 MRI->clearKillFlags(Fold.OpToFold->getReg());
1542 << static_cast<int>(Fold.UseOpNo) << " of "
1543 << *Fold.UseMI);
1544 } else if (Fold.Commuted) {
1546 TII->commuteInstruction(*Fold.UseMI, false);