Lines Matching refs:Op0
300 BinaryOperator *Op0 = dyn_cast<BinaryOperator>(LHS); in simplifyAssociativeBinOp() local
304 if (Op0 && Op0->getOpcode() == Opcode) { in simplifyAssociativeBinOp()
305 Value *A = Op0->getOperand(0); in simplifyAssociativeBinOp()
306 Value *B = Op0->getOperand(1); in simplifyAssociativeBinOp()
348 if (Op0 && Op0->getOpcode() == Opcode) { in simplifyAssociativeBinOp()
349 Value *A = Op0->getOperand(0); in simplifyAssociativeBinOp()
350 Value *B = Op0->getOperand(1); in simplifyAssociativeBinOp()
603 Value *&Op0, Value *&Op1, in foldOrCommuteConstant() argument
605 if (auto *CLHS = dyn_cast<Constant>(Op0)) { in foldOrCommuteConstant()
623 std::swap(Op0, Op1); in foldOrCommuteConstant()
630 static Value *simplifyAddInst(Value *Op0, Value *Op1, bool IsNSW, bool IsNUW, in simplifyAddInst() argument
632 if (Constant *C = foldOrCommuteConstant(Instruction::Add, Op0, Op1, Q)) in simplifyAddInst()
645 return Op0; in simplifyAddInst()
648 if (isKnownNegation(Op0, Op1)) in simplifyAddInst()
649 return Constant::getNullValue(Op0->getType()); in simplifyAddInst()
655 if (match(Op1, m_Sub(m_Value(Y), m_Specific(Op0))) || in simplifyAddInst()
656 match(Op0, m_Sub(m_Value(Y), m_Specific(Op1)))) in simplifyAddInst()
660 Type *Ty = Op0->getType(); in simplifyAddInst()
661 if (match(Op0, m_Not(m_Specific(Op1))) || match(Op1, m_Not(m_Specific(Op0)))) in simplifyAddInst()
668 match(Op0, m_Xor(m_Value(Y), m_SignMask()))) in simplifyAddInst()
676 if (MaxRecurse && Op0->getType()->isIntOrIntVectorTy(1)) in simplifyAddInst()
677 if (Value *V = simplifyXorInst(Op0, Op1, Q, MaxRecurse - 1)) in simplifyAddInst()
682 simplifyAssociativeBinOp(Instruction::Add, Op0, Op1, Q, MaxRecurse)) in simplifyAddInst()
697 Value *llvm::simplifyAddInst(Value *Op0, Value *Op1, bool IsNSW, bool IsNUW, in simplifyAddInst() argument
699 return ::simplifyAddInst(Op0, Op1, IsNSW, IsNUW, Query, RecursionLimit); in simplifyAddInst()
746 static Value *simplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW, in simplifySubInst() argument
748 if (Constant *C = foldOrCommuteConstant(Instruction::Sub, Op0, Op1, Q)) in simplifySubInst()
753 if (isa<PoisonValue>(Op0) || isa<PoisonValue>(Op1)) in simplifySubInst()
754 return PoisonValue::get(Op0->getType()); in simplifySubInst()
758 if (Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifySubInst()
759 return UndefValue::get(Op0->getType()); in simplifySubInst()
763 return Op0; in simplifySubInst()
766 if (Op0 == Op1) in simplifySubInst()
767 return Constant::getNullValue(Op0->getType()); in simplifySubInst()
770 if (match(Op0, m_Zero())) { in simplifySubInst()
773 return Constant::getNullValue(Op0->getType()); in simplifySubInst()
780 return Constant::getNullValue(Op0->getType()); in simplifySubInst()
790 if (MaxRecurse && match(Op0, m_Add(m_Value(X), m_Value(Y)))) { // (X + Y) - Z in simplifySubInst()
811 X = Op0; in simplifySubInst()
833 Z = Op0; in simplifySubInst()
845 if (MaxRecurse && match(Op0, m_Trunc(m_Value(X))) && in simplifySubInst()
851 if (Value *W = simplifyCastInst(Instruction::Trunc, V, Op0->getType(), in simplifySubInst()
857 if (match(Op0, m_PtrToInt(m_Value(X))) && match(Op1, m_PtrToInt(m_Value(Y)))) in simplifySubInst()
859 return ConstantExpr::getIntegerCast(Result, Op0->getType(), true); in simplifySubInst()
862 if (MaxRecurse && Op0->getType()->isIntOrIntVectorTy(1)) in simplifySubInst()
863 if (Value *V = simplifyXorInst(Op0, Op1, Q, MaxRecurse - 1)) in simplifySubInst()
878 Value *llvm::simplifySubInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW, in simplifySubInst() argument
880 return ::simplifySubInst(Op0, Op1, isNSW, isNUW, Q, RecursionLimit); in simplifySubInst()
885 static Value *simplifyMulInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyMulInst() argument
887 if (Constant *C = foldOrCommuteConstant(Instruction::Mul, Op0, Op1, Q)) in simplifyMulInst()
897 return Constant::getNullValue(Op0->getType()); in simplifyMulInst()
901 return Op0; in simplifyMulInst()
906 (match(Op0, in simplifyMulInst()
908 match(Op1, m_Exact(m_IDiv(m_Value(X), m_Specific(Op0)))))) // Y * (X / Y) in simplifyMulInst()
912 if (MaxRecurse && Op0->getType()->isIntOrIntVectorTy(1)) in simplifyMulInst()
913 if (Value *V = simplifyAndInst(Op0, Op1, Q, MaxRecurse - 1)) in simplifyMulInst()
918 simplifyAssociativeBinOp(Instruction::Mul, Op0, Op1, Q, MaxRecurse)) in simplifyMulInst()
922 if (Value *V = expandCommutativeBinOp(Instruction::Mul, Op0, Op1, in simplifyMulInst()
928 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1)) in simplifyMulInst()
930 threadBinOpOverSelect(Instruction::Mul, Op0, Op1, Q, MaxRecurse)) in simplifyMulInst()
935 if (isa<PHINode>(Op0) || isa<PHINode>(Op1)) in simplifyMulInst()
937 threadBinOpOverPHI(Instruction::Mul, Op0, Op1, Q, MaxRecurse)) in simplifyMulInst()
943 Value *llvm::simplifyMulInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifyMulInst() argument
944 return ::simplifyMulInst(Op0, Op1, Q, RecursionLimit); in simplifyMulInst()
949 static Value *simplifyDivRem(Instruction::BinaryOps Opcode, Value *Op0, in simplifyDivRem() argument
954 Type *Ty = Op0->getType(); in simplifyDivRem()
982 if (isa<PoisonValue>(Op0)) in simplifyDivRem()
983 return Op0; in simplifyDivRem()
987 if (Q.isUndefValue(Op0)) in simplifyDivRem()
992 if (match(Op0, m_Zero())) in simplifyDivRem()
993 return Constant::getNullValue(Op0->getType()); in simplifyDivRem()
997 if (Op0 == Op1) in simplifyDivRem()
1008 return IsDiv ? Op0 : Constant::getNullValue(Ty); in simplifyDivRem()
1013 if (match(Op0, m_c_Mul(m_Value(X), m_Specific(Op1)))) { in simplifyDivRem()
1014 auto *Mul = cast<OverflowingBinaryOperator>(Op0); in simplifyDivRem()
1021 return IsDiv ? X : Constant::getNullValue(Op0->getType()); in simplifyDivRem()
1101 static Value *simplifyDiv(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1, in simplifyDiv() argument
1103 if (Constant *C = foldOrCommuteConstant(Opcode, Op0, Op1, Q)) in simplifyDiv()
1106 if (Value *V = simplifyDivRem(Opcode, Op0, Op1, Q)) in simplifyDiv()
1112 if ((IsSigned && match(Op0, m_SRem(m_Value(), m_Specific(Op1)))) || in simplifyDiv()
1113 (!IsSigned && match(Op0, m_URem(m_Value(), m_Specific(Op1))))) in simplifyDiv()
1114 return Constant::getNullValue(Op0->getType()); in simplifyDiv()
1118 if (!IsSigned && match(Op0, m_UDiv(m_Value(), m_ConstantInt(C1))) && in simplifyDiv()
1123 return Constant::getNullValue(Op0->getType()); in simplifyDiv()
1128 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1)) in simplifyDiv()
1129 if (Value *V = threadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyDiv()
1134 if (isa<PHINode>(Op0) || isa<PHINode>(Op1)) in simplifyDiv()
1135 if (Value *V = threadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyDiv()
1138 if (isDivZero(Op0, Op1, Q, MaxRecurse, IsSigned)) in simplifyDiv()
1139 return Constant::getNullValue(Op0->getType()); in simplifyDiv()
1145 static Value *simplifyRem(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1, in simplifyRem() argument
1147 if (Constant *C = foldOrCommuteConstant(Opcode, Op0, Op1, Q)) in simplifyRem()
1150 if (Value *V = simplifyDivRem(Opcode, Op0, Op1, Q)) in simplifyRem()
1155 match(Op0, m_SRem(m_Value(), m_Specific(Op1)))) || in simplifyRem()
1157 match(Op0, m_URem(m_Value(), m_Specific(Op1))))) in simplifyRem()
1158 return Op0; in simplifyRem()
1163 match(Op0, m_NSWShl(m_Specific(Op1), m_Value()))) || in simplifyRem()
1165 match(Op0, m_NUWShl(m_Specific(Op1), m_Value()))))) in simplifyRem()
1166 return Constant::getNullValue(Op0->getType()); in simplifyRem()
1170 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1)) in simplifyRem()
1171 if (Value *V = threadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyRem()
1176 if (isa<PHINode>(Op0) || isa<PHINode>(Op1)) in simplifyRem()
1177 if (Value *V = threadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyRem()
1181 if (isDivZero(Op0, Op1, Q, MaxRecurse, Opcode == Instruction::SRem)) in simplifyRem()
1182 return Op0; in simplifyRem()
1189 static Value *simplifySDivInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifySDivInst() argument
1192 if (isKnownNegation(Op0, Op1, /*NeedNSW=*/true)) in simplifySDivInst()
1193 return Constant::getAllOnesValue(Op0->getType()); in simplifySDivInst()
1195 return simplifyDiv(Instruction::SDiv, Op0, Op1, Q, MaxRecurse); in simplifySDivInst()
1198 Value *llvm::simplifySDivInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifySDivInst() argument
1199 return ::simplifySDivInst(Op0, Op1, Q, RecursionLimit); in simplifySDivInst()
1204 static Value *simplifyUDivInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyUDivInst() argument
1206 return simplifyDiv(Instruction::UDiv, Op0, Op1, Q, MaxRecurse); in simplifyUDivInst()
1209 Value *llvm::simplifyUDivInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifyUDivInst() argument
1210 return ::simplifyUDivInst(Op0, Op1, Q, RecursionLimit); in simplifyUDivInst()
1215 static Value *simplifySRemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifySRemInst() argument
1221 return ConstantInt::getNullValue(Op0->getType()); in simplifySRemInst()
1224 if (isKnownNegation(Op0, Op1)) in simplifySRemInst()
1225 return ConstantInt::getNullValue(Op0->getType()); in simplifySRemInst()
1227 return simplifyRem(Instruction::SRem, Op0, Op1, Q, MaxRecurse); in simplifySRemInst()
1230 Value *llvm::simplifySRemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifySRemInst() argument
1231 return ::simplifySRemInst(Op0, Op1, Q, RecursionLimit); in simplifySRemInst()
1236 static Value *simplifyURemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyURemInst() argument
1238 return simplifyRem(Instruction::URem, Op0, Op1, Q, MaxRecurse); in simplifyURemInst()
1241 Value *llvm::simplifyURemInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifyURemInst() argument
1242 return ::simplifyURemInst(Op0, Op1, Q, RecursionLimit); in simplifyURemInst()
1275 static Value *simplifyShift(Instruction::BinaryOps Opcode, Value *Op0, in simplifyShift() argument
1278 if (Constant *C = foldOrCommuteConstant(Opcode, Op0, Op1, Q)) in simplifyShift()
1282 if (isa<PoisonValue>(Op0)) in simplifyShift()
1283 return Op0; in simplifyShift()
1286 if (match(Op0, m_Zero())) in simplifyShift()
1287 return Constant::getNullValue(Op0->getType()); in simplifyShift()
1295 return Op0; in simplifyShift()
1299 return PoisonValue::get(Op0->getType()); in simplifyShift()
1303 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1)) in simplifyShift()
1304 if (Value *V = threadBinOpOverSelect(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyShift()
1309 if (isa<PHINode>(Op0) || isa<PHINode>(Op1)) in simplifyShift()
1310 if (Value *V = threadBinOpOverPHI(Opcode, Op0, Op1, Q, MaxRecurse)) in simplifyShift()
1317 return PoisonValue::get(Op0->getType()); in simplifyShift()
1323 return Op0; in simplifyShift()
1328 KnownBits KnownVal = computeKnownBits(Op0, Q.DL, 0, Q.AC, Q.CxtI, Q.DT); in simplifyShift()
1337 return PoisonValue::get(Op0->getType()); in simplifyShift()
1345 static Value *simplifyRightShift(Instruction::BinaryOps Opcode, Value *Op0, in simplifyRightShift() argument
1349 simplifyShift(Opcode, Op0, Op1, /*IsNSW*/ false, Q, MaxRecurse)) in simplifyRightShift()
1353 if (Op0 == Op1) in simplifyRightShift()
1354 return Constant::getNullValue(Op0->getType()); in simplifyRightShift()
1358 if (Q.isUndefValue(Op0)) in simplifyRightShift()
1359 return isExact ? Op0 : Constant::getNullValue(Op0->getType()); in simplifyRightShift()
1364 computeKnownBits(Op0, Q.DL, /*Depth=*/0, Q.AC, Q.CxtI, Q.DT); in simplifyRightShift()
1366 return Op0; in simplifyRightShift()
1374 static Value *simplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW, in simplifyShlInst() argument
1377 simplifyShift(Instruction::Shl, Op0, Op1, isNSW, Q, MaxRecurse)) in simplifyShlInst()
1382 if (Q.isUndefValue(Op0)) in simplifyShlInst()
1383 return isNSW || isNUW ? Op0 : Constant::getNullValue(Op0->getType()); in simplifyShlInst()
1388 match(Op0, m_Exact(m_Shr(m_Value(X), m_Specific(Op1))))) in simplifyShlInst()
1392 if (isNUW && match(Op0, m_Negative())) in simplifyShlInst()
1393 return Op0; in simplifyShlInst()
1400 Value *llvm::simplifyShlInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW, in simplifyShlInst() argument
1402 return ::simplifyShlInst(Op0, Op1, isNSW, isNUW, Q, RecursionLimit); in simplifyShlInst()
1407 static Value *simplifyLShrInst(Value *Op0, Value *Op1, bool isExact, in simplifyLShrInst() argument
1409 if (Value *V = simplifyRightShift(Instruction::LShr, Op0, Op1, isExact, Q, in simplifyLShrInst()
1415 if (match(Op0, m_NUWShl(m_Value(X), m_Specific(Op1)))) in simplifyLShrInst()
1426 match(Op0, m_c_Or(m_NUWShl(m_Value(X), m_APInt(ShLAmt)), m_Value(Y))) && in simplifyLShrInst()
1437 Value *llvm::simplifyLShrInst(Value *Op0, Value *Op1, bool isExact, in simplifyLShrInst() argument
1439 return ::simplifyLShrInst(Op0, Op1, isExact, Q, RecursionLimit); in simplifyLShrInst()
1444 static Value *simplifyAShrInst(Value *Op0, Value *Op1, bool isExact, in simplifyAShrInst() argument
1446 if (Value *V = simplifyRightShift(Instruction::AShr, Op0, Op1, isExact, Q, in simplifyAShrInst()
1453 if (match(Op0, m_AllOnes()) || in simplifyAShrInst()
1454 match(Op0, m_Shl(m_AllOnes(), m_Specific(Op1)))) in simplifyAShrInst()
1455 return Constant::getAllOnesValue(Op0->getType()); in simplifyAShrInst()
1459 if (Q.IIQ.UseInstrInfo && match(Op0, m_NSWShl(m_Value(X), m_Specific(Op1)))) in simplifyAShrInst()
1463 unsigned NumSignBits = ComputeNumSignBits(Op0, Q.DL, 0, Q.AC, Q.CxtI, Q.DT); in simplifyAShrInst()
1464 if (NumSignBits == Op0->getType()->getScalarSizeInBits()) in simplifyAShrInst()
1465 return Op0; in simplifyAShrInst()
1470 Value *llvm::simplifyAShrInst(Value *Op0, Value *Op1, bool isExact, in simplifyAShrInst() argument
1472 return ::simplifyAShrInst(Op0, Op1, isExact, Q, RecursionLimit); in simplifyAShrInst()
1587 static Value *simplifyAndOfICmpsWithSameOperands(ICmpInst *Op0, ICmpInst *Op1) { in simplifyAndOfICmpsWithSameOperands() argument
1590 if (!match(Op0, m_ICmp(Pred0, m_Value(A), m_Value(B))) || in simplifyAndOfICmpsWithSameOperands()
1599 return getFalse(Op0->getType()); in simplifyAndOfICmpsWithSameOperands()
1606 static Value *simplifyOrOfICmpsWithSameOperands(ICmpInst *Op0, ICmpInst *Op1) { in simplifyOrOfICmpsWithSameOperands() argument
1609 if (!match(Op0, m_ICmp(Pred0, m_Value(A), m_Value(B))) || in simplifyOrOfICmpsWithSameOperands()
1619 return getTrue(Op0->getType()); in simplifyOrOfICmpsWithSameOperands()
1701 static Value *simplifyAndOfICmpsWithAdd(ICmpInst *Op0, ICmpInst *Op1, in simplifyAndOfICmpsWithAdd() argument
1707 if (!match(Op0, m_ICmp(Pred0, m_Add(m_Value(V), m_APInt(C0)), m_APInt(C1)))) in simplifyAndOfICmpsWithAdd()
1713 auto *AddInst = cast<OverflowingBinaryOperator>(Op0->getOperand(0)); in simplifyAndOfICmpsWithAdd()
1717 Type *ITy = Op0->getType(); in simplifyAndOfICmpsWithAdd()
1829 static Value *simplifyAndOfICmps(ICmpInst *Op0, ICmpInst *Op1, in simplifyAndOfICmps() argument
1831 if (Value *X = simplifyUnsignedRangeCheck(Op0, Op1, /*IsAnd=*/true, Q)) in simplifyAndOfICmps()
1833 if (Value *X = simplifyUnsignedRangeCheck(Op1, Op0, /*IsAnd=*/true, Q)) in simplifyAndOfICmps()
1836 if (Value *X = simplifyAndOfICmpsWithSameOperands(Op0, Op1)) in simplifyAndOfICmps()
1838 if (Value *X = simplifyAndOfICmpsWithSameOperands(Op1, Op0)) in simplifyAndOfICmps()
1841 if (Value *X = simplifyAndOrOfICmpsWithConstants(Op0, Op1, true)) in simplifyAndOfICmps()
1844 if (Value *X = simplifyAndOrOfICmpsWithLimitConst(Op0, Op1, true)) in simplifyAndOfICmps()
1847 if (Value *X = simplifyAndOrOfICmpsWithZero(Op0, Op1, true)) in simplifyAndOfICmps()
1850 if (Value *X = simplifyAndOrOfICmpsWithCtpop(Op0, Op1, true)) in simplifyAndOfICmps()
1852 if (Value *X = simplifyAndOrOfICmpsWithCtpop(Op1, Op0, true)) in simplifyAndOfICmps()
1855 if (Value *X = simplifyAndOfICmpsWithAdd(Op0, Op1, Q.IIQ)) in simplifyAndOfICmps()
1857 if (Value *X = simplifyAndOfICmpsWithAdd(Op1, Op0, Q.IIQ)) in simplifyAndOfICmps()
1863 static Value *simplifyOrOfICmpsWithAdd(ICmpInst *Op0, ICmpInst *Op1, in simplifyOrOfICmpsWithAdd() argument
1869 if (!match(Op0, m_ICmp(Pred0, m_Add(m_Value(V), m_APInt(C0)), m_APInt(C1)))) in simplifyOrOfICmpsWithAdd()
1875 auto *AddInst = cast<BinaryOperator>(Op0->getOperand(0)); in simplifyOrOfICmpsWithAdd()
1879 Type *ITy = Op0->getType(); in simplifyOrOfICmpsWithAdd()
1910 static Value *simplifyOrOfICmps(ICmpInst *Op0, ICmpInst *Op1, in simplifyOrOfICmps() argument
1912 if (Value *X = simplifyUnsignedRangeCheck(Op0, Op1, /*IsAnd=*/false, Q)) in simplifyOrOfICmps()
1914 if (Value *X = simplifyUnsignedRangeCheck(Op1, Op0, /*IsAnd=*/false, Q)) in simplifyOrOfICmps()
1917 if (Value *X = simplifyOrOfICmpsWithSameOperands(Op0, Op1)) in simplifyOrOfICmps()
1919 if (Value *X = simplifyOrOfICmpsWithSameOperands(Op1, Op0)) in simplifyOrOfICmps()
1922 if (Value *X = simplifyAndOrOfICmpsWithConstants(Op0, Op1, false)) in simplifyOrOfICmps()
1925 if (Value *X = simplifyAndOrOfICmpsWithLimitConst(Op0, Op1, false)) in simplifyOrOfICmps()
1928 if (Value *X = simplifyAndOrOfICmpsWithZero(Op0, Op1, false)) in simplifyOrOfICmps()
1931 if (Value *X = simplifyAndOrOfICmpsWithCtpop(Op0, Op1, false)) in simplifyOrOfICmps()
1933 if (Value *X = simplifyAndOrOfICmpsWithCtpop(Op1, Op0, false)) in simplifyOrOfICmps()
1936 if (Value *X = simplifyOrOfICmpsWithAdd(Op0, Op1, Q.IIQ)) in simplifyOrOfICmps()
1938 if (Value *X = simplifyOrOfICmpsWithAdd(Op1, Op0, Q.IIQ)) in simplifyOrOfICmps()
1982 static Value *simplifyAndOrOfCmps(const SimplifyQuery &Q, Value *Op0, in simplifyAndOrOfCmps() argument
1985 auto *Cast0 = dyn_cast<CastInst>(Op0); in simplifyAndOrOfCmps()
1989 Op0 = Cast0->getOperand(0); in simplifyAndOrOfCmps()
1994 auto *ICmp0 = dyn_cast<ICmpInst>(Op0); in simplifyAndOrOfCmps()
2000 auto *FCmp0 = dyn_cast<FCmpInst>(Op0); in simplifyAndOrOfCmps()
2020 static Value *simplifyLogicOfAddSub(Value *Op0, Value *Op1, in simplifyLogicOfAddSub() argument
2022 assert(Op0->getType() == Op1->getType() && "Mismatched binop types"); in simplifyLogicOfAddSub()
2026 if ((match(Op0, m_Add(m_Value(X), m_Constant(C1))) && in simplifyLogicOfAddSub()
2029 match(Op0, m_Sub(m_Constant(C2), m_Specific(X))))) { in simplifyLogicOfAddSub()
2034 Type *Ty = Op0->getType(); in simplifyLogicOfAddSub()
2044 static Value *simplifyAndInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyAndInst() argument
2046 if (Constant *C = foldOrCommuteConstant(Instruction::And, Op0, Op1, Q)) in simplifyAndInst()
2055 return Constant::getNullValue(Op0->getType()); in simplifyAndInst()
2058 if (Op0 == Op1) in simplifyAndInst()
2059 return Op0; in simplifyAndInst()
2063 return Constant::getNullValue(Op0->getType()); in simplifyAndInst()
2067 return Op0; in simplifyAndInst()
2070 if (match(Op0, m_Not(m_Specific(Op1))) || match(Op1, m_Not(m_Specific(Op0)))) in simplifyAndInst()
2071 return Constant::getNullValue(Op0->getType()); in simplifyAndInst()
2074 if (match(Op0, m_c_Or(m_Specific(Op1), m_Value()))) in simplifyAndInst()
2078 if (match(Op1, m_c_Or(m_Specific(Op0), m_Value()))) in simplifyAndInst()
2079 return Op0; in simplifyAndInst()
2083 if (match(Op0, m_c_Or(m_Value(X), m_Not(m_Value(Y)))) && in simplifyAndInst()
2087 match(Op0, m_c_Or(m_Deferred(X), m_Deferred(Y)))) in simplifyAndInst()
2090 if (Value *V = simplifyLogicOfAddSub(Op0, Op1, Instruction::And)) in simplifyAndInst()
2099 if (match(Op0, m_Shl(m_Value(X), m_APInt(ShAmt))) && in simplifyAndInst()
2101 return Op0; in simplifyAndInst()
2105 if (match(Op0, m_LShr(m_Value(X), m_APInt(ShAmt))) && in simplifyAndInst()
2107 return Op0; in simplifyAndInst()
2113 if (isCheckForZeroAndMulWithOverflow(Op0, Op1, true)) in simplifyAndInst()
2115 if (isCheckForZeroAndMulWithOverflow(Op1, Op0, true)) in simplifyAndInst()
2116 return Op0; in simplifyAndInst()
2119 if (match(Op0, m_Neg(m_Specific(Op1))) || in simplifyAndInst()
2120 match(Op1, m_Neg(m_Specific(Op0)))) { in simplifyAndInst()
2121 if (isKnownToBeAPowerOfTwo(Op0, Q.DL, /*OrZero*/ true, 0, Q.AC, Q.CxtI, in simplifyAndInst()
2123 return Op0; in simplifyAndInst()
2132 if (match(Op0, m_Add(m_Specific(Op1), m_AllOnes())) && in simplifyAndInst()
2135 if (match(Op1, m_Add(m_Specific(Op0), m_AllOnes())) && in simplifyAndInst()
2136 isKnownToBeAPowerOfTwo(Op0, Q.DL, /*OrZero*/ true, 0, Q.AC, Q.CxtI, Q.DT)) in simplifyAndInst()
2137 return Constant::getNullValue(Op0->getType()); in simplifyAndInst()
2139 if (Value *V = simplifyAndOrOfCmps(Q, Op0, Op1, true)) in simplifyAndInst()
2144 simplifyAssociativeBinOp(Instruction::And, Op0, Op1, Q, MaxRecurse)) in simplifyAndInst()
2148 if (Value *V = expandCommutativeBinOp(Instruction::And, Op0, Op1, in simplifyAndInst()
2153 if (Value *V = expandCommutativeBinOp(Instruction::And, Op0, Op1, in simplifyAndInst()
2157 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1)) { in simplifyAndInst()
2158 if (Op0->getType()->isIntOrIntVectorTy(1)) { in simplifyAndInst()
2160 if (match(Op1, m_Select(m_Specific(Op0), m_Value(), m_Zero()))) in simplifyAndInst()
2162 else if (match(Op0, m_Select(m_Specific(Op1), m_Value(), m_Zero()))) in simplifyAndInst()
2163 return Op0; in simplifyAndInst()
2169 threadBinOpOverSelect(Instruction::And, Op0, Op1, Q, MaxRecurse)) in simplifyAndInst()
2175 if (isa<PHINode>(Op0) || isa<PHINode>(Op1)) in simplifyAndInst()
2177 threadBinOpOverPHI(Instruction::And, Op0, Op1, Q, MaxRecurse)) in simplifyAndInst()
2192 match(Op0, m_c_Or(m_CombineAnd(m_NUWShl(m_Value(X), m_APInt(ShAmt)), in simplifyAndInst()
2195 const unsigned Width = Op0->getType()->getScalarSizeInBits(); in simplifyAndInst()
2216 if (match(Op0, m_c_Xor(m_Value(X), in simplifyAndInst()
2220 return Constant::getNullValue(Op0->getType()); in simplifyAndInst()
2222 if (Op0->getType()->isIntOrIntVectorTy(1)) { in simplifyAndInst()
2224 if (isImpliedCondition(Op0, Op1, Q.DL).value_or(false)) in simplifyAndInst()
2225 return Op0; in simplifyAndInst()
2227 if (isImpliedCondition(Op1, Op0, Q.DL).value_or(false)) in simplifyAndInst()
2234 Value *llvm::simplifyAndInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifyAndInst() argument
2235 return ::simplifyAndInst(Op0, Op1, Q, RecursionLimit); in simplifyAndInst()
2323 static Value *simplifyOrInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyOrInst() argument
2325 if (Constant *C = foldOrCommuteConstant(Instruction::Or, Op0, Op1, Q)) in simplifyOrInst()
2336 return Constant::getAllOnesValue(Op0->getType()); in simplifyOrInst()
2340 if (Op0 == Op1 || match(Op1, m_Zero())) in simplifyOrInst()
2341 return Op0; in simplifyOrInst()
2343 if (Value *R = simplifyOrLogic(Op0, Op1)) in simplifyOrInst()
2345 if (Value *R = simplifyOrLogic(Op1, Op0)) in simplifyOrInst()
2348 if (Value *V = simplifyLogicOfAddSub(Op0, Op1, Instruction::Or)) in simplifyOrInst()
2356 if ((match(Op0, m_Shl(m_AllOnes(), m_Value(X))) && in simplifyOrInst()
2359 match(Op0, m_LShr(m_AllOnes(), m_Value(Y))))) { in simplifyOrInst()
2373 if (match(Op0, in simplifyOrInst()
2376 return Op0; in simplifyOrInst()
2379 match(Op0, m_Shl(m_Specific(X), m_Specific(Y)))) in simplifyOrInst()
2384 if (match(Op0, in simplifyOrInst()
2387 return Op0; in simplifyOrInst()
2390 match(Op0, m_LShr(m_Specific(X), m_Specific(Y)))) in simplifyOrInst()
2393 if (Value *V = simplifyAndOrOfCmps(Q, Op0, Op1, false)) in simplifyOrInst()
2399 if (isCheckForZeroAndMulWithOverflow(Op0, Op1, false)) in simplifyOrInst()
2401 if (isCheckForZeroAndMulWithOverflow(Op1, Op0, false)) in simplifyOrInst()
2402 return Op0; in simplifyOrInst()
2406 simplifyAssociativeBinOp(Instruction::Or, Op0, Op1, Q, MaxRecurse)) in simplifyOrInst()
2410 if (Value *V = expandCommutativeBinOp(Instruction::Or, Op0, Op1, in simplifyOrInst()
2414 if (isa<SelectInst>(Op0) || isa<SelectInst>(Op1)) { in simplifyOrInst()
2415 if (Op0->getType()->isIntOrIntVectorTy(1)) { in simplifyOrInst()
2417 if (match(Op1, m_Select(m_Specific(Op0), m_One(), m_Value()))) in simplifyOrInst()
2419 else if (match(Op0, m_Select(m_Specific(Op1), m_One(), m_Value()))) in simplifyOrInst()
2420 return Op0; in simplifyOrInst()
2426 threadBinOpOverSelect(Instruction::Or, Op0, Op1, Q, MaxRecurse)) in simplifyOrInst()
2433 if (match(Op0, m_And(m_Value(A), m_APInt(C1))) && in simplifyOrInst()
2458 if (isa<PHINode>(Op0) || isa<PHINode>(Op1)) in simplifyOrInst()
2459 if (Value *V = threadBinOpOverPHI(Instruction::Or, Op0, Op1, Q, MaxRecurse)) in simplifyOrInst()
2462 if (Op0->getType()->isIntOrIntVectorTy(1)) { in simplifyOrInst()
2464 if (isImpliedCondition(Op0, Op1, Q.DL).value_or(false)) in simplifyOrInst()
2467 if (isImpliedCondition(Op1, Op0, Q.DL).value_or(false)) in simplifyOrInst()
2468 return Op0; in simplifyOrInst()
2474 Value *llvm::simplifyOrInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifyOrInst() argument
2475 return ::simplifyOrInst(Op0, Op1, Q, RecursionLimit); in simplifyOrInst()
2480 static Value *simplifyXorInst(Value *Op0, Value *Op1, const SimplifyQuery &Q, in simplifyXorInst() argument
2482 if (Constant *C = foldOrCommuteConstant(Instruction::Xor, Op0, Op1, Q)) in simplifyXorInst()
2495 return Op0; in simplifyXorInst()
2498 if (Op0 == Op1) in simplifyXorInst()
2499 return Constant::getNullValue(Op0->getType()); in simplifyXorInst()
2502 if (match(Op0, m_Not(m_Specific(Op1))) || match(Op1, m_Not(m_Specific(Op0)))) in simplifyXorInst()
2503 return Constant::getAllOnesValue(Op0->getType()); in simplifyXorInst()
2524 if (Value *R = foldAndOrNot(Op0, Op1)) in simplifyXorInst()
2526 if (Value *R = foldAndOrNot(Op1, Op0)) in simplifyXorInst()
2529 if (Value *V = simplifyLogicOfAddSub(Op0, Op1, Instruction::Xor)) in simplifyXorInst()
2534 simplifyAssociativeBinOp(Instruction::Xor, Op0, Op1, Q, MaxRecurse)) in simplifyXorInst()
2549 Value *llvm::simplifyXorInst(Value *Op0, Value *Op1, const SimplifyQuery &Q) { in simplifyXorInst() argument
2550 return ::simplifyXorInst(Op0, Op1, Q, RecursionLimit); in simplifyXorInst()
4891 static Value *foldIdentityShuffles(int DestElt, Value *Op0, Value *Op1, in foldIdentityShuffles() argument
4903 int InVecNumElts = cast<FixedVectorType>(Op0->getType())->getNumElements(); in foldIdentityShuffles()
4905 Value *SourceOp = Op0; in foldIdentityShuffles()
4939 static Value *simplifyShuffleVectorInst(Value *Op0, Value *Op1, in simplifyShuffleVectorInst() argument
4946 auto *InVecTy = cast<VectorType>(Op0->getType()); in simplifyShuffleVectorInst()
4969 Op0 = PoisonValue::get(InVecTy); in simplifyShuffleVectorInst()
4974 auto *Op0Const = dyn_cast<Constant>(Op0); in simplifyShuffleVectorInst()
4987 std::swap(Op0, Op1); in simplifyShuffleVectorInst()
5000 if (!Scalable && match(Op0, m_InsertElt(m_Value(), m_Constant(C), in simplifyShuffleVectorInst()
5020 if (auto *OpShuf = dyn_cast<ShuffleVectorInst>(Op0)) in simplifyShuffleVectorInst()
5023 return Op0; in simplifyShuffleVectorInst()
5045 foldIdentityShuffles(i, Op0, Op1, Indices[i], RootVec, MaxRecurse); in simplifyShuffleVectorInst()
5055 Value *llvm::simplifyShuffleVectorInst(Value *Op0, Value *Op1, in simplifyShuffleVectorInst() argument
5058 return ::simplifyShuffleVectorInst(Op0, Op1, Mask, RetTy, Q, RecursionLimit); in simplifyShuffleVectorInst()
5137 simplifyFAddInst(Value *Op0, Value *Op1, FastMathFlags FMF, in simplifyFAddInst() argument
5142 if (Constant *C = foldOrCommuteConstant(Instruction::FAdd, Op0, Op1, Q)) in simplifyFAddInst()
5145 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFAddInst()
5157 return Op0; in simplifyFAddInst()
5162 (FMF.noSignedZeros() || CannotBeNegativeZero(Op0, Q.TLI))) in simplifyFAddInst()
5163 return Op0; in simplifyFAddInst()
5176 if (match(Op0, m_FSub(m_AnyZeroFP(), m_Specific(Op1))) || in simplifyFAddInst()
5177 match(Op1, m_FSub(m_AnyZeroFP(), m_Specific(Op0)))) in simplifyFAddInst()
5178 return ConstantFP::getNullValue(Op0->getType()); in simplifyFAddInst()
5180 if (match(Op0, m_FNeg(m_Specific(Op1))) || in simplifyFAddInst()
5181 match(Op1, m_FNeg(m_Specific(Op0)))) in simplifyFAddInst()
5182 return ConstantFP::getNullValue(Op0->getType()); in simplifyFAddInst()
5189 (match(Op0, m_FSub(m_Value(X), m_Specific(Op1))) || in simplifyFAddInst()
5190 match(Op1, m_FSub(m_Value(X), m_Specific(Op0))))) in simplifyFAddInst()
5199 simplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF, in simplifyFSubInst() argument
5204 if (Constant *C = foldOrCommuteConstant(Instruction::FSub, Op0, Op1, Q)) in simplifyFSubInst()
5207 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFSubInst()
5215 return Op0; in simplifyFSubInst()
5220 (FMF.noSignedZeros() || CannotBeNegativeZero(Op0, Q.TLI))) in simplifyFSubInst()
5221 return Op0; in simplifyFSubInst()
5227 if (match(Op0, m_NegZeroFP()) && match(Op1, m_FNeg(m_Value(X)))) in simplifyFSubInst()
5235 if (FMF.noSignedZeros() && match(Op0, m_AnyZeroFP()) && in simplifyFSubInst()
5241 if (FMF.noNaNs() && Op0 == Op1) in simplifyFSubInst()
5242 return Constant::getNullValue(Op0->getType()); in simplifyFSubInst()
5247 (match(Op1, m_FSub(m_Specific(Op0), m_Value(X))) || in simplifyFSubInst()
5248 match(Op0, m_c_FAdd(m_Specific(Op1), m_Value(X))))) in simplifyFSubInst()
5254 static Value *simplifyFMAFMul(Value *Op0, Value *Op1, FastMathFlags FMF, in simplifyFMAFMul() argument
5258 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFMAFMul()
5266 return Op0; in simplifyFMAFMul()
5269 if (match(Op0, m_FPOne())) in simplifyFMAFMul()
5274 return ConstantFP::getNullValue(Op0->getType()); in simplifyFMAFMul()
5277 if (FMF.noNaNs() && FMF.noSignedZeros() && match(Op0, m_AnyZeroFP())) in simplifyFMAFMul()
5285 if (Op0 == Op1 && match(Op0, m_Sqrt(m_Value(X))) && FMF.allowReassoc() && in simplifyFMAFMul()
5294 simplifyFMulInst(Value *Op0, Value *Op1, FastMathFlags FMF, in simplifyFMulInst() argument
5299 if (Constant *C = foldOrCommuteConstant(Instruction::FMul, Op0, Op1, Q)) in simplifyFMulInst()
5303 return simplifyFMAFMul(Op0, Op1, FMF, Q, MaxRecurse, ExBehavior, Rounding); in simplifyFMulInst()
5306 Value *llvm::simplifyFAddInst(Value *Op0, Value *Op1, FastMathFlags FMF, in simplifyFAddInst() argument
5310 return ::simplifyFAddInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFAddInst()
5314 Value *llvm::simplifyFSubInst(Value *Op0, Value *Op1, FastMathFlags FMF, in simplifyFSubInst() argument
5318 return ::simplifyFSubInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFSubInst()
5322 Value *llvm::simplifyFMulInst(Value *Op0, Value *Op1, FastMathFlags FMF, in simplifyFMulInst() argument
5326 return ::simplifyFMulInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFMulInst()
5330 Value *llvm::simplifyFMAFMul(Value *Op0, Value *Op1, FastMathFlags FMF, in simplifyFMAFMul() argument
5334 return ::simplifyFMAFMul(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFMAFMul()
5339 simplifyFDivInst(Value *Op0, Value *Op1, FastMathFlags FMF, in simplifyFDivInst() argument
5344 if (Constant *C = foldOrCommuteConstant(Instruction::FDiv, Op0, Op1, Q)) in simplifyFDivInst()
5347 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFDivInst()
5355 return Op0; in simplifyFDivInst()
5360 if (FMF.noNaNs() && FMF.noSignedZeros() && match(Op0, m_AnyZeroFP())) in simplifyFDivInst()
5361 return ConstantFP::getNullValue(Op0->getType()); in simplifyFDivInst()
5366 if (Op0 == Op1) in simplifyFDivInst()
5367 return ConstantFP::get(Op0->getType(), 1.0); in simplifyFDivInst()
5371 if (FMF.allowReassoc() && match(Op0, m_c_FMul(m_Value(X), m_Specific(Op1)))) in simplifyFDivInst()
5377 if (match(Op0, m_FNegNSZ(m_Specific(Op1))) || in simplifyFDivInst()
5378 match(Op1, m_FNegNSZ(m_Specific(Op0)))) in simplifyFDivInst()
5379 return ConstantFP::get(Op0->getType(), -1.0); in simplifyFDivInst()
5385 Value *llvm::simplifyFDivInst(Value *Op0, Value *Op1, FastMathFlags FMF, in simplifyFDivInst() argument
5389 return ::simplifyFDivInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFDivInst()
5394 simplifyFRemInst(Value *Op0, Value *Op1, FastMathFlags FMF, in simplifyFRemInst() argument
5399 if (Constant *C = foldOrCommuteConstant(Instruction::FRem, Op0, Op1, Q)) in simplifyFRemInst()
5402 if (Constant *C = simplifyFPOp({Op0, Op1}, FMF, Q, ExBehavior, Rounding)) in simplifyFRemInst()
5413 if (match(Op0, m_PosZeroFP())) in simplifyFRemInst()
5414 return ConstantFP::getNullValue(Op0->getType()); in simplifyFRemInst()
5416 if (match(Op0, m_NegZeroFP())) in simplifyFRemInst()
5417 return ConstantFP::getNegativeZero(Op0->getType()); in simplifyFRemInst()
5423 Value *llvm::simplifyFRemInst(Value *Op0, Value *Op1, FastMathFlags FMF, in simplifyFRemInst() argument
5427 return ::simplifyFRemInst(Op0, Op1, FMF, Q, RecursionLimit, ExBehavior, in simplifyFRemInst()
5632 static Value *simplifyUnaryIntrinsic(Function *F, Value *Op0, in simplifyUnaryIntrinsic() argument
5637 if (auto *II = dyn_cast<IntrinsicInst>(Op0)) in simplifyUnaryIntrinsic()
5644 if (SignBitMustBeZero(Op0, Q.TLI)) in simplifyUnaryIntrinsic()
5645 return Op0; in simplifyUnaryIntrinsic()
5649 if (match(Op0, m_BSwap(m_Value(X)))) in simplifyUnaryIntrinsic()
5654 if (match(Op0, m_BitReverse(m_Value(X)))) in simplifyUnaryIntrinsic()
5660 unsigned BitWidth = Op0->getType()->getScalarSizeInBits(); in simplifyUnaryIntrinsic()
5661 if (MaskedValueIsZero(Op0, APInt::getHighBitsSet(BitWidth, BitWidth - 1), in simplifyUnaryIntrinsic()
5663 return Op0; in simplifyUnaryIntrinsic()
5669 match(Op0, m_Intrinsic<Intrinsic::log>(m_Value(X)))) in simplifyUnaryIntrinsic()
5675 match(Op0, m_Intrinsic<Intrinsic::log2>(m_Value(X)))) in simplifyUnaryIntrinsic()
5681 match(Op0, m_Intrinsic<Intrinsic::exp>(m_Value(X)))) in simplifyUnaryIntrinsic()
5687 (match(Op0, m_Intrinsic<Intrinsic::exp2>(m_Value(X))) || in simplifyUnaryIntrinsic()
5688 match(Op0, in simplifyUnaryIntrinsic()
5695 match(Op0, m_Intrinsic<Intrinsic::pow>(m_SpecificFP(10.0), m_Value(X)))) in simplifyUnaryIntrinsic()
5711 if (match(Op0, m_SIToFP(m_Value())) || match(Op0, m_UIToFP(m_Value()))) in simplifyUnaryIntrinsic()
5712 return Op0; in simplifyUnaryIntrinsic()
5717 if (match(Op0, in simplifyUnaryIntrinsic()
5721 if (isSplatValue(Op0)) in simplifyUnaryIntrinsic()
5722 return Op0; in simplifyUnaryIntrinsic()
5734 static Value *foldMinMaxSharedOp(Intrinsic::ID IID, Value *Op0, Value *Op1) { in foldMinMaxSharedOp() argument
5736 if (!match(Op0, m_MaxOrMin(m_Value(X), m_Value(Y)))) in foldMinMaxSharedOp()
5739 auto *MM0 = dyn_cast<IntrinsicInst>(Op0); in foldMinMaxSharedOp()
5756 static Value *simplifyBinaryIntrinsic(Function *F, Value *Op0, Value *Op1, in simplifyBinaryIntrinsic() argument
5766 if (match(Op0, m_Intrinsic<Intrinsic::abs>(m_Value(), m_Value()))) in simplifyBinaryIntrinsic()
5767 return Op0; in simplifyBinaryIntrinsic()
5772 if (match(Op0, m_Shl(m_One(), m_Value(X)))) in simplifyBinaryIntrinsic()
5778 if (match(Op0, m_LShr(m_Negative(), m_Value(X)))) in simplifyBinaryIntrinsic()
5780 if (match(Op0, m_AShr(m_Negative(), m_Value()))) in simplifyBinaryIntrinsic()
5789 if (Op0 == Op1) in simplifyBinaryIntrinsic()
5790 return Op0; in simplifyBinaryIntrinsic()
5793 if (isa<Constant>(Op0)) in simplifyBinaryIntrinsic()
5794 std::swap(Op0, Op1); in simplifyBinaryIntrinsic()
5813 return Op0; in simplifyBinaryIntrinsic()
5817 auto *MinMax0 = dyn_cast<IntrinsicInst>(Op0); in simplifyBinaryIntrinsic()
5826 return Op0; in simplifyBinaryIntrinsic()
5830 if (Value *V = foldMinMaxSharedOp(IID, Op0, Op1)) in simplifyBinaryIntrinsic()
5832 if (Value *V = foldMinMaxSharedOp(IID, Op1, Op0)) in simplifyBinaryIntrinsic()
5837 if (isICmpTrue(Pred, Op0, Op1, Q.getWithoutUndef(), RecursionLimit)) in simplifyBinaryIntrinsic()
5838 return Op0; in simplifyBinaryIntrinsic()
5839 if (isICmpTrue(Pred, Op1, Op0, Q.getWithoutUndef(), RecursionLimit)) in simplifyBinaryIntrinsic()
5843 isImpliedByDomCondition(Pred, Op0, Op1, Q.CxtI, Q.DL)) in simplifyBinaryIntrinsic()
5844 return *Imp ? Op0 : Op1; in simplifyBinaryIntrinsic()
5846 isImpliedByDomCondition(Pred, Op1, Op0, Q.CxtI, Q.DL)) in simplifyBinaryIntrinsic()
5847 return *Imp ? Op1 : Op0; in simplifyBinaryIntrinsic()
5856 if (Op0 == Op1 || Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
5863 if (Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) { in simplifyBinaryIntrinsic()
5874 if (match(Op0, m_Zero()) || match(Op1, m_Zero())) in simplifyBinaryIntrinsic()
5878 if (Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
5884 if (match(Op0, m_AllOnes()) || match(Op1, m_AllOnes())) in simplifyBinaryIntrinsic()
5892 if (Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
5897 return Op0; in simplifyBinaryIntrinsic()
5899 if (match(Op0, m_Zero())) in simplifyBinaryIntrinsic()
5904 if (match(Op0, m_Zero()) || match(Op1, m_AllOnes())) in simplifyBinaryIntrinsic()
5909 if (Op0 == Op1 || Q.isUndefValue(Op0) || Q.isUndefValue(Op1)) in simplifyBinaryIntrinsic()
5913 return Op0; in simplifyBinaryIntrinsic()
5916 if (auto *C0 = dyn_cast<Constant>(Op0)) in simplifyBinaryIntrinsic()
5924 return ConstantFP::get(Op0->getType(), 1.0); in simplifyBinaryIntrinsic()
5927 return Op0; in simplifyBinaryIntrinsic()
5932 if (Op0 == Op1) in simplifyBinaryIntrinsic()
5933 return Op0; in simplifyBinaryIntrinsic()
5936 if (match(Op0, m_FNeg(m_Specific(Op1))) || in simplifyBinaryIntrinsic()
5937 match(Op1, m_FNeg(m_Specific(Op0)))) in simplifyBinaryIntrinsic()
5945 if (Op0 == Op1) in simplifyBinaryIntrinsic()
5946 return Op0; in simplifyBinaryIntrinsic()
5949 if (isa<Constant>(Op0)) in simplifyBinaryIntrinsic()
5950 std::swap(Op0, Op1); in simplifyBinaryIntrinsic()
5954 return Op0; in simplifyBinaryIntrinsic()
5964 return PropagateNaN ? propagateNaN(cast<Constant>(Op1)) : Op0; in simplifyBinaryIntrinsic()
5983 return Op0; in simplifyBinaryIntrinsic()
5988 if (auto *M0 = dyn_cast<IntrinsicInst>(Op0)) in simplifyBinaryIntrinsic()
5991 return Op0; in simplifyBinaryIntrinsic()
5994 (M1->getOperand(0) == Op0 || M1->getOperand(1) == Op0)) in simplifyBinaryIntrinsic()
6005 if (match(Op0, m_Intrinsic<Intrinsic::vector_insert>(m_Value(), m_Value(X), in simplifyBinaryIntrinsic()
6067 Value *Op0 = Call->getArgOperand(0), *Op1 = Call->getArgOperand(1), in simplifyIntrinsic() local
6071 if (Q.isUndefValue(Op0) && Q.isUndefValue(Op1)) in simplifyIntrinsic()
6087 if (match(Op0, m_Zero()) && match(Op1, m_Zero())) in simplifyIntrinsic()
6091 if (match(Op0, m_AllOnes()) && match(Op1, m_AllOnes())) in simplifyIntrinsic()
6097 Value *Op0 = Call->getArgOperand(0); in simplifyIntrinsic() local
6101 if (Value *V = simplifyFPOp({Op0, Op1, Op2}, {}, Q, in simplifyIntrinsic()
6109 Value *Op0 = Call->getArgOperand(0); in simplifyIntrinsic() local
6112 if (Value *V = simplifyFPOp({Op0, Op1, Op2}, {}, Q, fp::ebIgnore, in simplifyIntrinsic()
6119 Value *Op0 = Call->getArgOperand(0); in simplifyIntrinsic() local
6127 if (isa<Constant>(Op0)) in simplifyIntrinsic()
6128 std::swap(Op0, Op1); in simplifyIntrinsic()
6143 return Op0; in simplifyIntrinsic()
6254 static Value *simplifyFreezeInst(Value *Op0, const SimplifyQuery &Q) { in simplifyFreezeInst() argument
6256 if (llvm::isGuaranteedNotToBeUndefOrPoison(Op0, Q.AC, Q.CxtI, Q.DT)) in simplifyFreezeInst()
6257 return Op0; in simplifyFreezeInst()
6262 Value *llvm::simplifyFreezeInst(Value *Op0, const SimplifyQuery &Q) { in simplifyFreezeInst() argument
6263 return ::simplifyFreezeInst(Op0, Q); in simplifyFreezeInst()