mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-24 04:26:07 +00:00
[mlir] Don't assert when simplifying certain AffineExpr
s (#78855)
Currently, `simplifyMul()` asserts that either `lhs` or `rhs` is symbolic or constant. This method is called by the overloaded `*` operator for `AffineExpr`s which leads to a crash when building a multiplication expression where neither operand is symbolic or constant. This patch returns a `nullptr` from `simplifyMul()` to signal that the expression could not be simplified instead. Fix https://github.com/llvm/llvm-project/issues/75770
This commit is contained in:
parent
5e379b63fc
commit
a4b23638d2
@ -774,7 +774,8 @@ static AffineExpr simplifyMul(AffineExpr lhs, AffineExpr rhs) {
|
||||
return getAffineConstantExpr(lhsConst.getValue() * rhsConst.getValue(),
|
||||
lhs.getContext());
|
||||
|
||||
assert(lhs.isSymbolicOrConstant() || rhs.isSymbolicOrConstant());
|
||||
if (!lhs.isSymbolicOrConstant() && !rhs.isSymbolicOrConstant())
|
||||
return nullptr;
|
||||
|
||||
// Canonicalize the mul expression so that the constant/symbolic term is the
|
||||
// RHS. If both the lhs and rhs are symbolic, swap them if the lhs is a
|
||||
|
32
mlir/unittests/IR/AffineExprTest.cpp
Normal file
32
mlir/unittests/IR/AffineExprTest.cpp
Normal file
@ -0,0 +1,32 @@
|
||||
//===- AffineExprTest.cpp - unit tests for affine expression API ----------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "mlir/IR/AffineExpr.h"
|
||||
#include "mlir/IR/Builders.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
using namespace mlir;
|
||||
|
||||
// Test creating AffineExprs using the overloaded binary operators.
|
||||
TEST(AffineExprTest, constructFromBinaryOperators) {
|
||||
MLIRContext ctx;
|
||||
OpBuilder b(&ctx);
|
||||
|
||||
auto d0 = b.getAffineDimExpr(0);
|
||||
auto d1 = b.getAffineDimExpr(1);
|
||||
|
||||
auto sum = d0 + d1;
|
||||
auto difference = d0 - d1;
|
||||
auto product = d0 * d1;
|
||||
auto remainder = d0 % d1;
|
||||
|
||||
ASSERT_EQ(sum.getKind(), AffineExprKind::Add);
|
||||
ASSERT_EQ(difference.getKind(), AffineExprKind::Add);
|
||||
ASSERT_EQ(product.getKind(), AffineExprKind::Mul);
|
||||
ASSERT_EQ(remainder.getKind(), AffineExprKind::Mod);
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
add_mlir_unittest(MLIRIRTests
|
||||
AdaptorTest.cpp
|
||||
AffineExprTest.cpp
|
||||
AffineMapTest.cpp
|
||||
AttributeTest.cpp
|
||||
DialectTest.cpp
|
||||
|
Loading…
x
Reference in New Issue
Block a user