@@ -3874,9 +3874,8 @@ bool CombinerHelper::matchLoadOrCombine(
38743874
38753875bool CombinerHelper::matchExtendThroughPhis (MachineInstr &MI,
38763876 MachineInstr *&ExtMI) {
3877- assert (MI.getOpcode () == TargetOpcode::G_PHI);
3878-
3879- Register DstReg = MI.getOperand (0 ).getReg ();
3877+ auto &PHI = cast<GPhi>(MI);
3878+ Register DstReg = PHI.getReg (0 );
38803879
38813880 // TODO: Extending a vector may be expensive, don't do this until heuristics
38823881 // are better.
@@ -3905,16 +3904,16 @@ bool CombinerHelper::matchExtendThroughPhis(MachineInstr &MI,
39053904 // they'll be optimized in some way.
39063905 // Collect the unique incoming values.
39073906 SmallPtrSet<MachineInstr *, 4 > InSrcs;
3908- for (unsigned Idx = 1 ; Idx < MI. getNumOperands (); Idx += 2 ) {
3909- auto *DefMI = getDefIgnoringCopies (MI. getOperand (Idx). getReg ( ), MRI);
3907+ for (unsigned I = 0 ; I < PHI. getNumIncomingValues (); ++I ) {
3908+ auto *DefMI = getDefIgnoringCopies (PHI. getIncomingValue (I ), MRI);
39103909 switch (DefMI->getOpcode ()) {
39113910 case TargetOpcode::G_LOAD:
39123911 case TargetOpcode::G_TRUNC:
39133912 case TargetOpcode::G_SEXT:
39143913 case TargetOpcode::G_ZEXT:
39153914 case TargetOpcode::G_ANYEXT:
39163915 case TargetOpcode::G_CONSTANT:
3917- InSrcs.insert (getDefIgnoringCopies (MI. getOperand (Idx). getReg (), MRI) );
3916+ InSrcs.insert (DefMI );
39183917 // Don't try to propagate if there are too many places to create new
39193918 // extends, chances are it'll increase code size.
39203919 if (InSrcs.size () > 2 )
@@ -3929,7 +3928,7 @@ bool CombinerHelper::matchExtendThroughPhis(MachineInstr &MI,
39293928
39303929void CombinerHelper::applyExtendThroughPhis (MachineInstr &MI,
39313930 MachineInstr *&ExtMI) {
3932- assert (MI. getOpcode () == TargetOpcode::G_PHI );
3931+ auto &PHI = cast<GPhi>(MI );
39333932 Register DstReg = ExtMI->getOperand (0 ).getReg ();
39343933 LLT ExtTy = MRI.getType (DstReg);
39353934
@@ -3938,8 +3937,8 @@ void CombinerHelper::applyExtendThroughPhis(MachineInstr &MI,
39383937 // deterministic iteration order.
39393938 SmallSetVector<MachineInstr *, 8 > SrcMIs;
39403939 SmallDenseMap<MachineInstr *, MachineInstr *, 8 > OldToNewSrcMap;
3941- for (unsigned SrcIdx = 1 ; SrcIdx < MI. getNumOperands (); SrcIdx += 2 ) {
3942- auto SrcReg = MI. getOperand (SrcIdx). getReg ( );
3940+ for (unsigned I = 0 ; I < PHI. getNumIncomingValues (); ++I ) {
3941+ auto SrcReg = PHI. getIncomingValue (I );
39433942 auto *SrcMI = MRI.getVRegDef (SrcReg);
39443943 if (!SrcMIs.insert (SrcMI))
39453944 continue ;
@@ -3952,8 +3951,7 @@ void CombinerHelper::applyExtendThroughPhis(MachineInstr &MI,
39523951
39533952 Builder.setInsertPt (*SrcMI->getParent (), InsertPt);
39543953 Builder.setDebugLoc (MI.getDebugLoc ());
3955- auto NewExt = Builder.buildExtOrTrunc (ExtMI->getOpcode (), ExtTy,
3956- SrcReg);
3954+ auto NewExt = Builder.buildExtOrTrunc (ExtMI->getOpcode (), ExtTy, SrcReg);
39573955 OldToNewSrcMap[SrcMI] = NewExt;
39583956 }
39593957
0 commit comments