diff --git a/lib/Support/CFG.cpp b/lib/Support/CFG.cpp index 09bbd1c81..e05541ef4 100644 --- a/lib/Support/CFG.cpp +++ b/lib/Support/CFG.cpp @@ -694,9 +694,14 @@ static GIIDStatus isGIIDRec( handshake::CmpIOp, handshake::DivSIOp, handshake::DivUIOp, handshake::ExtSIOp, handshake::ExtUIOp, handshake::MulIOp, handshake::OrIOp, handshake::ShLIOp, handshake::ShRUIOp, - handshake::SubIOp, handshake::TruncIOp, handshake::XOrIOp, - handshake::AddFOp, handshake::CmpFOp, handshake::DivFOp, - handshake::MulFOp, handshake::SubFOp>([&](auto) { + handshake::ShRSIOp, handshake::SubIOp, handshake::TruncIOp, + handshake::XOrIOp, handshake::NotIOp, handshake::RemSIOp, + handshake::MaxSIOp, handshake::MaxUIOp, handshake::MinSIOp, + handshake::MinUIOp, handshake::MaximumFOp, + handshake::MinimumFOp, handshake::AddFOp, handshake::CmpFOp, + handshake::DivFOp, handshake::MulFOp, handshake::SubFOp, + handshake::NegFOp, handshake::AbsFOp, handshake::ExtFOp, + handshake::TruncFOp>([&](auto) { // At least one operand must depend on the predecessor return foldGIIDStatusOr(recurse, defOp->getOperands()); }) diff --git a/test/Transforms/handshake-deactivate-mem-dependencies.mlir b/test/Transforms/handshake-deactivate-mem-dependencies.mlir index 6bb191f34..a54ef379d 100644 --- a/test/Transforms/handshake-deactivate-mem-dependencies.mlir +++ b/test/Transforms/handshake-deactivate-mem-dependencies.mlir @@ -1,4 +1,4 @@ -// RUN: dynamatic-opt %s --handshake-deactivate-mem-dependencies | FileCheck %s +// RUN: dynamatic-opt %s --handshake-deactivate-mem-dependencies --split-input-file | FileCheck %s // CHECK-LABEL: handshake.func @test0( handshake.func @test0(%arg0: !handshake.channel, %arg4: memref<8xi32>, %arg5: memref<8xi8>, %arg6: !handshake.control<>, %arg7: !handshake.control<>, %arg8: !handshake.control<>, ...) -> (!handshake.control<>, !handshake.control<>, !handshake.control<>) attributes {argNames = ["var1", "var0", "var2", "var0_start", "var2_start", "start"], resNames = ["var0_end", "var2_end", "end"]} { @@ -20,4 +20,22 @@ handshake.func @test0(%arg0: !handshake.channel, %arg4: memref<8xi32>, %arg end {handshake.bb = 1 : ui32, handshake.name = "end0"} %1#1, %0, %arg8 : <>, <>, <> } +// ----- +// CHECK-LABEL: handshake.func @shrsi_giid( +handshake.func @shrsi_giid(%arg0: !handshake.channel, %arg1: memref<2xi16>, %arg2: !handshake.control<>, %arg3: !handshake.control<>, ...) -> (!handshake.control<>, !handshake.control<>) attributes {argNames = ["var5", "var1", "var1_start", "start"], resNames = ["var1_end", "end"]} { + %0:2 = lsq[%arg1 : memref<2xi16>] (%arg2, %arg3, %addressResult, %addressResult_0, %dataResult_1, %arg3) {groupSizes = [2 : i32], handshake.name = "lsq0"} : (!handshake.control<>, !handshake.control<>, !handshake.channel, !handshake.channel, !handshake.channel, !handshake.control<>) -> (!handshake.channel, !handshake.control<>) + %1 = constant %arg3 {handshake.bb = 0 : ui32, handshake.name = "constant0", value = 0 : i32} : <>, + // CHECK: load + // CHECK-SAME: #handshake, handshake.name = "load0"} : , , , + %2 = extsi %dataResult {handshake.bb = 0 : ui32, handshake.name = "extsi0"} : to + %3 = extui %arg0 {handshake.bb = 0 : ui32, handshake.name = "extui0"} : to + %4 = shrsi %2, %3 {handshake.bb = 0 : ui32, handshake.name = "shrsi0"} : + %5 = trunci %4 {handshake.bb = 0 : ui32, handshake.name = "trunci0"} : to + %addressResult_0, %dataResult_1 = store[%1] %5 {handshake.bb = 0 : ui32, handshake.name = "store1"} : , , , + end {handshake.bb = 0 : ui32, handshake.name = "end0"} %0#1, %arg3 : <>, <> +}