[Mlir-commits] [mlir] [MLIR][LLVM] Fix #llvm.constant_range parsing (PR #123009)
Keyi Zhang
llvmlistbot at llvm.org
Thu Jan 16 08:46:19 PST 2025
https://github.com/Kuree updated https://github.com/llvm/llvm-project/pull/123009
>From b96d1ac3c80e3574e893d826d3b476adb357c325 Mon Sep 17 00:00:00 2001
From: Keyi Zhang <keyi at cs.stanford.edu>
Date: Tue, 14 Jan 2025 20:22:37 -0800
Subject: [PATCH] [MLIR][LLVM] Fix #llvm.constant_range parsing
---
mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp | 8 +++-----
mlir/test/Dialect/LLVMIR/func.mlir | 6 ++++++
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp
index ff1636bc121b64..e4f9d6f9874015 100644
--- a/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp
+++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp
@@ -270,11 +270,9 @@ Attribute ConstantRangeAttr::parse(AsmParser &parser, Type odsType) {
if (parser.parseInteger(lower) || parser.parseComma() ||
parser.parseInteger(upper) || parser.parseGreater())
return Attribute{};
- // For some reason, 0 is always parsed as 64-bits, fix that if needed.
- if (lower.isZero())
- lower = lower.sextOrTrunc(bitWidth);
- if (upper.isZero())
- upper = upper.sextOrTrunc(bitWidth);
+ // Non-positive numbers may use more bits than `bitWidth`
+ lower = lower.sextOrTrunc(bitWidth);
+ upper = upper.sextOrTrunc(bitWidth);
return parser.getChecked<ConstantRangeAttr>(loc, parser.getContext(), lower,
upper);
}
diff --git a/mlir/test/Dialect/LLVMIR/func.mlir b/mlir/test/Dialect/LLVMIR/func.mlir
index e2a444c1faaba1..74dd862ce8fb26 100644
--- a/mlir/test/Dialect/LLVMIR/func.mlir
+++ b/mlir/test/Dialect/LLVMIR/func.mlir
@@ -479,3 +479,9 @@ llvm.func @intel_reqd_sub_group_size_hint() attributes {llvm.intel_reqd_sub_grou
// CHECK-SAME: llvm.workgroup_attribution = #llvm.mlir.workgroup_attribution<512 : i64, i32>
// CHECK-SAME: llvm.workgroup_attribution = #llvm.mlir.workgroup_attribution<128 : i64, !llvm.struct<(i32, i64, f32)>
llvm.func @workgroup_attribution(%arg0: !llvm.ptr {llvm.workgroup_attribution = #llvm.mlir.workgroup_attribution<512 : i64, i32>}, %arg1: !llvm.ptr {llvm.workgroup_attribution = #llvm.mlir.workgroup_attribution<128 : i64, !llvm.struct<(i32, i64, f32)>>})
+
+// -----
+
+// CHECK: @constant_range_negative
+// CHECK-SAME: llvm.range = #llvm.constant_range<i32, 0, -2147483648>
+llvm.func @constant_range_negative() -> (i32 {llvm.range = #llvm.constant_range<i32, 0, -2147483648>})
More information about the Mlir-commits
mailing list