| // RUN: mlir-opt -allow-unregistered-dialect %s -pass-pipeline='builtin.func(canonicalize{top-down=true})' | FileCheck %s --check-prefix=TD |
| // RUN: mlir-opt -allow-unregistered-dialect %s -pass-pipeline='builtin.func(canonicalize)' | FileCheck %s --check-prefix=BU |
| |
| |
| // BU-LABEL: func @default_insertion_position |
| // TD-LABEL: func @default_insertion_position |
| func @default_insertion_position(%cond: i1) { |
| // Constant should be folded into the entry block. |
| |
| // BU: arith.constant 2 |
| // BU-NEXT: scf.if |
| |
| // TD: arith.constant 2 |
| // TD-NEXT: scf.if |
| scf.if %cond { |
| %0 = arith.constant 1 : i32 |
| %2 = arith.addi %0, %0 : i32 |
| "foo.yield"(%2) : (i32) -> () |
| } |
| return |
| } |
| |
| // This shows that we don't pull the constant out of the region because it |
| // wants to be the insertion point for the constant. |
| // BU-LABEL: func @custom_insertion_position |
| // TD-LABEL: func @custom_insertion_position |
| func @custom_insertion_position() { |
| // BU: test.one_region_op |
| // BU-NEXT: arith.constant 2 |
| |
| // TD: test.one_region_op |
| // TD-NEXT: arith.constant 2 |
| "test.one_region_op"() ({ |
| |
| %0 = arith.constant 1 : i32 |
| %2 = arith.addi %0, %0 : i32 |
| "foo.yield"(%2) : (i32) -> () |
| }) : () -> () |
| return |
| } |
| |