@@ -1080,10 +1080,18 @@ TEST_F(ConstantRangeTest, UMax) {
1080
1080
EXPECT_EQ (Some.umax (Some), Some);
1081
1081
EXPECT_EQ (Some.umax (Wrap), ConstantRange (APInt (16 , 0xa ), APInt (16 , 0 )));
1082
1082
EXPECT_EQ (Some.umax (One), Some);
1083
- // TODO: ConstantRange is currently over-conservative here.
1084
- EXPECT_EQ (Wrap.umax (Wrap), Full);
1083
+ EXPECT_EQ (Wrap.umax (Wrap), Wrap);
1085
1084
EXPECT_EQ (Wrap.umax (One), ConstantRange (APInt (16 , 0xa ), APInt (16 , 0 )));
1086
1085
EXPECT_EQ (One.umax (One), One);
1086
+
1087
+ TestBinaryOpExhaustive (
1088
+ [](const ConstantRange &CR1, const ConstantRange &CR2) {
1089
+ return CR1.umax (CR2);
1090
+ },
1091
+ [](const APInt &N1, const APInt &N2) {
1092
+ return APIntOps::umax (N1, N2);
1093
+ },
1094
+ PreferSmallestNonFullUnsigned);
1087
1095
}
1088
1096
1089
1097
TEST_F (ConstantRangeTest, SMax) {
@@ -1105,6 +1113,15 @@ TEST_F(ConstantRangeTest, SMax) {
1105
1113
EXPECT_EQ (Wrap.smax (One), ConstantRange (APInt (16 , 0xa ),
1106
1114
APInt (16 , (uint64_t )INT16_MIN)));
1107
1115
EXPECT_EQ (One.smax (One), One);
1116
+
1117
+ TestBinaryOpExhaustive (
1118
+ [](const ConstantRange &CR1, const ConstantRange &CR2) {
1119
+ return CR1.smax (CR2);
1120
+ },
1121
+ [](const APInt &N1, const APInt &N2) {
1122
+ return APIntOps::smax (N1, N2);
1123
+ },
1124
+ PreferSmallestNonFullSigned);
1108
1125
}
1109
1126
1110
1127
TEST_F (ConstantRangeTest, UMin) {
@@ -1119,10 +1136,18 @@ TEST_F(ConstantRangeTest, UMin) {
1119
1136
EXPECT_EQ (Some.umin (Some), Some);
1120
1137
EXPECT_EQ (Some.umin (Wrap), ConstantRange (APInt (16 , 0 ), APInt (16 , 0xaaa )));
1121
1138
EXPECT_EQ (Some.umin (One), One);
1122
- // TODO: ConstantRange is currently over-conservative here.
1123
- EXPECT_EQ (Wrap.umin (Wrap), Full);
1139
+ EXPECT_EQ (Wrap.umin (Wrap), Wrap);
1124
1140
EXPECT_EQ (Wrap.umin (One), ConstantRange (APInt (16 , 0 ), APInt (16 , 0xb )));
1125
1141
EXPECT_EQ (One.umin (One), One);
1142
+
1143
+ TestBinaryOpExhaustive (
1144
+ [](const ConstantRange &CR1, const ConstantRange &CR2) {
1145
+ return CR1.umin (CR2);
1146
+ },
1147
+ [](const APInt &N1, const APInt &N2) {
1148
+ return APIntOps::umin (N1, N2);
1149
+ },
1150
+ PreferSmallestNonFullUnsigned);
1126
1151
}
1127
1152
1128
1153
TEST_F (ConstantRangeTest, SMin) {
@@ -1139,11 +1164,19 @@ TEST_F(ConstantRangeTest, SMin) {
1139
1164
EXPECT_EQ (Some.smin (Wrap), ConstantRange (APInt (16 , (uint64_t )INT16_MIN),
1140
1165
APInt (16 , 0xaaa )));
1141
1166
EXPECT_EQ (Some.smin (One), One);
1142
- // TODO: ConstantRange is currently over-conservative here.
1143
- EXPECT_EQ (Wrap.smin (Wrap), Full);
1167
+ EXPECT_EQ (Wrap.smin (Wrap), Wrap);
1144
1168
EXPECT_EQ (Wrap.smin (One), ConstantRange (APInt (16 , (uint64_t )INT16_MIN),
1145
1169
APInt (16 , 0xb )));
1146
1170
EXPECT_EQ (One.smin (One), One);
1171
+
1172
+ TestBinaryOpExhaustive (
1173
+ [](const ConstantRange &CR1, const ConstantRange &CR2) {
1174
+ return CR1.smin (CR2);
1175
+ },
1176
+ [](const APInt &N1, const APInt &N2) {
1177
+ return APIntOps::smin (N1, N2);
1178
+ },
1179
+ PreferSmallestNonFullSigned);
1147
1180
}
1148
1181
1149
1182
TEST_F (ConstantRangeTest, UDiv) {
0 commit comments