[llvm] [AMDGPU] MCExpr printing helper with KnownBits support (PR #95951)
Janek van Oirschot via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 13 11:08:09 PDT 2024
================
@@ -303,3 +305,360 @@ const AMDGPUMCExpr *AMDGPUMCExpr::createOccupancy(unsigned InitOcc,
CreateExpr(InitOcc), NumSGPRs, NumVGPRs},
Ctx);
}
+
+static KnownBits fromOptionalToKnownBits(std::optional<bool> CompareResult) {
+ const unsigned BitWidth = 64;
+ const APInt True(BitWidth, 1, /*isSigned=*/false);
+ const APInt False(BitWidth, 0, /*isSigned=*/false);
+ if (CompareResult) {
+ return *CompareResult ? KnownBits::makeConstant(True)
+ : KnownBits::makeConstant(False);
+ }
+
+ KnownBits UnknownBool(/*BitWidth=*/1);
+ return UnknownBool.zext(BitWidth);
+}
+
+using KnownBitsMap = std::unordered_map<const MCExpr *, KnownBits>;
+
+void KnownBitsMapHelper(const MCExpr *Expr, KnownBitsMap &KBM, unsigned depth) {
+ const unsigned BitWidth = 64;
+ const APInt False(BitWidth, 0, /*isSigned=*/false);
+
+ int64_t Val;
+ if (Expr->evaluateAsAbsolute(Val)) {
+ APInt APValue(BitWidth, Val, /*isSigned=*/true);
+ KBM[Expr] = KnownBits::makeConstant(APValue);
+ return;
+ }
+
+ if (depth == 0) {
+ KBM[Expr] = KnownBits(BitWidth);
+ return;
+ }
+
+ depth--;
+
+ switch (Expr->getKind()) {
+ case MCExpr::ExprKind::Binary: {
----------------
JanekvO wrote:
I did this for the more involved `knownBitsMapHelper` cases but haven't done so for `TryFoldHelper` as they weren't as lengthy despite the nested cases. Do let me know if you'd prefer to have those in separated helper functions as well, though.
https://github.com/llvm/llvm-project/pull/95951
More information about the llvm-commits
mailing list