1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
5 #include <vpu/pass_manager.hpp>
10 #include <vpu/sw/utility.hpp>
16 class PassImpl final : public Pass {
18 explicit PassImpl(const StageBuilder::Ptr& stageBuilder) : _stageBuilder(stageBuilder) {}
20 void run(const Model::Ptr& model) override;
23 StageBuilder::Ptr _stageBuilder;
26 void PassImpl::run(const Model::Ptr& model) {
27 VPU_PROFILE(mergeReLUAndBias);
29 for (const auto& biasStage : model->getStages()) {
30 if (biasStage == nullptr) {
34 if (biasStage->type() != StageType::Bias) {
38 if (auto reluStage = getNextStage(biasStage, {StageType::Relu, StageType::LeakyRelu})) {
39 auto biasInput = biasStage->input(0);
40 auto biases = biasStage->input(1);
42 auto reluOutput = reluStage->output(0);
44 auto reluStageName = reluStage->name();
45 auto reluOrigLayer = reluStage->origLayer();
46 auto negativeSlope = reluStage->attrs().get<float>("negativeSlope");
48 model->removeStage(biasStage);
49 model->removeStage(reluStage);
51 _stageBuilder->addReLUStage(
65 Pass::Ptr PassManager::mergeReLUAndBias() {
66 return std::make_shared<PassImpl>(_stageBuilder);