brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · c623891 Raw
94 lines · plain
1// RUN: mlir-opt -verify-diagnostics -ownership-based-buffer-deallocation -split-input-file %s2 3 4// Test Case: explicit control-flow loop with a dynamically allocated buffer.5// The BufferDeallocation transformation should fail on this explicit6// control-flow loop since they are not supported.7 8// expected-error@+1 {{Only structured control-flow loops are supported}}9func.func @loop_dynalloc(10  %arg0 : i32,11  %arg1 : i32,12  %arg2: memref<?xf32>,13  %arg3: memref<?xf32>) {14  %const0 = arith.constant 0 : i3215  cf.br ^loopHeader(%const0, %arg2 : i32, memref<?xf32>)16 17^loopHeader(%i : i32, %buff : memref<?xf32>):18  %lessThan = arith.cmpi slt, %i, %arg1 : i3219  cf.cond_br %lessThan,20    ^loopBody(%i, %buff : i32, memref<?xf32>),21    ^exit(%buff : memref<?xf32>)22 23^loopBody(%val : i32, %buff2: memref<?xf32>):24  %const1 = arith.constant 1 : i3225  %inc = arith.addi %val, %const1 : i3226  %size = arith.index_cast %inc : i32 to index27  %alloc1 = memref.alloc(%size) : memref<?xf32>28  cf.br ^loopHeader(%inc, %alloc1 : i32, memref<?xf32>)29 30^exit(%buff3 : memref<?xf32>):31  test.copy(%buff3, %arg3) : (memref<?xf32>, memref<?xf32>)32  return33}34 35// -----36 37// Test Case: explicit control-flow loop with a dynamically allocated buffer.38// The BufferDeallocation transformation should fail on this explicit39// control-flow loop since they are not supported.40 41// expected-error@+1 {{Only structured control-flow loops are supported}}42func.func @do_loop_alloc(43  %arg0 : i32,44  %arg1 : i32,45  %arg2: memref<2xf32>,46  %arg3: memref<2xf32>) {47  %const0 = arith.constant 0 : i3248  cf.br ^loopBody(%const0, %arg2 : i32, memref<2xf32>)49 50^loopBody(%val : i32, %buff2: memref<2xf32>):51  %const1 = arith.constant 1 : i3252  %inc = arith.addi %val, %const1 : i3253  %alloc1 = memref.alloc() : memref<2xf32>54  cf.br ^loopHeader(%inc, %alloc1 : i32, memref<2xf32>)55 56^loopHeader(%i : i32, %buff : memref<2xf32>):57  %lessThan = arith.cmpi slt, %i, %arg1 : i3258  cf.cond_br %lessThan,59    ^loopBody(%i, %buff : i32, memref<2xf32>),60    ^exit(%buff : memref<2xf32>)61 62^exit(%buff3 : memref<2xf32>):63  test.copy(%buff3, %arg3) : (memref<2xf32>, memref<2xf32>)64  return65}66 67// -----68 69func.func @free_effect() {70  %alloc = memref.alloc() : memref<2xi32>71  // expected-error @below {{memory free side-effect on MemRef value not supported!}}72  %new_alloc = memref.realloc %alloc : memref<2xi32> to memref<4xi32>73  return74}75 76// -----77 78func.func @free_effect() {79  %alloc = memref.alloc() : memref<2xi32>80  // expected-error @below {{memory free side-effect on MemRef value not supported!}}81  memref.dealloc %alloc : memref<2xi32>82  return83}84 85// -----86 87func.func @free_effect() {88  %true = arith.constant true89  %alloc = memref.alloc() : memref<2xi32>90  // expected-error @below {{No deallocation operations must be present when running this pass!}}91  bufferization.dealloc (%alloc : memref<2xi32>) if (%true)92  return93}94