Lines Matching refs:Y

147   Value *X = Mul.getOperand(0), *Y = Mul.getOperand(1);  in foldMulShl1()  local
149 std::swap(X, Y); in foldMulShl1()
156 if (match(Y, m_Shl(m_One(), m_Value(Z)))) { in foldMulShl1()
157 bool PropagateNSW = HasNSW && cast<ShlOperator>(Y)->hasNoSignedWrap(); in foldMulShl1()
166 if (match(Y, m_OneUse(m_Add(m_BinOp(Shift), m_One()))) && in foldMulShl1()
179 if (match(Y, m_OneUse(m_Not(m_OneUse(m_Shl(m_AllOnes(), m_Value(Z))))))) { in foldMulShl1()
324 Value *X, *Y; in visitMul() local
325 SelectPatternFlavor SPF = matchSelectPattern(Op0, X, Y).Flavor; in visitMul()
334 Value *X, *Y; in visitMul() local
339 match(Op1, m_OneUse(m_Intrinsic<Intrinsic::abs>(m_Value(Y), m_One())))) in visitMul()
342 Builder.CreateNSWMul(X, Y), in visitMul()
347 Value *X, *Y; in visitMul() local
353 if (match(Op0, m_Neg(m_Value(X))) && match(Op1, m_Neg(m_Value(Y)))) { in visitMul()
354 auto *NewMul = BinaryOperator::CreateMul(X, Y); in visitMul()
363 if (match(&I, m_c_Mul(m_OneUse(m_Neg(m_Value(X))), m_Value(Y)))) in visitMul()
364 return BinaryOperator::CreateNeg(Builder.CreateMul(X, Y)); in visitMul()
376 Value *Y = Op1; in visitMul() local
380 Y = Op0; in visitMul()
383 Value *Neg = dyn_castNegVal(Y); in visitMul()
385 (Div->getOperand(1) == Y || Div->getOperand(1) == Neg) && in visitMul()
392 if (DivOp1 == Y) in visitMul()
402 if (DivOp1 == Y) in visitMul()
426 if (((match(Op0, m_ZExt(m_Value(X))) && match(Op1, m_ZExt(m_Value(Y)))) || in visitMul()
427 (match(Op0, m_SExt(m_Value(X))) && match(Op1, m_SExt(m_Value(Y))))) && in visitMul()
428 X->getType()->isIntOrIntVectorTy(1) && X->getType() == Y->getType() && in visitMul()
429 (Op0->hasOneUse() || Op1->hasOneUse() || X == Y)) { in visitMul()
430 Value *And = Builder.CreateAnd(X, Y, "mulbool"); in visitMul()
436 if (((match(Op0, m_SExt(m_Value(X))) && match(Op1, m_ZExt(m_Value(Y)))) || in visitMul()
437 (match(Op0, m_ZExt(m_Value(X))) && match(Op1, m_SExt(m_Value(Y))))) && in visitMul()
438 X->getType()->isIntOrIntVectorTy(1) && X->getType() == Y->getType() && in visitMul()
440 Value *And = Builder.CreateAnd(X, Y, "mulbool"); in visitMul()
473 if (match(&I, m_c_BinOp(m_LShr(m_Value(X), m_APInt(C)), m_Value(Y))) && in visitMul()
476 return SelectInst::Create(IsNeg, Y, ConstantInt::getNullValue(Ty)); in visitMul()
480 if (match(&I, m_c_BinOp(m_OneUse(m_And(m_Value(X), m_One())), m_Value(Y)))) { in visitMul()
482 return SelectInst::Create(Tr, Y, ConstantInt::getNullValue(Ty)); in visitMul()
547 Value *X, *Y; in foldFPSignBitOps() local
551 if (match(Op0, m_FNeg(m_Value(X))) && match(Op1, m_FNeg(m_Value(Y)))) in foldFPSignBitOps()
552 return BinaryOperator::CreateWithCopiedFlags(Opcode, X, Y, &I); in foldFPSignBitOps()
561 if (match(Op0, m_FAbs(m_Value(X))) && match(Op1, m_FAbs(m_Value(Y))) && in foldFPSignBitOps()
565 Value *XY = Builder.CreateBinOp(Opcode, X, Y); in foldFPSignBitOps()
577 Value *X, *Y; in foldFMulReassoc() local
629 m_c_FMul(m_OneUse(m_FDiv(m_Value(X), m_Value(Y))), m_Value(Z)))) { in foldFMulReassoc()
632 return BinaryOperator::CreateFDivFMF(NewFMul, Y, &I); in foldFMulReassoc()
639 match(Op1, m_OneUse(m_Sqrt(m_Value(Y))))) { in foldFMulReassoc()
640 Value *XY = Builder.CreateFMulFMF(X, Y, &I); in foldFMulReassoc()
652 match(Op0, (m_FDiv(m_SpecificFP(1.0), m_Value(Y)))) && in foldFMulReassoc()
653 match(Y, m_Sqrt(m_Value(X))) && Op1 == X) in foldFMulReassoc()
654 return BinaryOperator::CreateFDivFMF(X, Y, &I); in foldFMulReassoc()
656 match(Op1, (m_FDiv(m_SpecificFP(1.0), m_Value(Y)))) && in foldFMulReassoc()
657 match(Y, m_Sqrt(m_Value(X))) && Op0 == X) in foldFMulReassoc()
658 return BinaryOperator::CreateFDivFMF(X, Y, &I); in foldFMulReassoc()
665 if (match(Op0, m_FDiv(m_Value(X), m_Sqrt(m_Value(Y))))) { in foldFMulReassoc()
667 return BinaryOperator::CreateFDivFMF(XX, Y, &I); in foldFMulReassoc()
670 if (match(Op0, m_FDiv(m_Sqrt(m_Value(Y)), m_Value(X)))) { in foldFMulReassoc()
672 return BinaryOperator::CreateFDivFMF(Y, XX, &I); in foldFMulReassoc()
679 m_Value(Y))), in foldFMulReassoc()
681 Value *Y1 = Builder.CreateFAddFMF(Y, ConstantFP::get(I.getType(), 1.0), &I); in foldFMulReassoc()
688 if (match(Op0, m_Intrinsic<Intrinsic::pow>(m_Value(X), m_Value(Y))) && in foldFMulReassoc()
690 auto *YZ = Builder.CreateFAddFMF(Y, Z, &I); in foldFMulReassoc()
695 if (match(Op0, m_Intrinsic<Intrinsic::pow>(m_Value(X), m_Value(Y))) && in foldFMulReassoc()
696 match(Op1, m_Intrinsic<Intrinsic::pow>(m_Value(Z), m_Specific(Y)))) { in foldFMulReassoc()
698 auto *NewPow = Builder.CreateBinaryIntrinsic(Intrinsic::pow, XZ, Y, &I); in foldFMulReassoc()
703 if (match(Op0, m_Intrinsic<Intrinsic::powi>(m_Value(X), m_Value(Y))) && in foldFMulReassoc()
705 Y->getType() == Z->getType()) { in foldFMulReassoc()
706 auto *YZ = Builder.CreateAdd(Y, Z); in foldFMulReassoc()
714 match(Op1, m_Intrinsic<Intrinsic::exp>(m_Value(Y)))) { in foldFMulReassoc()
715 Value *XY = Builder.CreateFAddFMF(X, Y, &I); in foldFMulReassoc()
722 match(Op1, m_Intrinsic<Intrinsic::exp2>(m_Value(Y)))) { in foldFMulReassoc()
723 Value *XY = Builder.CreateFAddFMF(X, Y, &I); in foldFMulReassoc()
736 if (match(Op0, m_OneUse(m_c_FMul(m_Specific(Op1), m_Value(Y)))) && Op1 != Y) { in foldFMulReassoc()
738 return BinaryOperator::CreateFMulFMF(XX, Y, &I); in foldFMulReassoc()
740 if (match(Op1, m_OneUse(m_c_FMul(m_Specific(Op0), m_Value(Y)))) && Op0 != Y) { in foldFMulReassoc()
742 return BinaryOperator::CreateFMulFMF(XX, Y, &I); in foldFMulReassoc()
785 Value *X, *Y; in visitFMul() local
805 Y = Op1; in visitFMul()
810 Y = Op0; in visitFMul()
814 Value *LogXTimesY = Builder.CreateFMulFMF(Log2, Y, &I); in visitFMul()
815 return BinaryOperator::CreateFSubFMF(LogXTimesY, Y, &I); in visitFMul()
830 m_c_FMul(m_Intrinsic<Intrinsic::maximum>(m_Value(X), m_Value(Y)), in visitFMul()
832 m_Deferred(Y))))) { in visitFMul()
833 BinaryOperator *Result = BinaryOperator::CreateFMulFMF(X, Y, &I); in visitFMul()
953 Value *X, *Y, *Z; in foldIDivShl() local
958 match(Op0, m_c_Mul(m_Specific(X), m_Value(Y)))) { in foldIDivShl()
967 return Builder.CreateLShr(Y, Z, "", I.isExact()); in foldIDivShl()
972 return Builder.CreateSDiv(Y, Shl, "", I.isExact()); in foldIDivShl()
979 match(Op1, m_Shl(m_Value(Y), m_Specific(Z)))) { in foldIDivShl()
990 return Builder.CreateUDiv(X, Y, "", I.isExact()); in foldIDivShl()
996 return Builder.CreateSDiv(X, Y, "", I.isExact()); in foldIDivShl()
1001 if (match(Op0, m_Shl(m_Value(X), m_Value(Y))) && in foldIDivShl()
1012 One, Y, "shl.dividend", in foldIDivShl()
1169 Value *Y; in commonIDivTransforms() local
1170 if (IsSigned && match(Op0, m_NSWShl(m_Specific(Op1), m_Value(Y)))) in commonIDivTransforms()
1171 return BinaryOperator::CreateNSWShl(ConstantInt::get(Ty, 1), Y); in commonIDivTransforms()
1172 if (!IsSigned && match(Op0, m_NUWShl(m_Specific(Op1), m_Value(Y)))) in commonIDivTransforms()
1173 return BinaryOperator::CreateNUWShl(ConstantInt::get(Ty, 1), Y); in commonIDivTransforms()
1176 if (match(Op1, m_c_Mul(m_Specific(Op0), m_Value(Y)))) { in commonIDivTransforms()
1181 replaceOperand(I, 1, Y); in commonIDivTransforms()
1190 match(Op1, m_c_Mul(m_Specific(X), m_Value(Y)))) in commonIDivTransforms()
1193 Builder.CreateShl(ConstantInt::get(Ty, 1), Z, "", /*NUW*/ true), Y); in commonIDivTransforms()
1205 m_Value(Y)))) { in commonIDivTransforms()
1210 NewDiv = BinaryOperator::CreateUDiv(X, Y); in commonIDivTransforms()
1212 NewDiv = BinaryOperator::CreateSDiv(X, Y); in commonIDivTransforms()
1222 if (match(Op0, m_Mul(m_Value(X), m_Value(Y)))) { in commonIDivTransforms()
1245 if (auto *Val = CreateDivOrNull(Y, Z)) in commonIDivTransforms()
1248 if (match(Op1, m_c_Mul(m_Specific(Y), m_Value(Z)))) { in commonIDivTransforms()
1286 Value *X, *Y; in takeLog2() local
1293 if (match(Op, m_Shl(m_Value(X), m_Value(Y)))) { in takeLog2()
1298 return IfFold([&]() { return Builder.CreateAdd(LogX, Y); }); in takeLog2()
1342 Value *X, *Y; in narrowUDivURem() local
1343 if (match(N, m_ZExt(m_Value(X))) && match(D, m_ZExt(m_Value(Y))) && in narrowUDivURem()
1344 X->getType() == Y->getType() && (N->hasOneUse() || D->hasOneUse())) { in narrowUDivURem()
1347 Value *NarrowOp = IC.Builder.CreateBinOp(Opcode, X, Y); in narrowUDivURem()
1526 Value *Y; in visitSDiv() local
1527 if (match(&I, m_SDiv(m_OneUse(m_NSWSub(m_Zero(), m_Value(X))), m_Value(Y)))) in visitSDiv()
1529 Builder.CreateSDiv(X, Y, I.getName(), I.isExact())); in visitSDiv()
1745 Value *X, *Y; in visitFDiv() local
1746 if (match(Op0, m_OneUse(m_FDiv(m_Value(X), m_Value(Y)))) && in visitFDiv()
1747 (!isa<Constant>(Y) || !isa<Constant>(Op1))) { in visitFDiv()
1749 Value *YZ = Builder.CreateFMulFMF(Y, Op1, &I); in visitFDiv()
1752 if (match(Op1, m_OneUse(m_FDiv(m_Value(X), m_Value(Y)))) && in visitFDiv()
1753 (!isa<Constant>(Y) || !isa<Constant>(Op0))) { in visitFDiv()
1755 Value *YZ = Builder.CreateFMulFMF(Y, Op0, &I); in visitFDiv()
1764 if (match(Op1, m_FDiv(m_SpecificFP(1.0), m_Value(Y)))) in visitFDiv()
1765 return BinaryOperator::CreateFMulFMF(Y, Op0, &I); in visitFDiv()
1796 Value *X, *Y; in visitFDiv() local
1798 match(Op1, m_c_FMul(m_Specific(Op0), m_Value(Y)))) { in visitFDiv()
1800 replaceOperand(I, 1, Y); in visitFDiv()
1820 m_Value(Y))))) { in visitFDiv()
1822 Builder.CreateFAddFMF(Y, ConstantFP::get(I.getType(), -1.0), &I); in visitFDiv()
1833 m_Value(Y)))) && in visitFDiv()
1834 willNotOverflowSignedSub(Y, ConstantInt::get(Y->getType(), 1), I)) { in visitFDiv()
1835 Constant *NegOne = ConstantInt::getAllOnesValue(Y->getType()); in visitFDiv()
1836 Value *Y1 = Builder.CreateAdd(Y, NegOne); in visitFDiv()
1854 APInt Y, Z; in simplifyIRemMulShl() local
1887 if (MatchShiftOrMulXC(Op0, X, Y) && MatchShiftOrMulXC(Op1, X, Z)) { in simplifyIRemMulShl()
1889 } else if (MatchShiftCX(Op0, Y, X) && MatchShiftCX(Op1, Z, X)) { in simplifyIRemMulShl()
1904 APInt RemYZ = IsSRem ? Y.srem(Z) : Y.urem(Z); in simplifyIRemMulShl()
1929 if (RemYZ == Y && BO1NoWrap) { in simplifyIRemMulShl()
1930 BinaryOperator *BO = CreateMulOrShift(Y); in simplifyIRemMulShl()
1940 if (Y.uge(Z) && (IsSRem ? (BO0HasNSW && BO1HasNSW) : BO0HasNUW)) { in simplifyIRemMulShl()
2088 const APInt *Y; in visitSRem() local
2090 if (match(Op1, m_Negative(Y)) && !Y->isMinSignedValue()) in visitSRem()
2091 return replaceOperand(I, 1, ConstantInt::get(I.getType(), -*Y)); in visitSRem()
2095 Value *X, *Y; in visitSRem() local
2096 if (match(&I, m_SRem(m_OneUse(m_NSWSub(m_Zero(), m_Value(X))), m_Value(Y)))) in visitSRem()
2097 return BinaryOperator::CreateNSWNeg(Builder.CreateSRem(X, Y)); in visitSRem()