//===- InferIntRangeInterfaceImpls.cpp - Integer range impls for arith -===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "mlir/Dialect/Arith/IR/Arith.h" #include "mlir/Interfaces/InferIntRangeInterface.h" #include "mlir/Interfaces/Utils/InferIntRangeCommon.h" #include "llvm/Support/Debug.h" #include <optional> #define DEBUG_TYPE … usingnamespacemlir; usingnamespacemlir::arith; usingnamespacemlir::intrange; static intrange::OverflowFlags convertArithOverflowFlags(arith::IntegerOverflowFlags flags) { … } //===----------------------------------------------------------------------===// // ConstantOp //===----------------------------------------------------------------------===// void arith::ConstantOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // AddIOp //===----------------------------------------------------------------------===// void arith::AddIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // SubIOp //===----------------------------------------------------------------------===// void arith::SubIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // MulIOp //===----------------------------------------------------------------------===// void arith::MulIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // DivUIOp //===----------------------------------------------------------------------===// void arith::DivUIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // DivSIOp //===----------------------------------------------------------------------===// void arith::DivSIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // CeilDivUIOp //===----------------------------------------------------------------------===// void arith::CeilDivUIOp::inferResultRanges( ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // CeilDivSIOp //===----------------------------------------------------------------------===// void arith::CeilDivSIOp::inferResultRanges( ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // FloorDivSIOp //===----------------------------------------------------------------------===// void arith::FloorDivSIOp::inferResultRanges( ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // RemUIOp //===----------------------------------------------------------------------===// void arith::RemUIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // RemSIOp //===----------------------------------------------------------------------===// void arith::RemSIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // AndIOp //===----------------------------------------------------------------------===// void arith::AndIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // OrIOp //===----------------------------------------------------------------------===// void arith::OrIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // XOrIOp //===----------------------------------------------------------------------===// void arith::XOrIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // MaxSIOp //===----------------------------------------------------------------------===// void arith::MaxSIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // MaxUIOp //===----------------------------------------------------------------------===// void arith::MaxUIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // MinSIOp //===----------------------------------------------------------------------===// void arith::MinSIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // MinUIOp //===----------------------------------------------------------------------===// void arith::MinUIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // ExtUIOp //===----------------------------------------------------------------------===// void arith::ExtUIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // ExtSIOp //===----------------------------------------------------------------------===// void arith::ExtSIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // TruncIOp //===----------------------------------------------------------------------===// void arith::TruncIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // IndexCastOp //===----------------------------------------------------------------------===// void arith::IndexCastOp::inferResultRanges( ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // IndexCastUIOp //===----------------------------------------------------------------------===// void arith::IndexCastUIOp::inferResultRanges( ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // CmpIOp //===----------------------------------------------------------------------===// void arith::CmpIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // SelectOp //===----------------------------------------------------------------------===// void arith::SelectOp::inferResultRangesFromOptional( ArrayRef<IntegerValueRange> argRanges, SetIntLatticeFn setResultRange) { … } //===----------------------------------------------------------------------===// // ShLIOp //===----------------------------------------------------------------------===// void arith::ShLIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // ShRUIOp //===----------------------------------------------------------------------===// void arith::ShRUIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … } //===----------------------------------------------------------------------===// // ShRSIOp //===----------------------------------------------------------------------===// void arith::ShRSIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges, SetIntRangeFn setResultRange) { … }