llvm-project/mlir/test/Transforms/inlining-repeated-use.mlir
Alex Zinenko 2f672e2ffa [mlir] Don't inline calls from dead SCCs
During iterative inlining of the functions in a multi-step call chain, the
inliner could add the same call operation several times to the worklist, which
led to use-after-free when this op was considered more than once.

Closes #52887.

Reviewed By: wsmoses

Differential Revision: https://reviews.llvm.org/D116820
2022-01-10 12:07:14 +01:00

49 lines
779 B
MLIR

// RUN: mlir-opt -inline %s | FileCheck %s
// This could crash the inliner, make sure it does not.
func @A() {
call @B() { inA } : () -> ()
return
}
func @B() {
call @E() : () -> ()
return
}
func @C() {
call @D() : () -> ()
return
}
func private @D() {
call @B() { inD } : () -> ()
return
}
func @E() {
call @fabsf() : () -> ()
return
}
func private @fabsf()
// CHECK: func @A() {
// CHECK: call @fabsf() : () -> ()
// CHECK: return
// CHECK: }
// CHECK: func @B() {
// CHECK: call @fabsf() : () -> ()
// CHECK: return
// CHECK: }
// CHECK: func @C() {
// CHECK: call @fabsf() : () -> ()
// CHECK: return
// CHECK: }
// CHECK: func @E() {
// CHECK: call @fabsf() : () -> ()
// CHECK: return
// CHECK: }
// CHECK: func private @fabsf()