brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · 97c75b3 Raw
100 lines · cpp
1//===- InferIntRangeInterfaceTest.cpp - Unit Tests for InferIntRange... --===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "mlir/Interfaces/InferIntRangeInterface.h"10#include "llvm/ADT/APInt.h"11#include <limits>12 13#include <gtest/gtest.h>14 15using namespace mlir;16 17TEST(IntRangeAttrs, BasicConstructors) {18  APInt zero = APInt::getZero(64);19  APInt two(64, 2);20  APInt three(64, 3);21  ConstantIntRanges boundedAbove(zero, two, zero, three);22  EXPECT_EQ(boundedAbove.umin(), zero);23  EXPECT_EQ(boundedAbove.umax(), two);24  EXPECT_EQ(boundedAbove.smin(), zero);25  EXPECT_EQ(boundedAbove.smax(), three);26}27 28TEST(IntRangeAttrs, FromUnsigned) {29  APInt zero = APInt::getZero(64);30  APInt maxInt = APInt::getSignedMaxValue(64);31  APInt minInt = APInt::getSignedMinValue(64);32  APInt minIntPlusOne = minInt + 1;33 34  ConstantIntRanges canPortToSigned =35      ConstantIntRanges::fromUnsigned(zero, maxInt);36  EXPECT_EQ(canPortToSigned.smin(), zero);37  EXPECT_EQ(canPortToSigned.smax(), maxInt);38 39  ConstantIntRanges cantPortToSigned =40      ConstantIntRanges::fromUnsigned(zero, minInt);41  EXPECT_EQ(cantPortToSigned.smin(), minInt);42  EXPECT_EQ(cantPortToSigned.smax(), maxInt);43 44  ConstantIntRanges signedNegative =45      ConstantIntRanges::fromUnsigned(minInt, minIntPlusOne);46  EXPECT_EQ(signedNegative.smin(), minInt);47  EXPECT_EQ(signedNegative.smax(), minIntPlusOne);48}49 50TEST(IntRangeAttrs, FromSigned) {51  APInt zero = APInt::getZero(64);52  APInt one = zero + 1;53  APInt negOne = zero - 1;54  APInt intMax = APInt::getSignedMaxValue(64);55  APInt intMin = APInt::getSignedMinValue(64);56  APInt uintMax = APInt::getMaxValue(64);57 58  ConstantIntRanges noUnsignedBound =59      ConstantIntRanges::fromSigned(negOne, one);60  EXPECT_EQ(noUnsignedBound.umin(), zero);61  EXPECT_EQ(noUnsignedBound.umax(), uintMax);62 63  ConstantIntRanges positive = ConstantIntRanges::fromSigned(one, intMax);64  EXPECT_EQ(positive.umin(), one);65  EXPECT_EQ(positive.umax(), intMax);66 67  ConstantIntRanges negative = ConstantIntRanges::fromSigned(intMin, negOne);68  EXPECT_EQ(negative.umin(), intMin);69  EXPECT_EQ(negative.umax(), negOne);70 71  ConstantIntRanges preserved = ConstantIntRanges::fromSigned(zero, one);72  EXPECT_EQ(preserved.umin(), zero);73  EXPECT_EQ(preserved.umax(), one);74}75 76TEST(IntRangeAttrs, Join) {77  APInt zero = APInt::getZero(64);78  APInt one = zero + 1;79  APInt two = zero + 2;80  APInt intMin = APInt::getSignedMinValue(64);81  APInt intMax = APInt::getSignedMaxValue(64);82  APInt uintMax = APInt::getMaxValue(64);83 84  ConstantIntRanges maximal(zero, uintMax, intMin, intMax);85  ConstantIntRanges zeroOne(zero, one, zero, one);86 87  EXPECT_EQ(zeroOne.rangeUnion(maximal), maximal);88  EXPECT_EQ(maximal.rangeUnion(zeroOne), maximal);89 90  EXPECT_EQ(zeroOne.rangeUnion(zeroOne), zeroOne);91 92  ConstantIntRanges oneTwo(one, two, one, two);93  ConstantIntRanges zeroTwo(zero, two, zero, two);94  EXPECT_EQ(zeroOne.rangeUnion(oneTwo), zeroTwo);95 96  ConstantIntRanges zeroOneUnsignedOnly(zero, one, intMin, intMax);97  ConstantIntRanges zeroOneSignedOnly(zero, uintMax, zero, one);98  EXPECT_EQ(zeroOneUnsignedOnly.rangeUnion(zeroOneSignedOnly), maximal);99}100