This commit adds a new hook Pass `bool canScheduleOn(RegisteredOperationName)` that indicates if the given pass can be scheduled on operations of the given type. This makes it easier to define constraints on generic passes without a) adding conditional checks to the beginning of the `runOnOperation`, or b) defining a new pass type that forwards from `runOnOperation` (after checking the invariants) to a new hook. This new hook is used to implement an `InterfacePass` pass class, that represents a generic pass that runs on operations of the given interface type. The PassManager will also verify that passes added to a pass manager can actually be scheduled on that pass manager, meaning that we will properly error when an Interface is scheduled on an operation that doesn't actually implement that interface. Differential Revision: https://reviews.llvm.org/D120791
10 lines
313 B
MLIR
10 lines
313 B
MLIR
// RUN: not mlir-opt %s -pass-pipeline='test-interface-pass' 2>&1 | FileCheck %s
|
|
|
|
// Test that we emit an error when an interface pass is added to a pass manager it can't be scheduled on.
|
|
|
|
// CHECK: unable to schedule pass '{{.*}}' on a PassManager intended to run on 'builtin.module'!
|
|
|
|
func @main() {
|
|
return
|
|
}
|