Files
clang-p2996/mlir/unittests/IR/AffineExprTest.cpp
Felix Schneider a4b23638d2 [mlir] Don't assert when simplifying certain AffineExprs (#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
2024-03-19 10:43:02 +01:00

33 lines
1.0 KiB
C++

//===- 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);
}