@@ -455,7 +455,7 @@ bool CombinerHelper::matchCombineShuffleConcat(
455455 return false ;
456456 }
457457 if (!isLegalOrBeforeLegalizer (
458- {TargetOpcode::G_IMPLICIT_DEF, {ConcatSrcTy}}) ||
458+ {TargetOpcode::G_IMPLICIT_DEF, {ConcatSrcTy}}) &&
459459 !isLegalOrBeforeLegalizer ({TargetOpcode::G_POISON, {ConcatSrcTy}}))
460460 return false ;
461461 Ops.push_back (0 );
@@ -2307,7 +2307,8 @@ bool CombinerHelper::matchCombineUnmergeUndef(
23072307 B.buildUndef (DstReg);
23082308 }
23092309 };
2310- return isa<GImplicitDef>(MRI.getVRegDef (SrcReg));
2310+ return isa<GImplicitDef>(MRI.getVRegDef (SrcReg)) ||
2311+ isa<GPoison>(MRI.getVRegDef (SrcReg));
23112312}
23122313
23132314bool CombinerHelper::matchCombineUnmergeWithDeadLanesToTrunc (
@@ -2733,6 +2734,7 @@ void CombinerHelper::applyCombineTruncOfShift(
27332734
27342735bool CombinerHelper::matchAnyExplicitUseIsUndef (MachineInstr &MI) const {
27352736 return any_of (MI.explicit_uses (), [this ](const MachineOperand &MO) {
2737+ // FIXME: Two opcodes should be checked with one call instead.
27362738 return MO.isReg () &&
27372739 (getOpcodeDef (TargetOpcode::G_IMPLICIT_DEF, MO.getReg (), MRI) ||
27382740 getOpcodeDef (TargetOpcode::G_POISON, MO.getReg (), MRI));
@@ -2770,8 +2772,7 @@ bool CombinerHelper::matchUndefStore(MachineInstr &MI) const {
27702772 assert (MI.getOpcode () == TargetOpcode::G_STORE);
27712773 return getOpcodeDef (TargetOpcode::G_IMPLICIT_DEF, MI.getOperand (0 ).getReg (),
27722774 MRI) ||
2773- getOpcodeDef (TargetOpcode::G_IMPLICIT_DEF, MI.getOperand (0 ).getReg (),
2774- MRI);
2775+ getOpcodeDef (TargetOpcode::G_POISON, MI.getOperand (0 ).getReg (), MRI);
27752776}
27762777
27772778bool CombinerHelper::matchPoisonStore (MachineInstr &MI) const {
@@ -2783,8 +2784,7 @@ bool CombinerHelper::matchUndefSelectCmp(MachineInstr &MI) const {
27832784 assert (MI.getOpcode () == TargetOpcode::G_SELECT);
27842785 return getOpcodeDef (TargetOpcode::G_IMPLICIT_DEF, MI.getOperand (1 ).getReg (),
27852786 MRI) ||
2786- getOpcodeDef (TargetOpcode::G_IMPLICIT_DEF, MI.getOperand (1 ).getReg (),
2787- MRI);
2787+ getOpcodeDef (TargetOpcode::G_POISON, MI.getOperand (1 ).getReg (), MRI);
27882788}
27892789
27902790bool CombinerHelper::matchInsertExtractVecEltOutOfBounds (
0 commit comments