diff --git a/ethosu/regor/architecture/ethosu55/ethos_u55_register_cs_generator.cpp b/ethosu/regor/architecture/ethosu55/ethos_u55_register_cs_generator.cpp index 3bd11ed571bbd8f46a577692da59bb54e45c18a2..e7fd2bef34bd71920a3f9bd35a9d9f66dc0f1ad7 100644 --- a/ethosu/regor/architecture/ethosu55/ethos_u55_register_cs_generator.cpp +++ b/ethosu/regor/architecture/ethosu55/ethos_u55_register_cs_generator.cpp @@ -681,9 +681,18 @@ int EthosU55RCSGenerator::CalcBlockDep(const HLCStripe *prevStripe, const HLCStr { return 0; } + const auto &op = stripe->operation; const auto &prevOp = prevStripe->operation; - const auto &prevOfm = prevOp->ofm; + const auto &prevOfm = !prevOp->subOps.empty() ? prevOp->subOps.back().ofm : prevOp->ofm; + + // Multi-pass transposes may overlap because the implementation adjusts + // the input/output strides independently of the OFM area. + if ( !IsNone(prevOfm.transpose) && (prevOfm.transpose != TransposeType::NWHC) ) + { + return 0; + } + if ( _arch->_shram.reservedEndBanks == 0 ) { // SHRAM has no reserved LUT banks