[llvm] [IR] Add new Range attribute using new ConstantRange Attribute type (PR #83171)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 6 09:17:24 PST 2024
================
@@ -2997,6 +3000,51 @@ bool LLParser::parseRequiredTypeAttr(AttrBuilder &B, lltok::Kind AttrToken,
return false;
}
+/// parseRangeAttr
+/// ::= range(<ty> <n>,<n>)
+bool LLParser::parseRangeAttr(AttrBuilder &B) {
+ Lex.Lex();
+
+ APInt Lower;
+ APInt Upper;
+ Type *Ty = nullptr;
+ LocTy TyLoc;
+
+ auto ParseAPSInt = [&](llvm::TypeSize BitWidth, APInt &Val) {
+ if (Lex.getKind() != lltok::APSInt)
+ return tokError("expected integer");
+ if (Lex.getAPSIntVal().getBitWidth() > BitWidth)
+ return tokError("integer is to large for the BitWidth");
+ Val = Lex.getAPSIntVal().extend(BitWidth);
+ Lex.Lex();
+ return false;
+ };
+
+ if (!EatIfPresent(lltok::lparen))
+ return tokError("expected '('");
+ if (parseType(Ty, TyLoc))
+ return true;
+ if (!Ty->isIntegerTy())
+ return error(TyLoc, "The range must have integer type!");
+
+ auto BitWidth = Ty->getPrimitiveSizeInBits();
+
+ if (ParseAPSInt(BitWidth, Lower))
+ return true;
+ if (!EatIfPresent(lltok::comma))
+ return tokError("expected ','");
+ if (ParseAPSInt(BitWidth, Upper))
+ return true;
+ if (Lower == Upper)
+ return tokError("The range should not represent the full or empty set!");
----------------
nikic wrote:
It believe the convention for the IR parser is not to capitalize error messages.
https://github.com/llvm/llvm-project/pull/83171
More information about the llvm-commits
mailing list