Files
clang-p2996/mlir/test/Transforms/canonicalize-debuginfo.mlir
Billy Zhu 34a65980d7 [MLIR] Erase location of folded constants (#75415)
Follow up to the discussion from #75258, and serves as an alternate
solution for #74670.

Set the location to Unknown for deduplicated / moved / materialized
constants by OperationFolder. This makes sure that the folded constants
don't end up with an arbitrary location of one of the original ops that
became it, and that hoisted ops don't confuse the stepping order.
2023-12-21 09:54:48 -08:00

47 lines
1.8 KiB
MLIR

// RUN: mlir-opt %s -pass-pipeline='builtin.module(func.func(canonicalize{test-convergence}))' -split-input-file -mlir-print-debuginfo | FileCheck %s
// CHECK-LABEL: func @merge_constants
func.func @merge_constants() -> (index, index, index, index) {
// CHECK-NEXT: arith.constant 42 : index loc(#[[UnknownLoc:.*]])
%0 = arith.constant 42 : index loc("merge_constants":0:0)
%1 = arith.constant 42 : index loc("merge_constants":1:0)
%2 = arith.constant 42 : index loc("merge_constants":2:0)
%3 = arith.constant 42 : index loc("merge_constants":2:0)
return %0, %1, %2, %3 : index, index, index, index
}
// CHECK: #[[UnknownLoc]] = loc(unknown)
// -----
// CHECK-LABEL: func @simple_hoist
func.func @simple_hoist(%arg0: memref<8xi32>) -> i32 {
// CHECK: arith.constant 88 : i32 loc(#[[UnknownLoc:.*]])
// CHECK: arith.constant 42 : i32 loc(#[[ConstLoc0:.*]])
// CHECK: arith.constant 0 : index loc(#[[ConstLoc1:.*]])
%0 = arith.constant 42 : i32 loc("simple_hoist":0:0)
%1 = arith.constant 0 : index loc("simple_hoist":1:0)
memref.store %0, %arg0[%1] : memref<8xi32>
%2 = arith.constant 88 : i32 loc("simple_hoist":2:0)
return %2 : i32
}
// CHECK-DAG: #[[UnknownLoc]] = loc(unknown)
// CHECK-DAG: #[[ConstLoc0]] = loc("simple_hoist":0:0)
// CHECK-DAG: #[[ConstLoc1]] = loc("simple_hoist":1:0)
// -----
// CHECK-LABEL: func @hoist_and_merge
func.func @hoist_and_merge(%arg0: memref<8xi32>) {
// CHECK-NEXT: arith.constant 42 : i32 loc(#[[UnknownLoc:.*]])
affine.for %arg1 = 0 to 8 {
%0 = arith.constant 42 : i32 loc("hoist_and_merge":0:0)
%1 = arith.constant 42 : i32 loc("hoist_and_merge":1:0)
memref.store %0, %arg0[%arg1] : memref<8xi32>
memref.store %1, %arg0[%arg1] : memref<8xi32>
}
return
} loc("hoist_and_merge":2:0)
// CHECK: #[[UnknownLoc]] = loc(unknown)