Home | History | Annotate | Download | only in Support

Lines Matching refs:ConstantRange

1 //===-- ConstantRange.cpp - ConstantRange implementation ------------------===//
25 #include "llvm/Support/ConstantRange.h"
32 ConstantRange::ConstantRange(uint32_t BitWidth, bool Full) {
41 ConstantRange::ConstantRange(const APInt &V) : Lower(V), Upper(V + 1) {}
43 ConstantRange::ConstantRange(const APInt &L, const APInt &U) :
46 "ConstantRange with unequal bit widths");
51 ConstantRange ConstantRange::makeICmpRegion(unsigned Pred,
52 const ConstantRange &CR) {
63 return ConstantRange(CR.getUpper(), CR.getLower());
64 return ConstantRange(W);
68 return ConstantRange(W, /* empty */ false);
69 return ConstantRange(APInt::getMinValue(W), UMax);
74 return ConstantRange(W, /* empty */ false);
75 return ConstantRange(APInt::getSignedMinValue(W), SMax);
80 return ConstantRange(W);
81 return ConstantRange(APInt::getMinValue(W), UMax + 1);
86 return ConstantRange(W);
87 return ConstantRange(APInt::getSignedMinValue(W), SMax + 1);
92 return ConstantRange(W, /* empty */ false);
93 return ConstantRange(UMin + 1, APInt::getNullValue(W));
98 return ConstantRange(W, /* empty */ false);
99 return ConstantRange(SMin + 1, APInt::getSignedMinValue(W));
104 return ConstantRange(W);
105 return ConstantRange(UMin, APInt::getNullValue(W));
110 return ConstantRange(W);
111 return ConstantRange(SMin, APInt::getSignedMinValue(W));
118 bool ConstantRange::isFullSet() const {
124 bool ConstantRange::isEmptySet() const {
131 bool ConstantRange::isWrappedSet() const {
138 bool ConstantRange::isSignWrappedSet() const {
145 APInt ConstantRange::getSetSize() const {
159 /// ConstantRange.
161 APInt ConstantRange::getUnsignedMax() const {
168 /// ConstantRange.
170 APInt ConstantRange::getUnsignedMin() const {
177 /// ConstantRange.
179 APInt ConstantRange::getSignedMax() const {
192 /// ConstantRange.
194 APInt ConstantRange::getSignedMin() const {
210 bool ConstantRange::contains(const APInt &V) const {
223 bool ConstantRange::contains(const ConstantRange &Other) const {
243 ConstantRange ConstantRange::subtract(const APInt &Val) const {
248 return ConstantRange(Lower - Val, Upper - Val);
256 ConstantRange ConstantRange::intersectWith(const ConstantRange &CR) const {
258 "ConstantRange types don't agree!");
270 return ConstantRange(getBitWidth(), false);
273 return ConstantRange(CR.Lower, Upper);
281 return ConstantRange(Lower, CR.Upper);
283 return ConstantRange(getBitWidth(), false);
292 return ConstantRange(CR.Lower, Upper);
300 return ConstantRange(getBitWidth(), false);
302 return ConstantRange(Lower, CR.Upper);
315 return ConstantRange(Lower, CR.Upper);
323 return ConstantRange(CR.Lower, Upper);
337 ConstantRange ConstantRange::unionWith(const ConstantRange &CR) const {
339 "ConstantRange types don't agree!");
351 return ConstantRange(Lower, CR.Upper);
352 return ConstantRange(CR.Lower, Upper);
362 return ConstantRange(getBitWidth());
364 return ConstantRange(L, U);
376 return ConstantRange(getBitWidth());
384 return ConstantRange(Lower, CR.Upper);
385 return ConstantRange(CR.Lower, Upper);
391 return ConstantRange(CR.Lower, Upper);
396 "ConstantRange::unionWith missed a case with one range wrapped");
397 return ConstantRange(Lower, CR.Upper);
403 return ConstantRange(getBitWidth());
411 return ConstantRange(L, U);
418 ConstantRange ConstantRange::zeroExtend(uint32_t DstTySize) const {
419 if (isEmptySet()) return ConstantRange(DstTySize, /*isFullSet=*/false);
425 return ConstantRange(APInt(DstTySize,0), APInt(DstTySize,1).shl(SrcTySize));
427 return ConstantRange(Lower.zext(DstTySize), Upper.zext(DstTySize));
434 ConstantRange ConstantRange::signExtend(uint32_t DstTySize) const {
435 if (isEmptySet()) return ConstantRange(DstTySize, /*isFullSet=*/false);
440 return ConstantRange(APInt::getHighBitsSet(DstTySize,DstTySize-SrcTySize+1),
444 return ConstantRange(Lower.sext(DstTySize), Upper.sext(DstTySize));
451 ConstantRange ConstantRange::truncate(uint32_t DstTySize) const {
454 return ConstantRange(DstTySize, /*isFullSet=*/true);
456 return ConstantRange(Lower.trunc(DstTySize), Upper.trunc(DstTySize));
461 ConstantRange ConstantRange::zextOrTrunc(uint32_t DstTySize) const {
472 ConstantRange ConstantRange::sextOrTrunc(uint32_t DstTySize) const {
481 ConstantRange
482 ConstantRange::add(const ConstantRange &Other) const {
484 return ConstantRange(getBitWidth(), /*isFullSet=*/false);
486 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
492 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
494 ConstantRange X = ConstantRange(NewLower, NewUpper);
497 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
502 ConstantRange
503 ConstantRange::sub(const ConstantRange &Other) const {
505 return ConstantRange(getBitWidth(), /*isFullSet=*/false);
507 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
513 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
515 ConstantRange X = ConstantRange(NewLower, NewUpper);
518 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
523 ConstantRange
524 ConstantRange::multiply(const ConstantRange &Other) const {
531 return ConstantRange(getBitWidth(), /*isFullSet=*/false);
533 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
540 ConstantRange Result_zext = ConstantRange(this_min * Other_min,
545 ConstantRange
546 ConstantRange::smax(const ConstantRange &Other) const {
550 return ConstantRange(getBitWidth(), /*isFullSet=*/false);
554 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
555 return ConstantRange(NewL, NewU);
558 ConstantRange
559 ConstantRange::umax(const ConstantRange &Other) const {
563 return ConstantRange(getBitWidth(), /*isFullSet=*/false);
567 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
568 return ConstantRange(NewL, NewU);
571 ConstantRange
572 ConstantRange::udiv(const ConstantRange &RHS) const {
574 return ConstantRange(getBitWidth(), /*isFullSet=*/false);
576 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
595 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
597 return ConstantRange(Lower, Upper);
600 ConstantRange
601 ConstantRange::binaryAnd(const ConstantRange &Other) const {
603 return ConstantRange(getBitWidth(), /*isFullSet=*/false);
609 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
610 return ConstantRange(APInt::getNullValue(getBitWidth()), umin + 1);
613 ConstantRange
614 ConstantRange::binaryOr(const ConstantRange &Other) const {
616 return ConstantRange(getBitWidth(), /*isFullSet=*/false);
622 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
623 return ConstantRange(umax, APInt::getNullValue(getBitWidth()));
626 ConstantRange
627 ConstantRange::shl(const ConstantRange &Other) const {
629 return ConstantRange(getBitWidth(), /*isFullSet=*/false);
637 return ConstantRange(min, max + 1);
640 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
643 ConstantRange
644 ConstantRange::lshr(const ConstantRange &Other) const {
646 return ConstantRange(getBitWidth(), /*isFullSet=*/false);
651 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
653 return ConstantRange(min, max + 1);
656 ConstantRange ConstantRange::inverse() const {
658 return ConstantRange(getBitWidth(), /*isFullSet=*/false);
660 return ConstantRange(getBitWidth(), /*isFullSet=*/true);
661 return ConstantRange(Upper, Lower);
666 void ConstantRange::print(raw_ostream &OS) const {
677 void ConstantRange::dump() const {