@@ -613,8 +613,7 @@ TEST_F(PatternMatchTest, BitCast) {
613
613
614
614
TEST_F (PatternMatchTest, CheckedInt) {
615
615
Type *I8Ty = IRB.getInt8Ty ();
616
- const APInt *Res = nullptr ;
617
-
616
+ const Constant * CRes = nullptr ;
618
617
auto CheckUgt1 = [](const APInt &C) { return C.ugt (1 ); };
619
618
auto CheckTrue = [](const APInt &) { return true ; };
620
619
auto CheckFalse = [](const APInt &) { return false ; };
@@ -625,38 +624,33 @@ TEST_F(PatternMatchTest, CheckedInt) {
625
624
APInt APVal (8 , Val);
626
625
Constant *C = ConstantInt::get (I8Ty, Val);
627
626
628
- Res = nullptr ;
627
+ CRes = nullptr ;
629
628
EXPECT_TRUE (m_CheckedInt (CheckTrue).match (C));
630
- EXPECT_TRUE (m_CheckedInt (Res , CheckTrue).match (C));
631
- EXPECT_EQ (*Res, APVal );
629
+ EXPECT_TRUE (m_CheckedInt (CRes , CheckTrue).match (C));
630
+ EXPECT_EQ (CRes, C );
632
631
633
- Res = nullptr ;
632
+ CRes = nullptr ;
634
633
EXPECT_FALSE (m_CheckedInt (CheckFalse).match (C));
635
- EXPECT_FALSE (m_CheckedInt (Res, CheckFalse).match (C));
634
+ EXPECT_FALSE (m_CheckedInt (CRes, CheckFalse).match (C));
635
+ EXPECT_EQ (CRes, nullptr );
636
636
637
- Res = nullptr ;
637
+ CRes = nullptr ;
638
638
EXPECT_EQ (CheckUgt1 (APVal), m_CheckedInt (CheckUgt1).match (C));
639
- EXPECT_EQ (CheckUgt1 (APVal), m_CheckedInt (Res, CheckUgt1).match (C));
640
- if (CheckUgt1 (APVal)) {
641
- EXPECT_NE (Res, nullptr );
642
- EXPECT_EQ (*Res, APVal);
643
- }
639
+ EXPECT_EQ (CheckUgt1 (APVal), m_CheckedInt (CRes, CheckUgt1).match (C));
640
+ if (CheckUgt1 (APVal))
641
+ EXPECT_EQ (CRes, C);
644
642
645
- Res = nullptr ;
643
+ CRes = nullptr ;
646
644
EXPECT_EQ (CheckNonZero (APVal), m_CheckedInt (CheckNonZero).match (C));
647
- EXPECT_EQ (CheckNonZero (APVal), m_CheckedInt (Res, CheckNonZero).match (C));
648
- if (CheckNonZero (APVal)) {
649
- EXPECT_NE (Res, nullptr );
650
- EXPECT_EQ (*Res, APVal);
651
- }
645
+ EXPECT_EQ (CheckNonZero (APVal), m_CheckedInt (CRes, CheckNonZero).match (C));
646
+ if (CheckNonZero (APVal))
647
+ EXPECT_EQ (CRes, C);
652
648
653
- Res = nullptr ;
649
+ CRes = nullptr ;
654
650
EXPECT_EQ (CheckPow2 (APVal), m_CheckedInt (CheckPow2).match (C));
655
- EXPECT_EQ (CheckPow2 (APVal), m_CheckedInt (Res, CheckPow2).match (C));
656
- if (CheckPow2 (APVal)) {
657
- EXPECT_NE (Res, nullptr );
658
- EXPECT_EQ (*Res, APVal);
659
- }
651
+ EXPECT_EQ (CheckPow2 (APVal), m_CheckedInt (CRes, CheckPow2).match (C));
652
+ if (CheckPow2 (APVal))
653
+ EXPECT_EQ (CRes, C);
660
654
661
655
};
662
656
@@ -666,20 +660,20 @@ TEST_F(PatternMatchTest, CheckedInt) {
666
660
DoScalarCheck (3 );
667
661
668
662
EXPECT_FALSE (m_CheckedInt (CheckTrue).match (UndefValue::get (I8Ty)));
669
- EXPECT_FALSE (m_CheckedInt (Res , CheckTrue).match (UndefValue::get (I8Ty)));
670
- EXPECT_EQ (Res , nullptr );
663
+ EXPECT_FALSE (m_CheckedInt (CRes , CheckTrue).match (UndefValue::get (I8Ty)));
664
+ EXPECT_EQ (CRes , nullptr );
671
665
672
666
EXPECT_FALSE (m_CheckedInt (CheckFalse).match (UndefValue::get (I8Ty)));
673
- EXPECT_FALSE (m_CheckedInt (Res , CheckFalse).match (UndefValue::get (I8Ty)));
674
- EXPECT_EQ (Res , nullptr );
667
+ EXPECT_FALSE (m_CheckedInt (CRes , CheckFalse).match (UndefValue::get (I8Ty)));
668
+ EXPECT_EQ (CRes , nullptr );
675
669
676
670
EXPECT_FALSE (m_CheckedInt (CheckTrue).match (PoisonValue::get (I8Ty)));
677
- EXPECT_FALSE (m_CheckedInt (Res , CheckTrue).match (PoisonValue::get (I8Ty)));
678
- EXPECT_EQ (Res , nullptr );
671
+ EXPECT_FALSE (m_CheckedInt (CRes , CheckTrue).match (PoisonValue::get (I8Ty)));
672
+ EXPECT_EQ (CRes , nullptr );
679
673
680
674
EXPECT_FALSE (m_CheckedInt (CheckFalse).match (PoisonValue::get (I8Ty)));
681
- EXPECT_FALSE (m_CheckedInt (Res , CheckFalse).match (PoisonValue::get (I8Ty)));
682
- EXPECT_EQ (Res , nullptr );
675
+ EXPECT_FALSE (m_CheckedInt (CRes , CheckFalse).match (PoisonValue::get (I8Ty)));
676
+ EXPECT_EQ (CRes , nullptr );
683
677
684
678
auto DoVecCheckImpl = [&](ArrayRef<std::optional<int8_t >> Vals,
685
679
function_ref<bool (const APInt &)> CheckFn,
@@ -711,13 +705,13 @@ TEST_F(PatternMatchTest, CheckedInt) {
711
705
EXPECT_EQ (!(HasUndef && !UndefAsPoison) && Okay.value_or (false ),
712
706
m_CheckedInt (CheckFn).match (C));
713
707
714
- Res = nullptr ;
715
- bool Expec =
716
- !(HasUndef && !UndefAsPoison) && AllSame && Okay.value_or (false );
717
- EXPECT_EQ (Expec, m_CheckedInt (Res, CheckFn).match (C));
708
+ CRes = nullptr ;
709
+ bool Expec = !(HasUndef && !UndefAsPoison) && Okay.value_or (false );
710
+ EXPECT_EQ (Expec, m_CheckedInt (CRes, CheckFn).match (C));
718
711
if (Expec) {
719
- EXPECT_NE (Res, nullptr );
720
- EXPECT_EQ (*Res, *First);
712
+ EXPECT_NE (CRes, nullptr );
713
+ if (AllSame)
714
+ EXPECT_EQ (CRes, C);
721
715
}
722
716
};
723
717
auto DoVecCheck = [&](ArrayRef<std::optional<int8_t >> Vals) {
@@ -1559,24 +1553,25 @@ TEST_F(PatternMatchTest, VectorUndefFloat) {
1559
1553
EXPECT_FALSE (match (VectorNaNPoison, m_CheckedFp (CheckNonNaN)));
1560
1554
1561
1555
const APFloat *C;
1556
+ const Constant *CC;
1562
1557
// Regardless of whether poison is allowed,
1563
1558
// a fully undef/poison constant does not match.
1564
1559
EXPECT_FALSE (match (ScalarUndef, m_APFloat (C)));
1565
1560
EXPECT_FALSE (match (ScalarUndef, m_APFloatForbidPoison (C)));
1566
1561
EXPECT_FALSE (match (ScalarUndef, m_APFloatAllowPoison (C)));
1567
- EXPECT_FALSE (match (ScalarUndef, m_CheckedFp (C , CheckTrue)));
1562
+ EXPECT_FALSE (match (ScalarUndef, m_CheckedFp (CC , CheckTrue)));
1568
1563
EXPECT_FALSE (match (VectorUndef, m_APFloat (C)));
1569
1564
EXPECT_FALSE (match (VectorUndef, m_APFloatForbidPoison (C)));
1570
1565
EXPECT_FALSE (match (VectorUndef, m_APFloatAllowPoison (C)));
1571
- EXPECT_FALSE (match (VectorUndef, m_CheckedFp (C , CheckTrue)));
1566
+ EXPECT_FALSE (match (VectorUndef, m_CheckedFp (CC , CheckTrue)));
1572
1567
EXPECT_FALSE (match (ScalarPoison, m_APFloat (C)));
1573
1568
EXPECT_FALSE (match (ScalarPoison, m_APFloatForbidPoison (C)));
1574
1569
EXPECT_FALSE (match (ScalarPoison, m_APFloatAllowPoison (C)));
1575
- EXPECT_FALSE (match (ScalarPoison, m_CheckedFp (C , CheckTrue)));
1570
+ EXPECT_FALSE (match (ScalarPoison, m_CheckedFp (CC , CheckTrue)));
1576
1571
EXPECT_FALSE (match (VectorPoison, m_APFloat (C)));
1577
1572
EXPECT_FALSE (match (VectorPoison, m_APFloatForbidPoison (C)));
1578
1573
EXPECT_FALSE (match (VectorPoison, m_APFloatAllowPoison (C)));
1579
- EXPECT_FALSE (match (VectorPoison, m_CheckedFp (C , CheckTrue)));
1574
+ EXPECT_FALSE (match (VectorPoison, m_CheckedFp (CC , CheckTrue)));
1580
1575
1581
1576
// We can always match simple constants and simple splats.
1582
1577
C = nullptr ;
@@ -1597,12 +1592,13 @@ TEST_F(PatternMatchTest, VectorUndefFloat) {
1597
1592
C = nullptr ;
1598
1593
EXPECT_TRUE (match (VectorZero, m_APFloatAllowPoison (C)));
1599
1594
EXPECT_TRUE (C->isZero ());
1600
- C = nullptr ;
1601
- EXPECT_TRUE (match (VectorZero, m_CheckedFp (C, CheckTrue)));
1602
- EXPECT_TRUE (C->isZero ());
1603
- C = nullptr ;
1604
- EXPECT_TRUE (match (VectorZero, m_CheckedFp (C, CheckNonNaN)));
1605
- EXPECT_TRUE (C->isZero ());
1595
+
1596
+ CC = nullptr ;
1597
+ EXPECT_TRUE (match (VectorZero, m_CheckedFp (CC, CheckTrue)));
1598
+ EXPECT_TRUE (CC->isNullValue ());
1599
+ CC = nullptr ;
1600
+ EXPECT_TRUE (match (VectorZero, m_CheckedFp (CC, CheckNonNaN)));
1601
+ EXPECT_TRUE (CC->isNullValue ());
1606
1602
1607
1603
// Splats with undef are never allowed.
1608
1604
// Whether splats with poison can be matched depends on the matcher.
@@ -1627,11 +1623,17 @@ TEST_F(PatternMatchTest, VectorUndefFloat) {
1627
1623
C = nullptr ;
1628
1624
EXPECT_TRUE (match (VectorZeroPoison, m_Finite (C)));
1629
1625
EXPECT_TRUE (C->isZero ());
1626
+ CC = nullptr ;
1630
1627
C = nullptr ;
1631
- EXPECT_TRUE (match (VectorZeroPoison, m_CheckedFp (C, CheckTrue)));
1628
+ EXPECT_TRUE (match (VectorZeroPoison, m_CheckedFp (CC, CheckTrue)));
1629
+ EXPECT_NE (CC, nullptr );
1630
+ EXPECT_TRUE (match (CC, m_APFloatAllowPoison (C)));
1632
1631
EXPECT_TRUE (C->isZero ());
1632
+ CC = nullptr ;
1633
1633
C = nullptr ;
1634
- EXPECT_TRUE (match (VectorZeroPoison, m_CheckedFp (C, CheckNonNaN)));
1634
+ EXPECT_TRUE (match (VectorZeroPoison, m_CheckedFp (CC, CheckNonNaN)));
1635
+ EXPECT_NE (CC, nullptr );
1636
+ EXPECT_TRUE (match (CC, m_APFloatAllowPoison (C)));
1635
1637
EXPECT_TRUE (C->isZero ());
1636
1638
}
1637
1639
0 commit comments