cornell-zhang/hcl-dialect

[Op] Support negative loop step

Closed this issue · 0 comments

MLIR does not allow to pass in a negative step in affine.for, making the following code invalid.

module {
  func @top(%arg0: memref<10xi32>) attributes {extra_itypes = "s", extra_otypes = ""} {
    %0 = hcl.create_stage_handle "" : !hcl.StageHandle
    %1 = hcl.create_loop_handle "loop_0" : !hcl.LoopHandle
    affine.for %arg1 = 9 to -1 step -1 {
      %2 = arith.index_cast %arg1 : index to i32
      affine.store %2, %arg0[%arg1] {to = "compute_0"} : memref<10xi32>
    } {loop_name = "loop_0"}
    return
  }
}

loc("-":3:37): error: custom op 'affine.for' expected step to be representable as a positive signed integer

We need to find a way to support negative steps, either using scf.for or canonicalizing the loop.