Home | History | Annotate | Download | only in Support

Lines Matching full:constantrange

1 //===- llvm/unittest/Support/ConstantRangeTest.cpp - ConstantRange tests --===//
10 #include "llvm/Support/ConstantRange.h"
20 static ConstantRange Full;
21 static ConstantRange Empty;
22 static ConstantRange One;
23 static ConstantRange Some;
24 static ConstantRange Wrap;
27 ConstantRange ConstantRangeTest::Full(16);
28 ConstantRange ConstantRangeTest::Empty(16, false);
29 ConstantRange ConstantRangeTest::One(APInt(16, 0xa));
30 ConstantRange ConstantRangeTest::Some(APInt(16, 0xa), APInt(16, 0xaaa));
31 ConstantRange ConstantRangeTest::Wrap(APInt(16, 0xaaa), APInt(16, 0xa));
121 ConstantRange Wrap(APInt(4, 7), APInt(4, 3));
122 ConstantRange Wrap2(APInt(4, 8), APInt(4, 7));
149 EXPECT_EQ(ConstantRange(APInt(4, 7), APInt(4, 0)).getSignedMax(),
160 EXPECT_FALSE(ConstantRange(APInt(8, 127), APInt(8, 128)).isSignWrappedSet());
161 EXPECT_TRUE(ConstantRange(APInt(8, 127), APInt(8, 129)).isSignWrappedSet());
162 EXPECT_FALSE(ConstantRange(APInt(8, 128), APInt(8, 129)).isSignWrappedSet());
163 EXPECT_TRUE(ConstantRange(APInt(8, 10), APInt(8, 9)).isSignWrappedSet());
164 EXPECT_TRUE(ConstantRange(APInt(8, 10), APInt(8, 250)).isSignWrappedSet());
165 EXPECT_FALSE(ConstantRange(APInt(8, 250), APInt(8, 10)).isSignWrappedSet());
166 EXPECT_FALSE(ConstantRange(APInt(8, 250), APInt(8, 251)).isSignWrappedSet());
170 ConstantRange TFull = Full.truncate(10);
171 ConstantRange TEmpty = Empty.truncate(10);
172 ConstantRange TOne = One.truncate(10);
173 ConstantRange TSome = Some.truncate(10);
174 ConstantRange TWrap = Wrap.truncate(10);
177 EXPECT_EQ(TOne, ConstantRange(One.getLower().trunc(10),
183 ConstantRange ZFull = Full.zeroExtend(20);
184 ConstantRange ZEmpty = Empty.zeroExtend(20);
185 ConstantRange ZOne = One.zeroExtend(20);
186 ConstantRange ZSome = Some.zeroExtend(20);
187 ConstantRange ZWrap = Wrap.zeroExtend(20);
188 EXPECT_EQ(ZFull, ConstantRange(APInt(20, 0), APInt(20, 0x10000)));
190 EXPECT_EQ(ZOne, ConstantRange(One.getLower().zext(20),
192 EXPECT_EQ(ZSome, ConstantRange(Some.getLower().zext(20),
194 EXPECT_EQ(ZWrap, ConstantRange(APInt(20, 0), APInt(20, 0x10000)));
197 ConstantRange FiveZero(APInt(3, 5), APInt(3, 0));
198 EXPECT_EQ(FiveZero.zeroExtend(7), ConstantRange(APInt(7, 5), APInt(7, 8)));
202 ConstantRange SFull = Full.signExtend(20);
203 ConstantRange SEmpty = Empty.signExtend(20);
204 ConstantRange SOne = One.signExtend(20);
205 ConstantRange SSome = Some.signExtend(20);
206 ConstantRange SWrap = Wrap.signExtend(20);
207 EXPECT_EQ(SFull, ConstantRange(APInt(20, (uint64_t)INT16_MIN, true),
210 EXPECT_EQ(SOne, ConstantRange(One.getLower().sext(20),
212 EXPECT_EQ(SSome, ConstantRange(Some.getLower().sext(20),
214 EXPECT_EQ(SWrap, ConstantRange(APInt(20, (uint64_t)INT16_MIN, true),
217 EXPECT_EQ(ConstantRange(APInt(8, 120), APInt(8, 140)).signExtend(16),
218 ConstantRange(APInt(16, -128), APInt(16, 128)));
239 ConstantRange LHS(APInt(16, 4), APInt(16, 2));
240 ConstantRange RHS(APInt(16, 6), APInt(16, 5));
244 LHS = ConstantRange(APInt(32, -2147483646), APInt(32, 3));
245 RHS = ConstantRange(APInt(32, 2), APInt(32, 2147483646));
246 EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 2)));
249 LHS = ConstantRange(APInt(32, 2), APInt(32, 0));
250 RHS = ConstantRange(APInt(32, 4), APInt(32, 3));
251 EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 2), APInt(32, 0)));
254 LHS = ConstantRange(APInt(32, 2), APInt(32, 0));
255 RHS = ConstantRange(APInt(32, 4), APInt(32, 2));
256 EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 4), APInt(32, 0)));
259 LHS = ConstantRange(APInt(32, 4), APInt(32, 2));
260 RHS = ConstantRange(APInt(32, 5), APInt(32, 1));
261 EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 5), APInt(32, 1)));
264 LHS = ConstantRange(APInt(32, 2), APInt(32, 0));
265 RHS = ConstantRange(APInt(32, 7), APInt(32, 4));
266 EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 7), APInt(32, 4)));
269 LHS = ConstantRange(APInt(32, 4), APInt(32, 2));
270 RHS = ConstantRange(APInt(32, 1), APInt(32, 0));
271 EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 4), APInt(32, 2)));
274 LHS = ConstantRange(APInt(32, 15), APInt(32, 0));
275 RHS = ConstantRange(APInt(32, 7), APInt(32, 6));
276 EXPECT_EQ(LHS.intersectWith(RHS), ConstantRange(APInt(32, 15), APInt(32, 0)));
281 ConstantRange(APInt(16, 0xaaa), APInt(16, 0xb)));
288 EXPECT_EQ(ConstantRange(APInt(16, 14), APInt(16, 1)).unionWith(
289 ConstantRange(APInt(16, 0), APInt(16, 8))),
290 ConstantRange(APInt(16, 14), APInt(16, 8)));
291 EXPECT_EQ(ConstantRange(APInt(16, 6), APInt(16, 4)).unionWith(
292 ConstantRange(APInt(16, 4), APInt(16, 0))),
293 ConstantRange(16));
294 EXPECT_EQ(ConstantRange(APInt(16, 1), APInt(16, 0)).unionWith(
295 ConstantRange(APInt(16, 2), APInt(16, 1))),
296 ConstantRange(16));
305 ConstantRange A(APInt(16, 3), APInt(16, 7));
306 ConstantRange B(APInt(16, 5), APInt(16, 9));
307 ConstantRange C(APInt(16, 3), APInt(16, 5));
308 ConstantRange D(APInt(16, 7), APInt(16, 9));
309 ConstantRange E(APInt(16, 5), APInt(16, 4));
310 ConstantRange F(APInt(16, 7), APInt(16, 3));
320 ConstantRange(APInt(16, 0x6), APInt(16, 0xaa6)));
322 ConstantRange(APInt(16, 0xaa6), APInt(16, 0x6)));
324 ConstantRange(APInt(16, 0x6)));
340 ConstantRange(APInt(16, 0xe), APInt(16, 0xaae)));
342 ConstantRange(APInt(16, 0xaae), APInt(16, 0xe)));
344 ConstantRange(APInt(16, 0xe)));
360 ConstantRange(APInt(16, 0x6), APInt(16, 0xaa6)));
362 ConstantRange(APInt(16, 0xf561), APInt(16, 0xaa0)));
364 ConstantRange(APInt(16, 0xaa6), APInt(16, 0x6)));
366 ConstantRange(APInt(16, 0x6)));
379 EXPECT_EQ(One.multiply(One), ConstantRange(APInt(16, 0xa*0xa),
381 EXPECT_EQ(One.multiply(Some), ConstantRange(APInt(16, 0xa*0xa),
388 ConstantRange Zero(APInt(16, 0));
397 EXPECT_EQ(ConstantRange(APInt(4, 1), APInt(4, 6)).multiply(
398 ConstantRange(APInt(4, 6), APInt(4, 2))),
399 ConstantRange(4, /*isFullSet=*/true));
405 EXPECT_EQ(Full.umax(Some), ConstantRange(APInt(16, 0xa), APInt(16, 0)));
407 EXPECT_EQ(Full.umax(Some), ConstantRange(APInt(16, 0xa), APInt(16, 0)));
413 EXPECT_EQ(Some.umax(Wrap), ConstantRange(APInt(16, 0xa), APInt(16, 0)));
415 // TODO: ConstantRange is currently over-conservative here.
417 EXPECT_EQ(Wrap.umax(One), ConstantRange(APInt(16, 0xa), APInt(16, 0)));
424 EXPECT_EQ(Full.smax(Some), ConstantRange(APInt(16, 0xa),
427 EXPECT_EQ(Full.smax(One), ConstantRange(APInt(16, 0xa),
434 EXPECT_EQ(Some.smax(Wrap), ConstantRange(APInt(16, 0xa),
437 EXPECT_EQ(Wrap.smax(One), ConstantRange(APInt(16, 0xa),
445 EXPECT_EQ(Full.udiv(One), ConstantRange(APInt(16, 0),
447 EXPECT_EQ(Full.udiv(Some), ConstantRange(APInt(16, 0),
454 EXPECT_EQ(One.udiv(One), ConstantRange(APInt(16, 1)));
455 EXPECT_EQ(One.udiv(Some), ConstantRange(APInt(16, 0), APInt(16, 2)));
456 EXPECT_EQ(One.udiv(Wrap), ConstantRange(APInt(16, 0), APInt(16, 0xb)));
457 EXPECT_EQ(Some.udiv(Some), ConstantRange(APInt(16, 0), APInt(16, 0x111)));
458 EXPECT_EQ(Some.udiv(Wrap), ConstantRange(APInt(16, 0), APInt(16, 0xaaa)));
472 EXPECT_EQ(One.shl(One), ConstantRange(APInt(16, 0xa << 0xa),
484 EXPECT_EQ(Full.lshr(One), ConstantRange(APInt(16, 0),
486 EXPECT_EQ(Full.lshr(Some), ConstantRange(APInt(16, 0),
493 EXPECT_EQ(One.lshr(One), ConstantRange(APInt(16, 0)));
494 EXPECT_EQ(One.lshr(Some), ConstantRange(APInt(16, 0)));
495 EXPECT_EQ(One.lshr(Wrap), ConstantRange(APInt(16, 0), APInt(16, 0xb)));
496 EXPECT_EQ(Some.lshr(Some), ConstantRange(APInt(16, 0),
498 EXPECT_EQ(Some.lshr(Wrap), ConstantRange(APInt(16, 0), APInt(16, 0xaaa)));
502 TEST(ConstantRange, MakeICmpRegion) {
504 ConstantRange SMax = ConstantRange(APInt::getSignedMaxValue(32));
505 EXPECT_TRUE(ConstantRange::makeICmpRegion(ICmpInst::ICMP_SGT,