@@ -2045,26 +2045,23 @@ bool CombinerHelper::matchCombineUnmergeMergeToPlainValues(
2045
2045
MachineInstr &MI, SmallVectorImpl<Register> &Operands) {
2046
2046
assert (MI.getOpcode () == TargetOpcode::G_UNMERGE_VALUES &&
2047
2047
" Expected an unmerge" );
2048
- Register SrcReg =
2049
- peekThroughBitcast (MI. getOperand (MI. getNumOperands () - 1 ). getReg (), MRI);
2048
+ auto &Unmerge = cast<GUnmerge>(MI);
2049
+ Register SrcReg = peekThroughBitcast (Unmerge. getSourceReg (), MRI);
2050
2050
2051
- MachineInstr *SrcInstr = MRI.getVRegDef (SrcReg);
2052
- if (SrcInstr->getOpcode () != TargetOpcode::G_MERGE_VALUES &&
2053
- SrcInstr->getOpcode () != TargetOpcode::G_BUILD_VECTOR &&
2054
- SrcInstr->getOpcode () != TargetOpcode::G_CONCAT_VECTORS)
2051
+ auto *SrcInstr = getOpcodeDef<GMergeLikeOp>(SrcReg, MRI);
2052
+ if (!SrcInstr)
2055
2053
return false ;
2056
2054
2057
2055
// Check the source type of the merge.
2058
- LLT SrcMergeTy = MRI.getType (SrcInstr->getOperand ( 1 ). getReg ( ));
2059
- LLT Dst0Ty = MRI.getType (MI. getOperand ( 0 ). getReg ());
2056
+ LLT SrcMergeTy = MRI.getType (SrcInstr->getSourceReg ( 0 ));
2057
+ LLT Dst0Ty = MRI.getType (Unmerge. getReg (0 ));
2060
2058
bool SameSize = Dst0Ty.getSizeInBits () == SrcMergeTy.getSizeInBits ();
2061
2059
if (SrcMergeTy != Dst0Ty && !SameSize)
2062
2060
return false ;
2063
2061
// They are the same now (modulo a bitcast).
2064
2062
// We can collect all the src registers.
2065
- for (unsigned Idx = 1 , EndIdx = SrcInstr->getNumOperands (); Idx != EndIdx;
2066
- ++Idx)
2067
- Operands.push_back (SrcInstr->getOperand (Idx).getReg ());
2063
+ for (unsigned Idx = 0 ; Idx < SrcInstr->getNumSources (); ++Idx)
2064
+ Operands.push_back (SrcInstr->getSourceReg (Idx));
2068
2065
return true ;
2069
2066
}
2070
2067
0 commit comments