@@ -1358,34 +1358,33 @@ Value *InstCombinerImpl::SimplifySelectsFeedingBinaryOp(BinaryOperator &I,
13581358 if (Opcode != Instruction::Or)
13591359 return nullptr ;
13601360
1361+ const APInt *C1;
1362+ if (!match (V1, m_APInt (C1)))
1363+ return nullptr ;
1364+
13611365 Value *X;
1362- const APInt *C ;
1363- if (!match (Masked, m_OneUse (m_And (m_Value (X), m_APInt (C )))))
1366+ const APInt *Mask ;
1367+ if (!match (Masked, m_OneUse (m_And (m_Value (X), m_APInt (Mask )))))
13641368 return nullptr ;
13651369
13661370 const APInt *V2;
13671371 Value *Trunc;
1368- if (!match (ZExtSel,
1369- m_ZExt (m_OneUse (m_Select (m_Specific (Cond), m_APInt (V2),
1370- m_Value (Trunc))))))
1372+ if (!match (ZExtSel, m_ZExt (m_OneUse (m_Select (m_Specific (Cond), m_APInt (V2),
1373+ m_Value (Trunc))))))
13711374 return nullptr ;
13721375
1373- if (*C != APInt::getBitsSetFrom (X->getType ()->getScalarSizeInBits (),
1374- Trunc->getType ()->getScalarSizeInBits ())) {
1376+ if (*Mask != APInt::getBitsSetFrom (X->getType ()->getScalarSizeInBits (),
1377+ Trunc->getType ()->getScalarSizeInBits ()))
13751378 return nullptr ;
1376- }
13771379
13781380 if (!match (Trunc, m_Trunc (m_Specific (X))))
13791381 return nullptr ;
13801382
13811383 unsigned V1Width = V1->getType ()->getScalarSizeInBits ();
1382- APInt ZextV2 = V2->zext (V1Width);
1383- Value *True = simplifyBinOp (
1384- Opcode, V1, ConstantInt::get (V1->getType (), ZextV2), FMF, Q);
1385- if (!True)
1386- return nullptr ;
13871384
1388- return Builder.CreateSelect (Cond, True, X, I.getName ());
1385+ return Builder.CreateSelect (
1386+ Cond, ConstantInt::get (V1->getType (), *C1 | V2->zext (V1Width)), X,
1387+ I.getName ());
13891388 };
13901389
13911390 if (LHSIsSelect && RHSIsSelect && A == D) {
0 commit comments