1d80c271cSMogball// RUN: mlir-opt -test-last-modified %s 2>&1 | FileCheck %s 2d80c271cSMogball 3d80c271cSMogball// CHECK-LABEL: test_tag: test_simple_mod 4d80c271cSMogball// CHECK: operand #0 5d80c271cSMogball// CHECK-NEXT: - a 6d80c271cSMogball// CHECK: operand #1 7d80c271cSMogball// CHECK-NEXT: - b 8d80c271cSMogballfunc.func @test_simple_mod(%arg0: memref<i32>, %arg1: memref<i32>) -> (memref<i32>, memref<i32>) { 9d80c271cSMogball %c0 = arith.constant 0 : i32 10d80c271cSMogball %c1 = arith.constant 1 : i32 11d80c271cSMogball memref.store %c0, %arg0[] {tag_name = "a"} : memref<i32> 12d80c271cSMogball memref.store %c1, %arg1[] {tag_name = "b"} : memref<i32> 13d80c271cSMogball return {tag = "test_simple_mod"} %arg0, %arg1 : memref<i32>, memref<i32> 14d80c271cSMogball} 15d80c271cSMogball 16d80c271cSMogball// CHECK-LABEL: test_tag: test_simple_mod_overwrite_a 17d80c271cSMogball// CHECK: operand #1 18d80c271cSMogball// CHECK-NEXT: - a 19d80c271cSMogball// CHECK-LABEL: test_tag: test_simple_mod_overwrite_b 20d80c271cSMogball// CHECK: operand #0 21d80c271cSMogball// CHECK-NEXT: - b 22d80c271cSMogballfunc.func @test_simple_mod_overwrite(%arg0: memref<i32>) -> memref<i32> { 23d80c271cSMogball %c0 = arith.constant 0 : i32 24d80c271cSMogball memref.store %c0, %arg0[] {tag = "test_simple_mod_overwrite_a", tag_name = "a"} : memref<i32> 25d80c271cSMogball %c1 = arith.constant 1 : i32 26d80c271cSMogball memref.store %c1, %arg0[] {tag_name = "b"} : memref<i32> 27d80c271cSMogball return {tag = "test_simple_mod_overwrite_b"} %arg0 : memref<i32> 28d80c271cSMogball} 29d80c271cSMogball 30d80c271cSMogball// CHECK-LABEL: test_tag: test_mod_control_flow 31d80c271cSMogball// CHECK: operand #0 32d80c271cSMogball// CHECK-NEXT: - b 33d80c271cSMogball// CHECK-NEXT: - a 34d80c271cSMogballfunc.func @test_mod_control_flow(%cond: i1, %ptr: memref<i32>) -> memref<i32> { 35d80c271cSMogball cf.cond_br %cond, ^a, ^b 36d80c271cSMogball 37d80c271cSMogball^a: 38d80c271cSMogball %c0 = arith.constant 0 : i32 39d80c271cSMogball memref.store %c0, %ptr[] {tag_name = "a"} : memref<i32> 40d80c271cSMogball cf.br ^c 41d80c271cSMogball 42d80c271cSMogball^b: 43d80c271cSMogball %c1 = arith.constant 1 : i32 44d80c271cSMogball memref.store %c1, %ptr[] {tag_name = "b"} : memref<i32> 45d80c271cSMogball cf.br ^c 46d80c271cSMogball 47d80c271cSMogball^c: 48d80c271cSMogball return {tag = "test_mod_control_flow"} %ptr : memref<i32> 49d80c271cSMogball} 50d80c271cSMogball 51d80c271cSMogball// CHECK-LABEL: test_tag: test_mod_dead_branch 52d80c271cSMogball// CHECK: operand #0 53d80c271cSMogball// CHECK-NEXT: - a 54d80c271cSMogballfunc.func @test_mod_dead_branch(%arg: i32, %ptr: memref<i32>) -> memref<i32> { 55d80c271cSMogball %0 = arith.subi %arg, %arg : i32 56d80c271cSMogball %1 = arith.constant -1 : i32 57d80c271cSMogball %2 = arith.cmpi sgt, %0, %1 : i32 58d80c271cSMogball cf.cond_br %2, ^a, ^b 59d80c271cSMogball 60d80c271cSMogball^a: 61d80c271cSMogball %c0 = arith.constant 0 : i32 62d80c271cSMogball memref.store %c0, %ptr[] {tag_name = "a"} : memref<i32> 63d80c271cSMogball cf.br ^c 64d80c271cSMogball 65d80c271cSMogball^b: 66d80c271cSMogball %c1 = arith.constant 1 : i32 67d80c271cSMogball memref.store %c1, %ptr[] {tag_name = "b"} : memref<i32> 68d80c271cSMogball cf.br ^c 69d80c271cSMogball 70d80c271cSMogball^c: 71d80c271cSMogball return {tag = "test_mod_dead_branch"} %ptr : memref<i32> 72d80c271cSMogball} 73d80c271cSMogball 74d80c271cSMogball// CHECK-LABEL: test_tag: test_mod_region_control_flow 75d80c271cSMogball// CHECK: operand #0 76d80c271cSMogball// CHECK-NEXT: then 77d80c271cSMogball// CHECK-NEXT: else 78d80c271cSMogballfunc.func @test_mod_region_control_flow(%cond: i1, %ptr: memref<i32>) -> memref<i32> { 79d80c271cSMogball scf.if %cond { 80d80c271cSMogball %c0 = arith.constant 0 : i32 81d80c271cSMogball memref.store %c0, %ptr[] {tag_name = "then"}: memref<i32> 82d80c271cSMogball } else { 83d80c271cSMogball %c1 = arith.constant 1 : i32 84d80c271cSMogball memref.store %c1, %ptr[] {tag_name = "else"} : memref<i32> 85d80c271cSMogball } 86d80c271cSMogball return {tag = "test_mod_region_control_flow"} %ptr : memref<i32> 87d80c271cSMogball} 88d80c271cSMogball 89d80c271cSMogball// CHECK-LABEL: test_tag: test_mod_dead_region 90d80c271cSMogball// CHECK: operand #0 91d80c271cSMogball// CHECK-NEXT: else 92d80c271cSMogballfunc.func @test_mod_dead_region(%ptr: memref<i32>) -> memref<i32> { 93d80c271cSMogball %false = arith.constant false 94d80c271cSMogball scf.if %false { 95d80c271cSMogball %c0 = arith.constant 0 : i32 96d80c271cSMogball memref.store %c0, %ptr[] {tag_name = "then"}: memref<i32> 97d80c271cSMogball } else { 98d80c271cSMogball %c1 = arith.constant 1 : i32 99d80c271cSMogball memref.store %c1, %ptr[] {tag_name = "else"} : memref<i32> 100d80c271cSMogball } 101d80c271cSMogball return {tag = "test_mod_dead_region"} %ptr : memref<i32> 102d80c271cSMogball} 103d80c271cSMogball 104d80c271cSMogball// CHECK-LABEL: test_tag: unknown_memory_effects_a 105d80c271cSMogball// CHECK: operand #1 106d80c271cSMogball// CHECK-NEXT: - a 107d80c271cSMogball// CHECK-LABEL: test_tag: unknown_memory_effects_b 108d80c271cSMogball// CHECK: operand #0 109d80c271cSMogball// CHECK-NEXT: - <unknown> 110d80c271cSMogballfunc.func @unknown_memory_effects(%ptr: memref<i32>) -> memref<i32> { 111d80c271cSMogball %c0 = arith.constant 0 : i32 112d80c271cSMogball memref.store %c0, %ptr[] {tag = "unknown_memory_effects_a", tag_name = "a"} : memref<i32> 113d80c271cSMogball "test.unknown_effects"() : () -> () 114d80c271cSMogball return {tag = "unknown_memory_effects_b"} %ptr : memref<i32> 115d80c271cSMogball} 1165d8813deSAlex Zinenko 1175d8813deSAlex Zinenko// CHECK-LABEL: test_tag: store_with_a_region_before::before: 1185d8813deSAlex Zinenko// CHECK: operand #0 1195d8813deSAlex Zinenko// CHECK: - pre 1205d8813deSAlex Zinenko// CHECK: test_tag: inside_region: 1215d8813deSAlex Zinenko// CHECK: operand #0 1225d8813deSAlex Zinenko// CHECK: - region 1235d8813deSAlex Zinenko// CHECK: test_tag: after: 1245d8813deSAlex Zinenko// CHECK: operand #0 1255d8813deSAlex Zinenko// CHECK: - region 1265d8813deSAlex Zinenko// CHECK: test_tag: return: 1275d8813deSAlex Zinenko// CHECK: operand #0 1285d8813deSAlex Zinenko// CHECK: - post 1295d8813deSAlex Zinenkofunc.func @store_with_a_region_before(%arg0: memref<f32>) -> memref<f32> { 1305d8813deSAlex Zinenko %0 = arith.constant 0.0 : f32 1315d8813deSAlex Zinenko %1 = arith.constant 1.0 : f32 1325d8813deSAlex Zinenko memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32> 1335d8813deSAlex Zinenko memref.load %arg0[] {tag = "store_with_a_region_before::before"} : memref<f32> 1345d8813deSAlex Zinenko test.store_with_a_region %arg0 attributes { tag_name = "region", store_before_region = true } { 1355d8813deSAlex Zinenko memref.load %arg0[] {tag = "inside_region"} : memref<f32> 1365d8813deSAlex Zinenko test.store_with_a_region_terminator 1375d8813deSAlex Zinenko } : memref<f32> 1385d8813deSAlex Zinenko memref.load %arg0[] {tag = "after"} : memref<f32> 1395d8813deSAlex Zinenko memref.store %1, %arg0[] {tag_name = "post"} : memref<f32> 1405d8813deSAlex Zinenko return {tag = "return"} %arg0 : memref<f32> 1415d8813deSAlex Zinenko} 1425d8813deSAlex Zinenko 1435d8813deSAlex Zinenko// CHECK-LABEL: test_tag: store_with_a_region_after::before: 1445d8813deSAlex Zinenko// CHECK: operand #0 1455d8813deSAlex Zinenko// CHECK: - pre 1465d8813deSAlex Zinenko// CHECK: test_tag: inside_region: 1475d8813deSAlex Zinenko// CHECK: operand #0 1485d8813deSAlex Zinenko// CHECK: - pre 1495d8813deSAlex Zinenko// CHECK: test_tag: after: 1505d8813deSAlex Zinenko// CHECK: operand #0 1515d8813deSAlex Zinenko// CHECK: - region 1525d8813deSAlex Zinenko// CHECK: test_tag: return: 1535d8813deSAlex Zinenko// CHECK: operand #0 1545d8813deSAlex Zinenko// CHECK: - post 1555d8813deSAlex Zinenkofunc.func @store_with_a_region_after(%arg0: memref<f32>) -> memref<f32> { 1565d8813deSAlex Zinenko %0 = arith.constant 0.0 : f32 1575d8813deSAlex Zinenko %1 = arith.constant 1.0 : f32 1585d8813deSAlex Zinenko memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32> 1595d8813deSAlex Zinenko memref.load %arg0[] {tag = "store_with_a_region_after::before"} : memref<f32> 1605d8813deSAlex Zinenko test.store_with_a_region %arg0 attributes { tag_name = "region", store_before_region = false } { 1615d8813deSAlex Zinenko memref.load %arg0[] {tag = "inside_region"} : memref<f32> 1625d8813deSAlex Zinenko test.store_with_a_region_terminator 1635d8813deSAlex Zinenko } : memref<f32> 1645d8813deSAlex Zinenko memref.load %arg0[] {tag = "after"} : memref<f32> 1655d8813deSAlex Zinenko memref.store %1, %arg0[] {tag_name = "post"} : memref<f32> 1665d8813deSAlex Zinenko return {tag = "return"} %arg0 : memref<f32> 1675d8813deSAlex Zinenko} 1685d8813deSAlex Zinenko 1695d8813deSAlex Zinenko// CHECK-LABEL: test_tag: store_with_a_region_before_containing_a_store::before: 1705d8813deSAlex Zinenko// CHECK: operand #0 1715d8813deSAlex Zinenko// CHECK: - pre 1725d8813deSAlex Zinenko// CHECK: test_tag: enter_region: 1735d8813deSAlex Zinenko// CHECK: operand #0 1745d8813deSAlex Zinenko// CHECK: - region 1755d8813deSAlex Zinenko// CHECK: test_tag: exit_region: 1765d8813deSAlex Zinenko// CHECK: operand #0 1775d8813deSAlex Zinenko// CHECK: - inner 1785d8813deSAlex Zinenko// CHECK: test_tag: after: 1795d8813deSAlex Zinenko// CHECK: operand #0 1805d8813deSAlex Zinenko// CHECK: - inner 1815d8813deSAlex Zinenko// CHECK: test_tag: return: 1825d8813deSAlex Zinenko// CHECK: operand #0 1835d8813deSAlex Zinenko// CHECK: - post 1845d8813deSAlex Zinenkofunc.func @store_with_a_region_before_containing_a_store(%arg0: memref<f32>) -> memref<f32> { 1855d8813deSAlex Zinenko %0 = arith.constant 0.0 : f32 1865d8813deSAlex Zinenko %1 = arith.constant 1.0 : f32 1875d8813deSAlex Zinenko memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32> 1885d8813deSAlex Zinenko memref.load %arg0[] {tag = "store_with_a_region_before_containing_a_store::before"} : memref<f32> 1895d8813deSAlex Zinenko test.store_with_a_region %arg0 attributes { tag_name = "region", store_before_region = true } { 1905d8813deSAlex Zinenko memref.load %arg0[] {tag = "enter_region"} : memref<f32> 1915d8813deSAlex Zinenko %2 = arith.constant 2.0 : f32 1925d8813deSAlex Zinenko memref.store %2, %arg0[] {tag_name = "inner"} : memref<f32> 1935d8813deSAlex Zinenko memref.load %arg0[] {tag = "exit_region"} : memref<f32> 1945d8813deSAlex Zinenko test.store_with_a_region_terminator 1955d8813deSAlex Zinenko } : memref<f32> 1965d8813deSAlex Zinenko memref.load %arg0[] {tag = "after"} : memref<f32> 1975d8813deSAlex Zinenko memref.store %1, %arg0[] {tag_name = "post"} : memref<f32> 1985d8813deSAlex Zinenko return {tag = "return"} %arg0 : memref<f32> 1995d8813deSAlex Zinenko} 2005d8813deSAlex Zinenko 2015d8813deSAlex Zinenko// CHECK-LABEL: test_tag: store_with_a_region_after_containing_a_store::before: 2025d8813deSAlex Zinenko// CHECK: operand #0 2035d8813deSAlex Zinenko// CHECK: - pre 2045d8813deSAlex Zinenko// CHECK: test_tag: enter_region: 2055d8813deSAlex Zinenko// CHECK: operand #0 2065d8813deSAlex Zinenko// CHECK: - pre 2075d8813deSAlex Zinenko// CHECK: test_tag: exit_region: 2085d8813deSAlex Zinenko// CHECK: operand #0 2095d8813deSAlex Zinenko// CHECK: - inner 2105d8813deSAlex Zinenko// CHECK: test_tag: after: 2115d8813deSAlex Zinenko// CHECK: operand #0 2125d8813deSAlex Zinenko// CHECK: - region 2135d8813deSAlex Zinenko// CHECK: test_tag: return: 2145d8813deSAlex Zinenko// CHECK: operand #0 2155d8813deSAlex Zinenko// CHECK: - post 2165d8813deSAlex Zinenkofunc.func @store_with_a_region_after_containing_a_store(%arg0: memref<f32>) -> memref<f32> { 2175d8813deSAlex Zinenko %0 = arith.constant 0.0 : f32 2185d8813deSAlex Zinenko %1 = arith.constant 1.0 : f32 2195d8813deSAlex Zinenko memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32> 2205d8813deSAlex Zinenko memref.load %arg0[] {tag = "store_with_a_region_after_containing_a_store::before"} : memref<f32> 2215d8813deSAlex Zinenko test.store_with_a_region %arg0 attributes { tag_name = "region", store_before_region = false } { 2225d8813deSAlex Zinenko memref.load %arg0[] {tag = "enter_region"} : memref<f32> 2235d8813deSAlex Zinenko %2 = arith.constant 2.0 : f32 2245d8813deSAlex Zinenko memref.store %2, %arg0[] {tag_name = "inner"} : memref<f32> 2255d8813deSAlex Zinenko memref.load %arg0[] {tag = "exit_region"} : memref<f32> 2265d8813deSAlex Zinenko test.store_with_a_region_terminator 2275d8813deSAlex Zinenko } : memref<f32> 2285d8813deSAlex Zinenko memref.load %arg0[] {tag = "after"} : memref<f32> 2295d8813deSAlex Zinenko memref.store %1, %arg0[] {tag_name = "post"} : memref<f32> 2305d8813deSAlex Zinenko return {tag = "return"} %arg0 : memref<f32> 2315d8813deSAlex Zinenko} 232*a9d0f5e2Svic 233*a9d0f5e2Svic// CHECK-LABEL: test_tag: store_with_a_loop_region_before::before: 234*a9d0f5e2Svic// CHECK: operand #0 235*a9d0f5e2Svic// CHECK: - pre 236*a9d0f5e2Svic// CHECK: test_tag: inside_region: 237*a9d0f5e2Svic// CHECK: operand #0 238*a9d0f5e2Svic// CHECK: - region 239*a9d0f5e2Svic// CHECK: test_tag: after: 240*a9d0f5e2Svic// CHECK: operand #0 241*a9d0f5e2Svic// CHECK: - region 242*a9d0f5e2Svic// CHECK: test_tag: return: 243*a9d0f5e2Svic// CHECK: operand #0 244*a9d0f5e2Svic// CHECK: - post 245*a9d0f5e2Svicfunc.func @store_with_a_loop_region_before(%arg0: memref<f32>) -> memref<f32> { 246*a9d0f5e2Svic %0 = arith.constant 0.0 : f32 247*a9d0f5e2Svic %1 = arith.constant 1.0 : f32 248*a9d0f5e2Svic memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32> 249*a9d0f5e2Svic memref.load %arg0[] {tag = "store_with_a_loop_region_before::before"} : memref<f32> 250*a9d0f5e2Svic test.store_with_a_loop_region %arg0 attributes { tag_name = "region", store_before_region = true } { 251*a9d0f5e2Svic memref.load %arg0[] {tag = "inside_region"} : memref<f32> 252*a9d0f5e2Svic test.store_with_a_region_terminator 253*a9d0f5e2Svic } : memref<f32> 254*a9d0f5e2Svic memref.load %arg0[] {tag = "after"} : memref<f32> 255*a9d0f5e2Svic memref.store %1, %arg0[] {tag_name = "post"} : memref<f32> 256*a9d0f5e2Svic return {tag = "return"} %arg0 : memref<f32> 257*a9d0f5e2Svic} 258*a9d0f5e2Svic 259*a9d0f5e2Svic// CHECK-LABEL: test_tag: store_with_a_loop_region_after::before: 260*a9d0f5e2Svic// CHECK: operand #0 261*a9d0f5e2Svic// CHECK: - pre 262*a9d0f5e2Svic// CHECK: test_tag: inside_region: 263*a9d0f5e2Svic// CHECK: operand #0 264*a9d0f5e2Svic// CHECK: - pre 265*a9d0f5e2Svic// CHECK: test_tag: after: 266*a9d0f5e2Svic// CHECK: operand #0 267*a9d0f5e2Svic// CHECK: - region 268*a9d0f5e2Svic// CHECK: test_tag: return: 269*a9d0f5e2Svic// CHECK: operand #0 270*a9d0f5e2Svic// CHECK: - post 271*a9d0f5e2Svicfunc.func @store_with_a_loop_region_after(%arg0: memref<f32>) -> memref<f32> { 272*a9d0f5e2Svic %0 = arith.constant 0.0 : f32 273*a9d0f5e2Svic %1 = arith.constant 1.0 : f32 274*a9d0f5e2Svic memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32> 275*a9d0f5e2Svic memref.load %arg0[] {tag = "store_with_a_loop_region_after::before"} : memref<f32> 276*a9d0f5e2Svic test.store_with_a_loop_region %arg0 attributes { tag_name = "region", store_before_region = false } { 277*a9d0f5e2Svic memref.load %arg0[] {tag = "inside_region"} : memref<f32> 278*a9d0f5e2Svic test.store_with_a_region_terminator 279*a9d0f5e2Svic } : memref<f32> 280*a9d0f5e2Svic memref.load %arg0[] {tag = "after"} : memref<f32> 281*a9d0f5e2Svic memref.store %1, %arg0[] {tag_name = "post"} : memref<f32> 282*a9d0f5e2Svic return {tag = "return"} %arg0 : memref<f32> 283*a9d0f5e2Svic} 284*a9d0f5e2Svic 285*a9d0f5e2Svic// CHECK-LABEL: test_tag: store_with_a_loop_region_before_containing_a_store::before: 286*a9d0f5e2Svic// CHECK: operand #0 287*a9d0f5e2Svic// CHECK: - pre 288*a9d0f5e2Svic// CHECK: test_tag: enter_region: 289*a9d0f5e2Svic// CHECK: operand #0 290*a9d0f5e2Svic// CHECK-DAG: - region 291*a9d0f5e2Svic// CHECK-DAG: - inner 292*a9d0f5e2Svic// CHECK: test_tag: exit_region: 293*a9d0f5e2Svic// CHECK: operand #0 294*a9d0f5e2Svic// CHECK: - inner 295*a9d0f5e2Svic// CHECK: test_tag: after: 296*a9d0f5e2Svic// CHECK: operand #0 297*a9d0f5e2Svic// CHECK-DAG: - region 298*a9d0f5e2Svic// CHECK-DAG: - inner 299*a9d0f5e2Svic// CHECK: test_tag: return: 300*a9d0f5e2Svic// CHECK: operand #0 301*a9d0f5e2Svic// CHECK: - post 302*a9d0f5e2Svicfunc.func @store_with_a_loop_region_before_containing_a_store(%arg0: memref<f32>) -> memref<f32> { 303*a9d0f5e2Svic %0 = arith.constant 0.0 : f32 304*a9d0f5e2Svic %1 = arith.constant 1.0 : f32 305*a9d0f5e2Svic memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32> 306*a9d0f5e2Svic memref.load %arg0[] {tag = "store_with_a_loop_region_before_containing_a_store::before"} : memref<f32> 307*a9d0f5e2Svic test.store_with_a_loop_region %arg0 attributes { tag_name = "region", store_before_region = true } { 308*a9d0f5e2Svic memref.load %arg0[] {tag = "enter_region"} : memref<f32> 309*a9d0f5e2Svic %2 = arith.constant 2.0 : f32 310*a9d0f5e2Svic memref.store %2, %arg0[] {tag_name = "inner"} : memref<f32> 311*a9d0f5e2Svic memref.load %arg0[] {tag = "exit_region"} : memref<f32> 312*a9d0f5e2Svic test.store_with_a_region_terminator 313*a9d0f5e2Svic } : memref<f32> 314*a9d0f5e2Svic memref.load %arg0[] {tag = "after"} : memref<f32> 315*a9d0f5e2Svic memref.store %1, %arg0[] {tag_name = "post"} : memref<f32> 316*a9d0f5e2Svic return {tag = "return"} %arg0 : memref<f32> 317*a9d0f5e2Svic} 318*a9d0f5e2Svic 319*a9d0f5e2Svic// CHECK-LABEL: test_tag: store_with_a_loop_region_after_containing_a_store::before: 320*a9d0f5e2Svic// CHECK: operand #0 321*a9d0f5e2Svic// CHECK: - pre 322*a9d0f5e2Svic// CHECK: test_tag: enter_region: 323*a9d0f5e2Svic// CHECK: operand #0 324*a9d0f5e2Svic// CHECK-DAG: - pre 325*a9d0f5e2Svic// CHECK-DAG: - inner 326*a9d0f5e2Svic// CHECK: test_tag: exit_region: 327*a9d0f5e2Svic// CHECK: operand #0 328*a9d0f5e2Svic// CHECK: - inner 329*a9d0f5e2Svic// CHECK: test_tag: after: 330*a9d0f5e2Svic// CHECK: operand #0 331*a9d0f5e2Svic// CHECK: - region 332*a9d0f5e2Svic// CHECK: test_tag: return: 333*a9d0f5e2Svic// CHECK: operand #0 334*a9d0f5e2Svic// CHECK: - post 335*a9d0f5e2Svicfunc.func @store_with_a_loop_region_after_containing_a_store(%arg0: memref<f32>) -> memref<f32> { 336*a9d0f5e2Svic %0 = arith.constant 0.0 : f32 337*a9d0f5e2Svic %1 = arith.constant 1.0 : f32 338*a9d0f5e2Svic memref.store %0, %arg0[] {tag_name = "pre"} : memref<f32> 339*a9d0f5e2Svic memref.load %arg0[] {tag = "store_with_a_loop_region_after_containing_a_store::before"} : memref<f32> 340*a9d0f5e2Svic test.store_with_a_loop_region %arg0 attributes { tag_name = "region", store_before_region = false } { 341*a9d0f5e2Svic memref.load %arg0[] {tag = "enter_region"} : memref<f32> 342*a9d0f5e2Svic %2 = arith.constant 2.0 : f32 343*a9d0f5e2Svic memref.store %2, %arg0[] {tag_name = "inner"} : memref<f32> 344*a9d0f5e2Svic memref.load %arg0[] {tag = "exit_region"} : memref<f32> 345*a9d0f5e2Svic test.store_with_a_region_terminator 346*a9d0f5e2Svic } : memref<f32> 347*a9d0f5e2Svic memref.load %arg0[] {tag = "after"} : memref<f32> 348*a9d0f5e2Svic memref.store %1, %arg0[] {tag_name = "post"} : memref<f32> 349*a9d0f5e2Svic return {tag = "return"} %arg0 : memref<f32> 350*a9d0f5e2Svic} 351