return BoolAttr::get(type.getContext(), value.getBoolValue());
return $_get(type.getContext(), type, value);
}]>,
+ AttrBuilder<(ins "const APSInt &":$value), [{
+ auto signedness = value.isSigned() ?
+ IntegerType::Signed : IntegerType::Unsigned;
+ auto type = IntegerType::get($_ctxt, value.getBitWidth(), signedness);
+ return $_get(type.getContext(), type, value);
+ }]>,
AttrBuilderWithInferredContext<(ins "Type":$type, "int64_t":$value), [{
// `index` has a defined internal storage width.
if (type.isIndex()) {
/// an unsigned integer.
uint64_t getUInt() const;
+ /// Return the value as an APSInt which carries the signed from the type of
+ /// the attribute. This traps on signless integers types!
+ APSInt getAPSInt() const;
+
private:
/// Return a boolean attribute. This is a special variant of the `get`
/// method that is used by the MLIRContext to cache the boolean IntegerAttr
// Other common classes.
class APInt;
+class APSInt;
class APFloat;
template <typename Fn> class function_ref;
template <typename IteratorT> class iterator_range;
// Other common classes.
using llvm::APFloat;
using llvm::APInt;
+using llvm::APSInt;
template <typename Fn> using function_ref = llvm::function_ref<Fn>;
using llvm::iterator_range;
using llvm::raw_ostream;
return getValue().getZExtValue();
}
+/// Return the value as an APSInt which carries the signed from the type of
+/// the attribute. This traps on signless integers types!
+APSInt IntegerAttr::getAPSInt() const {
+ assert(!getType().isSignlessInteger() &&
+ "Signless integers don't carry a sign for APSInt");
+ return APSInt(getValue(), getType().isUnsignedInteger());
+}
+
LogicalResult IntegerAttr::verify(function_ref<InFlightDiagnostic()> emitError,
Type type, APInt value) {
if (IntegerType integerType = type.dyn_cast<IntegerType>()) {