Lines Matching refs:right
339 if (m.right().Is(0)) return Replace(m.left().node()); // x ror 0 => x
342 m.left().ResolvedValue(), m.right().ResolvedValue() & 31));
353 m.right().ResolvedValue());
355 if (m.left().IsInt64Sub() && m.right().Is(0)) { // x - y == 0 => x == y
358 node->ReplaceInput(1, msub.right().node());
365 if (!ObjectsMayAlias(m.left().node(), m.right().node())) {
380 if (m.right().Is(0)) return Replace(m.right().node()); // x * 0 => 0
381 if (m.right().Is(1)) return Replace(m.left().node()); // x * 1 => x
384 m.right().ResolvedValue()));
386 if (m.right().Is(-1)) { // x * -1 => 0 - x
392 if (m.right().IsPowerOf2()) { // x * 2^n => x << n
394 m.right().ResolvedValue())));
399 if (m.right().HasResolvedValue() && m.left().IsInt32Mul()) {
401 if (n.right().HasResolvedValue() && m.OwnsInput(m.left().node())) {
404 m.right().ResolvedValue(), n.right().ResolvedValue())));
413 if (m.right().Is(2)) {
418 if (m.right().Is(-1)) {
440 m.right().ResolvedValue());
443 if (m.left().IsWord32Or() && m.right().Is(0)) {
447 mleftmatcher.right().IsNegative()) {
457 m.right().ResolvedValue());
465 if (m.right().Is(0)) return ReplaceBool(false); // x < 0 => false
468 m.right().ResolvedValue());
471 if (m.left().IsWord32Sar() && m.right().HasResolvedValue()) {
473 if (mleft.right().HasResolvedValue()) {
476 const uint32_t c = m.right().ResolvedValue();
477 const uint32_t k = mleft.right().ResolvedValue() & 0x1F;
491 if (m.right().Is(kMaxUInt32)) return ReplaceBool(true); // x <= M => true
494 m.right().ResolvedValue());
501 if (allow_signalling_nan_ && m.right().Is(0) &&
502 (std::copysign(1.0, m.right().ResolvedValue()) > 0)) {
505 if (m.right().IsNaN()) { // x - NaN => NaN
506 return ReplaceFloat32(SilenceNaN(m.right().ResolvedValue()));
513 m.right().ResolvedValue());
518 m.right().IsFloat32RoundDown()) {
519 if (m.right().InputAt(0)->opcode() == IrOpcode::kFloat32Sub) {
520 Float32BinopMatcher mright0(m.right().InputAt(0));
523 mright0.right().node()));
536 if (m.right().IsNaN()) { // x + NaN => NaN
537 return ReplaceFloat64(SilenceNaN(m.right().ResolvedValue()));
544 m.right().ResolvedValue());
550 if (allow_signalling_nan_ && m.right().Is(0) &&
551 (base::Double(m.right().ResolvedValue()).Sign() > 0)) {
554 if (m.right().IsNaN()) { // x - NaN => NaN
555 return ReplaceFloat64(SilenceNaN(m.right().ResolvedValue()));
562 m.right().ResolvedValue());
567 m.right().IsFloat64RoundDown()) {
568 if (m.right().InputAt(0)->opcode() == IrOpcode::kFloat64Sub) {
569 Float64BinopMatcher mright0(m.right().InputAt(0));
572 mright0.right().node()));
585 if (allow_signalling_nan_ && m.right().Is(1))
587 if (m.right().Is(-1)) { // x * -1.0 => -0.0 - x
593 if (m.right().IsNaN()) { // x * NaN => NaN
594 return ReplaceFloat64(SilenceNaN(m.right().ResolvedValue()));
598 m.right().ResolvedValue());
600 if (m.right().Is(2)) { // x * 2.0 => x + x
609 if (allow_signalling_nan_ && m.right().Is(1))
612 if (m.right().IsNaN()) { // x / NaN => NaN
613 return ReplaceFloat64(SilenceNaN(m.right().ResolvedValue()));
620 base::Divide(m.left().ResolvedValue(), m.right().ResolvedValue()));
622 if (allow_signalling_nan_ && m.right().Is(-1)) { // x / -1.0 => -x
627 if (m.right().IsNormal() && m.right().IsPositiveOrNegativePowerOf2()) {
631 node->ReplaceInput(1, Float64Constant(1.0 / m.right().ResolvedValue()));
639 if (m.right().Is(0)) { // x % 0 => NaN
642 if (m.right().IsNaN()) { // x % NaN => NaN
643 return ReplaceFloat64(SilenceNaN(m.right().ResolvedValue()));
650 Modulo(m.left().ResolvedValue(), m.right().ResolvedValue()));
692 if (m.right().IsNaN()) {
693 return ReplaceFloat64(SilenceNaN(m.right().ResolvedValue()));
700 m.right().ResolvedValue()));
762 m.right().ResolvedValue()));
763 } else if (m.right().Is(0.0)) { // x ** +-0.0 => 1.0
765 } else if (m.right().Is(2.0)) { // x ** 2.0 => x * x
769 } else if (m.right().Is(0.5)) {
926 m.right().ResolvedValue());
934 m.right().ResolvedValue());
942 m.right().ResolvedValue());
950 m.right().ResolvedValue());
985 if (m.right().Is(0)) return Replace(m.left().node()); // x + 0 => x
988 m.right().ResolvedValue()));
993 node->ReplaceInput(0, m.right().node());
994 node->ReplaceInput(1, mleft.right().node());
999 if (m.right().IsInt32Sub()) {
1000 Int32BinopMatcher mright(m.right().node());
1002 node->ReplaceInput(1, mright.right().node());
1008 if (m.right().HasResolvedValue() && m.left().IsInt32Add()) {
1010 if (n.right().HasResolvedValue() && m.OwnsInput(m.left().node())) {
1012 1, Int32Constant(base::AddWithWraparound(m.right().ResolvedValue(),
1013 n.right().ResolvedValue())));
1025 if (m.right().Is(0)) return Replace(m.left().node()); // x + 0 => 0
1028 m.right().ResolvedValue()));
1031 if (m.right().HasResolvedValue() && m.left().IsInt64Add()) {
1033 if (n.right().HasResolvedValue() && m.OwnsInput(m.left().node())) {
1035 1, Int64Constant(base::AddWithWraparound(m.right().ResolvedValue(),
1036 n.right().ResolvedValue())));
1047 if (m.right().Is(0)) return Replace(m.left().node()); // x - 0 => x
1050 m.right().ResolvedValue()));
1053 if (m.right().HasResolvedValue()) { // x - K => x + -K
1056 Int32Constant(base::NegateWithWraparound(m.right().ResolvedValue())));
1066 if (m.right().Is(0)) return Replace(m.left().node()); // x - 0 => x
1069 m.right().ResolvedValue()));
1072 if (m.right().HasResolvedValue()) { // x - K => x + -K
1075 Int64Constant(base::NegateWithWraparound(m.right().ResolvedValue())));
1085 if (m.right().Is(0)) return Replace(m.right().node()); // x * 0 => 0
1086 if (m.right().Is(1)) return Replace(m.left().node()); // x * 1 => x
1089 m.right().ResolvedValue()));
1091 if (m.right().Is(-1)) { // x * -1 => 0 - x
1097 if (m.right().IsPowerOf2()) { // x * 2^n => x << n
1100 Int64Constant(base::bits::WhichPowerOfTwo(m.right().ResolvedValue())));
1105 if (m.right().HasResolvedValue() && m.left().IsInt64Mul()) {
1107 if (n.right().HasResolvedValue() && m.OwnsInput(m.left().node())) {
1109 1, Int64Constant(base::MulWithWraparound(m.right().ResolvedValue(),
1110 n.right().ResolvedValue())));
1121 if (m.right().Is(0)) return Replace(m.right().node()); // x / 0 => 0
1122 if (m.right().Is(1)) return Replace(m.left().node()); // x / 1 => x
1125 m.right().ResolvedValue()));
1131 if (m.right().Is(-1)) { // x / -1 => 0 - x
1138 if (m.right().HasResolvedValue()) {
1139 int32_t const divisor = m.right().ResolvedValue();
1168 if (m.right().Is(0)) return Replace(m.right().node()); // x / 0 => 0
1169 if (m.right().Is(1)) return Replace(m.left().node()); // x / 1 => x
1172 m.right().ResolvedValue()));
1178 if (m.right().HasResolvedValue()) {
1180 uint32_t const divisor = m.right().ResolvedValue();
1183 m.right().ResolvedValue())));
1197 if (m.right().Is(0)) return Replace(m.right().node()); // x % 0 => 0
1198 if (m.right().Is(1)) return ReplaceInt32(0); // x % 1 => 0
1199 if (m.right().Is(-1)) return ReplaceInt32(0); // x % -1 => 0
1203 m.right().ResolvedValue()));
1205 if (m.right().HasResolvedValue()) {
1207 uint32_t const divisor = Abs(m.right().ResolvedValue());
1233 if (m.right().Is(0)) return Replace(m.right().node()); // x % 0 => 0
1234 if (m.right().Is(1)) return ReplaceUint32(0); // x % 1 => 0
1238 m.right().ResolvedValue()));
1240 if (m.right().HasResolvedValue()) {
1242 uint32_t const divisor = m.right().ResolvedValue();
1244 node->ReplaceInput(1, Uint32Constant(m.right().ResolvedValue() - 1));
1272 if (m.right().HasResolvedValue() &&
1274 (m.right().ResolvedValue() & 0xFF) == 0xFF) ||
1276 (m.right().ResolvedValue() & 0xFFFF) == 0xFFFF))) {
1285 m.right().IsInRange(1, 24)) ||
1287 m.right().IsInRange(1, 16)))) {
1289 if (mleft.right().Is(m.right().ResolvedValue())) {
1310 m.left().ResolvedValue(), m.right().ResolvedValue(), &val);
1313 if (m.right().Is(0)) {
1314 return Replace(index == 0 ? m.left().node() : m.right().node());
1324 m.left().ResolvedValue(), m.right().ResolvedValue(), &val);
1327 if (m.right().Is(0)) {
1328 return Replace(index == 0 ? m.left().node() : m.right().node());
1338 m.left().ResolvedValue(), m.right().ResolvedValue(), &val);
1341 if (m.right().Is(0)) {
1342 return Replace(m.right().node());
1344 if (m.right().Is(1)) {
1383 m.right().op() == machine()->Word32SarShiftOutZeros()) {
1385 Int32BinopMatcher mright(m.right().node());
1386 if (mleft.right().HasResolvedValue() &&
1387 mright.right().Is(mleft.right().ResolvedValue())) {
1395 if (m.right().HasResolvedValue() &&
1398 uint32_t right = m.right().ResolvedValue();
1400 if (mleft.right().HasResolvedValue()) {
1401 auto shift = mleft.right().ResolvedValue();
1402 if (CanRevertLeftShiftWithRightShift(right, shift)) {
1404 node->ReplaceInput(1, Int32Constant(right << shift));
1412 m.right().op() == machine()->Word32SarShiftOutZeros() &&
1413 m.right().node()->UseCount() == 1) {
1415 Int32BinopMatcher mright(m.right().node());
1416 if (mright.right().HasResolvedValue()) {
1417 auto shift = mright.right().ResolvedValue();
1454 m.left().IsChangeInt32ToInt64() && m.right().IsChangeInt32ToInt64();
1456 m.right().IsChangeUint32ToUint64())) {
1458 node->ReplaceInput(1, NodeProperties::GetValueInput(m.right().node(), 0));
1467 m.right().op() == machine()->Word64SarShiftOutZeros()) {
1469 Int64BinopMatcher mright(m.right().node());
1470 if (mleft.right().HasResolvedValue() &&
1471 mright.right().Is(mleft.right().ResolvedValue())) {
1489 if (m.right().IsWord32And()) {
1490 Int32BinopMatcher mright(m.right().node());
1491 if (mright.right().Is(0x1F)) {
1503 if (m.right().Is(0)) return Replace(m.left().node()); // x << 0 => x
1506 m.right().ResolvedValue()));
1508 if (m.right().IsInRange(1, 31)) {
1519 mleft.right().IsInRange(1, 31)) {
1521 int k = mleft.right().ResolvedValue();
1522 int l = m.right().ResolvedValue();
1540 if (mleft.right().Is(m.right().ResolvedValue())) {
1544 << m.right().ResolvedValue()));
1556 if (m.right().Is(0)) return Replace(m.left().node()); // x << 0 => x
1559 m.right().ResolvedValue()));
1561 if (m.right().IsInRange(1, 63) &&
1572 mleft.right().IsInRange(1, 63)) {
1574 int64_t k = mleft.right().ResolvedValue();
1575 int64_t l = m.right().ResolvedValue();
1593 if (mleft.right().Is(m.right().ResolvedValue())) {
1596 << m.right().ResolvedValue()));
1606 if (m.right().Is(0)) return Replace(m.left().node()); // x >>> 0 => x
1609 (m.right().ResolvedValue() & 31));
1611 if (m.left().IsWord32And() && m.right().HasResolvedValue()) {
1613 if (mleft.right().HasResolvedValue()) {
1614 uint32_t shift = m.right().ResolvedValue() & 31;
1615 uint32_t mask = mleft.right().ResolvedValue();
1628 if (m.right().Is(0)) return Replace(m.left().node()); // x >>> 0 => x
1631 (m.right().ResolvedValue() & 63));
1638 if (m.right().Is(0)) return Replace(m.left().node()); // x >> 0 => x
1641 (m.right().ResolvedValue() & 31));
1646 if (m.right().Is(31) && mleft.right().Is(31)) {
1656 if (m.right().Is(24) && mleft.right().Is(24) &&
1661 if (m.right().Is(16) && mleft.right().Is(16) &&
1673 if (m.right().Is(0)) return Replace(m.left().node()); // x >> 0 => x
1676 (m.right().ResolvedValue() & 63));
1687 if (m.right().Is(0)) return Replace(m.right().node()); // x & 0 => 0
1688 if (m.right().Is(-1)) return Replace(m.left().node()); // x & -1 => x
1689 if (m.left().IsComparison() && m.right().Is(1)) { // CMP & 1 => CMP
1693 return a.ReplaceIntN(m.left().ResolvedValue() & m.right().ResolvedValue());
1696 if (A::IsWordNAnd(m.left()) && m.right().HasResolvedValue()) {
1698 if (mleft.right().HasResolvedValue()) { // (x & K) & K => x & K
1700 node->ReplaceInput(1, a.IntNConstant(m.right().ResolvedValue() &
1701 mleft.right().ResolvedValue()));
1705 if (m.right().IsNegativePowerOf2()) {
1706 typename A::intN_t const mask = m.right().ResolvedValue();
1710 if (mleft.right().HasResolvedValue() &&
1711 (mleft.right().ResolvedValue() & (A::WORD_SIZE - 1)) >=
1718 if (mleft.right().HasResolvedValue() &&
1719 (mleft.right().ResolvedValue() & mask) ==
1720 mleft.right().ResolvedValue()) {
1723 a.WordNAnd(mleft.left().node(), m.right().node()));
1724 node->ReplaceInput(1, mleft.right().node());
1730 if (mleftleft.right().IsMultipleOf(neg_mask)) {
1733 0, a.WordNAnd(mleft.right().node(), m.right().node()));
1739 if (A::IsIntNMul(mleft.right())) {
1740 typename A::IntNBinopMatcher mleftright(mleft.right().node());
1741 if (mleftright.right().IsMultipleOf(neg_mask)) {
1744 a.WordNAnd(mleft.left().node(), m.right().node()));
1752 if (mleftleft.right().Is(base::bits::CountTrailingZeros(mask))) {
1755 0, a.WordNAnd(mleft.right().node(), m.right().node()));
1761 if (A::IsWordNShl(mleft.right())) {
1762 typename A::IntNBinopMatcher mleftright(mleft.right().node());
1763 if (mleftright.right().Is(base::bits::CountTrailingZeros(mask))) {
1766 a.WordNAnd(mleft.left().node(), m.right().node()));
1774 if (mleft.right().IsMultipleOf(neg_mask)) {
1814 if (mand.right().HasResolvedValue() && eq.right().HasResolvedValue()) {
1815 uint32_t mask = mand.right().ResolvedValue();
1816 uint32_t masked_value = eq.right().ResolvedValue();
1860 if (mand.right().HasResolvedValue() &&
1861 mand.right().ResolvedValue() == 1) {
1865 if (shift.right().HasResolvedValue() &&
1866 shift.right().ResolvedValue() < 32u) {
1867 uint32_t mask = 1 << shift.right().ResolvedValue();
1892 if (auto right_bitfield = BitfieldCheck::Detect(m.right().node())) {
1930 if (m.left().IsWord32Shl() && m.right().IsWord32Shr()) {
1932 shr = m.right().node();
1933 } else if (m.left().IsWord32Shr() && m.right().IsWord32Shl()) {
1934 shl = m.right().node();
1944 if (mshl.right().HasResolvedValue() && mshr.right().HasResolvedValue()) {
1946 if (mshl.right().ResolvedValue() + mshr.right().ResolvedValue() != 32) {
1950 (mshl.right().ResolvedValue() & 31) == 0) {
1956 if (mshl.right().IsInt32Sub()) {
1957 sub = mshl.right().node();
1958 y = mshr.right().node();
1959 } else if (mshr.right().IsInt32Sub()) {
1960 sub = mshr.right().node();
1961 y = mshl.right().node();
1967 if (!msub.left().Is(32) || msub.right().node() != y) return NoChange();
1974 node->ReplaceInput(1, mshr.right().node());
1985 if (m.right().Is(0)) return Replace(m.left().node()); // x | 0 => x
1986 if (m.right().Is(-1)) return Replace(m.right().node()); // x | -1 => -1
1988 return a.ReplaceIntN(m.left().ResolvedValue() | m.right().ResolvedValue());
1994 if (m.right().HasResolvedValue()) {
1997 if (mand.right().HasResolvedValue()) {
1998 if ((m.right().ResolvedValue() | mand.right().ResolvedValue()) == -1) {
2025 if (m.right().Is(0)) return Replace(m.left().node()); // x ^ 0 => x
2027 return a.ReplaceIntN(m.left().ResolvedValue() ^ m.right().ResolvedValue());
2030 if (A::IsWordNXor(m.left()) && m.right().Is(-1)) {
2032 if (mleft.right().Is(-1)) { // (x ^ -1) ^ -1 => x
2043 if (m.right().IsWord32Equal() && m.left().Is(1)) {
2044 return Replace(Word32Equal(m.right().node(), Int32Constant(0)));
2057 return ReplaceBool(m.left().ResolvedValue() == m.right().ResolvedValue());
2059 if (m.left().IsInt32Sub() && m.right().Is(0)) { // x - y == 0 => x == y
2062 node->ReplaceInput(1, msub.right().node());
2067 if (m.right().HasResolvedValue()) {
2072 static_cast<uint32_t>(m.right().ResolvedValue()));
2075 m.left().node(), static_cast<uint32_t>(m.right().ResolvedValue()));
2085 if (!ObjectsMayAlias(m.left().node(), m.right().node())) {
2138 m.right().ResolvedValue());
2141 m.right().ResolvedValue());
2144 m.right().ResolvedValue());
2149 m.right().IsChangeFloat32ToFloat64()) ||
2151 IsFloat64RepresentableAsFloat32(m.right())) ||
2153 m.right().IsChangeFloat32ToFloat64())) {
2177 1, m.right().HasResolvedValue()
2178 ? Float32Constant(static_cast<float>(m.right().ResolvedValue()))
2179 : m.right().InputAt(0));
2218 if (IsZero(m.right().node())) {
2356 mand.right().HasResolvedValue()) {
2359 if (mshift.right().HasResolvedValue()) {
2360 auto shift_bits = mshift.right().ResolvedValue();
2361 auto mask = mand.right().ResolvedValue();
2384 if (mshift.right().HasResolvedValue()) {
2385 int32_t shift = static_cast<int32_t>(mshift.right().ResolvedValue());