Skip to content

[MLIR] Inconsistent output with -convert-arith-to-llvm #154259

@sweead

Description

@sweead

test commit: 98e8f01

Description:

Since the shift amount is 0, the tosa.arithmetic_right_shift operation does not change the value. However, when using the -convert-arith-to-llvm pass, I am encountering inconsistent results.

Steps to Reproduce:

Minimal MLIR program (test.mlir):

module {
  func.func private @printMemrefI64(tensor<*xi64>)
  func.func @main() {
    %cst0 = "tosa.const"() {values = dense<125> : tensor<i64>} : () -> tensor<i64>
    %cst1 = "tosa.const"() {values = dense<0> : tensor<i64>} : () -> tensor<i64>  // Modified to ensure a non-negative shift amount
    %2 = tosa.arithmetic_right_shift %cst0, %cst1 {round = true} : (tensor<i64>, tensor<i64>) -> tensor<i64>
    %cast = tensor.cast %2 : tensor<i64> to tensor<*xi64>
    call @printMemrefI64(%cast) : (tensor<*xi64>) -> ()
    return
  }
}

1. Without -convert-arith-to-llvm:

Command:

/home/workdir/llvm-project/build/bin/mlir-opt test.mlir -pass-pipeline="builtin.module(func.func(tosa-to-linalg-named,tosa-to-linalg))" |\
/home/workdir/llvm-project-latest/build/bin/mlir-opt -linalg-fuse-elementwise-ops  -one-shot-bufferize="bufferize-function-boundaries=1"   -convert-linalg-to-loops  -convert-scf-to-cf  -gpu-to-llvm | \
/home/workdir/llvm-project/build/bin/mlir-runner -e main -entry-point-result=void -shared-libs=/home/workdir/llvm-project/build/lib/libmlir_runner_utils.so

Output:

[125]

2. With -convert-arith-to-llvm:

/home/workdir/llvm-project/build/bin/mlir-opt test.mlir -pass-pipeline="builtin.module(func.func(tosa-to-linalg-named,tosa-to-linalg))" |\
/home/workdir/llvm-project-latest/build/bin/mlir-opt -convert-arith-to-llvm -linalg-fuse-elementwise-ops  -one-shot-bufferize="bufferize-function-boundaries=1"   -convert-linalg-to-loops  -convert-scf-to-cf  -gpu-to-llvm | \
/home/workdir/llvm-project/build/bin/mlir-runner -e main -entry-point-result=void -shared-libs=/home/workdir/llvm-project/build/lib/libmlir_runner_utils.so

Output:

The results are inconsistent. Possible output include:

[94195214772498]
[0]
[10]

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions