Lines Matching full:c1

359   Constant *C0, *C1;  in foldShiftOfShiftedBinOp()  local
360 if (!match(I.getOperand(1), m_Constant(C1))) in foldShiftOfShiftedBinOp()
380 match(ConstantExpr::getAdd(C0, C1), in foldShiftOfShiftedBinOp()
396 // shift (binop (shift X, C0), Y), C1 -> binop (shift X, C0+C1), (shift Y, C1) in foldShiftOfShiftedBinOp()
397 Constant *ShiftSumC = ConstantExpr::getAdd(C0, C1); in foldShiftOfShiftedBinOp()
399 Value *NewShift2 = Builder.CreateBinOp(ShiftOpcode, Y, C1); in foldShiftOfShiftedBinOp()
439 // C shift (A add nuw C1) --> (C shift C1) shift A in commonShiftTransforms()
441 Constant *C, *C1; in commonShiftTransforms() local
443 match(Op1, m_NUWAddLike(m_Value(A), m_Constant(C1)))) { in commonShiftTransforms()
444 Value *NewC = Builder.CreateBinOp(I.getOpcode(), C, C1); in commonShiftTransforms()
518 /// that have constant shift amounts: OuterShift (InnerShift X, C1), C2.
530 // shl (shl X, C1), C2 --> shl X, C1 + C2 in canEvaluateShiftedShift()
531 // lshr (lshr X, C1), C2 --> lshr X, C1 + C2 in canEvaluateShiftedShift()
543 // lshr (shl X, C1), C2 --> and (shl X, C1 - C2), C3 in canEvaluateShiftedShift()
544 // shl (lshr X, C1), C2 --> and (lshr X, C1 - C2), C3 in canEvaluateShiftedShift()
623 /// Fold OuterShift (InnerShift X, C1), C2.
633 const APInt *C1; in foldShiftedShift() local
634 match(InnerShift->getOperand(1), m_APInt(C1)); in foldShiftedShift()
635 unsigned InnerShAmt = C1->getZExtValue(); in foldShiftedShift()
650 // shl (shl X, C1), C2 --> shl X, C1 + C2 in foldShiftedShift()
651 // lshr (lshr X, C1), C2 --> lshr X, C1 + C2 in foldShiftedShift()
681 // lshr (shl X, C1), C2 --> shl X, C1 - C2 in foldShiftedShift()
682 // shl (lshr X, C1), C2 --> lshr X, C1 - C2 in foldShiftedShift()
767 Instruction *InstCombinerImpl::FoldShiftByConstant(Value *Op0, Constant *C1, in FoldShiftByConstant() argument
769 // (C2 << X) << C1 --> (C2 << C1) << X in FoldShiftByConstant()
770 // (C2 >> X) >> C1 --> (C2 >> C1) >> X in FoldShiftByConstant()
776 I.getOpcode(), Builder.CreateBinOp(I.getOpcode(), C2, C1), X); in FoldShiftByConstant()
793 if (!IsLeftShift && match(C1, m_SpecificIntAllowPoison(TypeBits - 1)) && in FoldShiftByConstant()
806 if (!match(C1, m_APInt(Op1C))) in FoldShiftByConstant()
813 // cast of lshr(shl(x,c1),c2) as well as other more complex cases. in FoldShiftByConstant()
838 Builder.CreateBinOp(I.getOpcode(), Op0BO->getOperand(1), C1); in FoldShiftByConstant()
841 Builder.CreateBinOp(I.getOpcode(), Op0BO->getOperand(0), C1); in FoldShiftByConstant()
853 // shl (select C, (add X, C1), X), C2 in FoldShiftByConstant()
856 // select C, (add Y, C1 << C2), Y in FoldShiftByConstant()
867 Builder.CreateBinOp(I.getOpcode(), TBO->getOperand(1), C1); in FoldShiftByConstant()
869 Value *NewShift = Builder.CreateBinOp(I.getOpcode(), FalseVal, C1); in FoldShiftByConstant()
884 Builder.CreateBinOp(I.getOpcode(), FBO->getOperand(1), C1); in FoldShiftByConstant()
886 Value *NewShift = Builder.CreateBinOp(I.getOpcode(), TrueVal, C1); in FoldShiftByConstant()
1059 const APInt *C1; in visitShl() local
1060 if (match(Op0, m_Exact(m_Shr(m_Value(X), m_APInt(C1)))) && in visitShl()
1061 C1->ult(BitWidth)) { in visitShl()
1062 unsigned ShrAmt = C1->getZExtValue(); in visitShl()
1064 // If C1 < C: (X >>?,exact C1) << C --> X << (C - C1) in visitShl()
1076 // If C1 > C: (X >>?exact C1) << C --> X >>?exact (C1 - C) in visitShl()
1085 if (match(Op0, m_OneUse(m_Shr(m_Value(X), m_APInt(C1)))) && in visitShl()
1086 C1->ult(BitWidth)) { in visitShl()
1087 unsigned ShrAmt = C1->getZExtValue(); in visitShl()
1089 // If C1 < C: (X >>? C1) << C --> (X << (C - C1)) & (-1 << C) in visitShl()
1103 // If C1 > C: (X >>? C1) << C --> (X >>? (C1 - C)) & (-1 << C) in visitShl()
1118 match(Shr, m_Shr(m_Value(X), m_APInt(C1)))) { in visitShl()
1120 unsigned ShrAmtC = C1->getZExtValue(); in visitShl()
1125 // If C1 > C: in visitShl()
1126 // (trunc (X >> C1)) << C --> (trunc (X >> (C1 - C))) && (-1 << C) in visitShl()
1127 // If C > C1: in visitShl()
1128 // (trunc (X >> C1)) << C --> (trunc (X << (C - C1))) && (-1 << C) in visitShl()
1197 // (C1 - X) << C --> (C1 << C) - (X << C) in visitShl()
1198 if (match(Op0, m_OneUse(m_Sub(m_APInt(C1), m_Value(X))))) { in visitShl()
1199 Constant *NewLHS = ConstantInt::get(Ty, C1->shl(*C)); in visitShl()
1223 Constant *C1; in visitShl() local
1224 if (match(Op1, m_ImmConstant(C1))) { in visitShl()
1227 // (X * C2) << C1 --> X * (C2 << C1) in visitShl()
1229 return BinaryOperator::CreateMul(X, Builder.CreateShl(C2, C1)); in visitShl()
1231 // shl (zext i1 X), C1 --> select (X, 1 << C1, 0) in visitShl()
1233 auto *NewC = Builder.CreateShl(ConstantInt::get(Ty, 1), C1); in visitShl()
1359 const APInt *C1; in visitLShr() local
1360 if (match(Op0, m_Shl(m_Value(X), m_APInt(C1))) && C1->ult(BitWidth)) { in visitLShr()
1361 if (C1->ult(ShAmtC)) { in visitLShr()
1362 unsigned ShlAmtC = C1->getZExtValue(); in visitLShr()
1365 // (X <<nuw C1) >>u C --> X >>u (C - C1) in visitLShr()
1371 // (X << C1) >>u C --> (X >>u (C - C1)) & (-1 >> C) in visitLShr()
1376 } else if (C1->ugt(ShAmtC)) { in visitLShr()
1377 unsigned ShlAmtC = C1->getZExtValue(); in visitLShr()
1380 // (X <<nuw C1) >>u C --> X <<nuw/nsw (C1 - C) in visitLShr()
1387 // (X << C1) >>u C --> X << (C1 - C) & (-1 >> C) in visitLShr()
1393 assert(*C1 == ShAmtC); in visitLShr()
1470 match(TruncSrc, m_LShr(m_Value(X), m_APInt(C1)))) { in visitLShr()
1472 unsigned AmtSum = ShAmtC + C1->getZExtValue(); in visitLShr()
1475 // (trunc (X >>u C1)) >>u C --> and (trunc (X >>u (C1 + C)), MaskC in visitLShr()
1480 (TruncSrc->hasOneUse() || C1->uge(SrcWidth - BitWidth))) { in visitLShr()
1616 Constant *C1, *C2; in foldVariableSignZeroExtensionOfVariableHighBitExtract() local
1619 m_ZExtOrSelf(m_Sub(m_Constant(C1), in foldVariableSignZeroExtensionOfVariableHighBitExtract()
1623 !BitWidthSplat(C1, &OldAShr) || !BitWidthSplat(C2, &OldAShr)) in foldVariableSignZeroExtensionOfVariableHighBitExtract()
1693 // We can't handle (X << C1) >>s C2. It shifts arbitrary bits in. However, in visitAShr()
1694 // we can handle (X <<nsw C1) >>s C2 since it only shifts in sign bits. in visitAShr()
1700 // (X <<nsw C1) >>s C2 --> X >>s (C2 - C1) in visitAShr()
1707 // (X <<nsw C1) >>s C2 --> X <<nsw (C1 - C2) in visitAShr()
1720 // (X >>s C1) >>s C2 --> X >>s (C1 + C2) in visitAShr()