-
Notifications
You must be signed in to change notification settings - Fork 14.9k
[mlir][Arith] arith.select doesn't need to be emulated for small floats #161707
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
arith.select isn't an arithmetic operation in the sense of things like addf or mulf, which the emulate-unsupported-floats rewrites using extf and truncf. This patch adds select as a legal operation to prevent a pointless conversion aronud conditional moves. Fixes iree-org/iree#22181
@llvm/pr-subscribers-mlir-arith @llvm/pr-subscribers-mlir Author: Krzysztof Drewniak (krzysz00) Changesarith.select isn't an arithmetic operation in the sense of things like addf or mulf, which the emulate-unsupported-floats rewrites using extf and truncf. This patch adds select as a legal operation to prevent a pointless conversion aronud conditional moves. Fixes iree-org/iree#22181 Full diff: https://github.com/llvm/llvm-project/pull/161707.diff 2 Files Affected:
diff --git a/mlir/lib/Dialect/Arith/Transforms/EmulateUnsupportedFloats.cpp b/mlir/lib/Dialect/Arith/Transforms/EmulateUnsupportedFloats.cpp
index 7626d356a37f2..c64e10f534f8e 100644
--- a/mlir/lib/Dialect/Arith/Transforms/EmulateUnsupportedFloats.cpp
+++ b/mlir/lib/Dialect/Arith/Transforms/EmulateUnsupportedFloats.cpp
@@ -123,7 +123,8 @@ void mlir::arith::populateEmulateUnsupportedFloatsLegality(
vector::OuterProductOp, vector::ScanOp>(
[&](Operation *op) { return converter.isLegal(op); });
target.addLegalOp<arith::BitcastOp, arith::ExtFOp, arith::TruncFOp,
- arith::ConstantOp, vector::SplatOp, vector::BroadcastOp>();
+ arith::ConstantOp, arith::SelectOp, vector::SplatOp,
+ vector::BroadcastOp>();
}
void EmulateUnsupportedFloatsPass::runOnOperation() {
diff --git a/mlir/test/Dialect/Arith/emulate-unsupported-floats.mlir b/mlir/test/Dialect/Arith/emulate-unsupported-floats.mlir
index 99790cc45d490..fcd004ac554aa 100644
--- a/mlir/test/Dialect/Arith/emulate-unsupported-floats.mlir
+++ b/mlir/test/Dialect/Arith/emulate-unsupported-floats.mlir
@@ -85,3 +85,14 @@ func.func @no_expansion(%x: f32) -> f32 {
%y = arith.addf %x, %c : f32
func.return %y : f32
}
+
+// -----
+
+func.func @no_promote_select(%c: i1, %x: bf16, %y: bf16) -> bf16 {
+// CHECK-LABEL: @no_promote_select
+// CHECK-SAME: (%[[C:.+]]: i1, %[[X:.+]]: bf16, %[[Y:.+]]: bf16)
+// CHECK: %[[Z:.+]] = arith.select %[[C]], %[[X]], %[[Y]] : bf16
+// CHECK: return %[[Z]]
+ %z = arith.select %c, %x, %y : bf16
+ func.return %z : bf16
+}
|
…ts (llvm#161707) arith.select isn't an arithmetic operation in the sense of things like addf or mulf, which the emulate-unsupported-floats rewrites using extf and truncf. This patch adds select as a legal operation to prevent a pointless conversion aronud conditional moves. Fixes iree-org/iree#22181
arith.select isn't an arithmetic operation in the sense of things like addf or mulf, which the emulate-unsupported-floats rewrites using extf and truncf.
This patch adds select as a legal operation to prevent a pointless conversion aronud conditional moves.
Fixes iree-org/iree#22181