| // RUN: mlir-opt %s -pass-pipeline='builtin.module(func.func(test-affine-reify-value-bounds))' \ | |
| // RUN: -verify-diagnostics -split-input-file | |
| // Note: unstructured control flow (cf dialect) is not yet supported by the | |
| // ValueBoundsOpInterface. Block arguments from non-entry blocks cannot have | |
| // their bounds computed. The tests below verify that the infrastructure does | |
| // not crash on such inputs and fails gracefully instead. | |
| // See: https://github.com/llvm/llvm-project/issues/119861 | |
| // Regression test: ValueBoundsConstraintSet must not crash when asked to | |
| // reify a bound for a non-entry block argument produced by unstructured | |
| // control flow. | |
| func.func @no_crash_non_entry_block_arg(%n: index) -> index { | |
| %c0 = arith.constant 0 : index | |
| cf.br ^bb1(%c0 : index) | |
| ^bb1(%i: index): | |
| // expected-error@+1 {{'test.reify_bound' op could not reify bound}} | |
| %bound = "test.reify_bound"(%i) {type = "UB"} : (index) -> index | |
| "test.some_use"(%bound) : (index) -> () | |
| %cond = arith.cmpi slt, %i, %n : index | |
| %next = arith.addi %i, %c0 : index | |
| cf.cond_br %cond, ^bb1(%next : index), ^bb2 | |
| ^bb2: | |
| return %i : index | |
| } |