void SuperShaderPass::addPassesFromMethods() { CompiledPass::addPassesFromMethods(); if (m_methodSetup->m_colorTransformMethod) addPasses(m_methodSetup->m_colorTransformMethod->getPasses()); for (auto set : m_methodSetup->m_methods) addPasses(set->m_method->getPasses()); }
PsaSwitchMidEnd::PsaSwitchMidEnd(CompilerOptions& options) : MidEnd(options) { auto evaluator = new P4::EvaluatorPass(&refMap, &typeMap); auto convertEnums = new P4::ConvertEnums(&refMap, &typeMap, new PsaEnumOn32Bits("psa.p4")); addPasses({ new P4::RemoveActionParameters(&refMap, &typeMap), convertEnums, new VisitFunctor([this, convertEnums]() { enumMap = convertEnums->getEnumMapping(); }), new P4::OrderArguments(&refMap, &typeMap), new P4::TypeChecking(&refMap, &typeMap), new P4::SimplifyKey(&refMap, &typeMap, new P4::OrPolicy( new P4::IsValid(&refMap, &typeMap), new P4::IsMask())), new P4::ConstantFolding(&refMap, &typeMap), new P4::StrengthReduction(), new P4::SimplifySelectCases(&refMap, &typeMap, true), // require constant keysets new P4::ExpandLookahead(&refMap, &typeMap), new P4::ExpandEmit(&refMap, &typeMap), new P4::SimplifyParsers(&refMap), new P4::StrengthReduction(), new P4::EliminateTuples(&refMap, &typeMap), new P4::SimplifyComparisons(&refMap, &typeMap), new P4::CopyStructures(&refMap, &typeMap), new P4::NestedStructs(&refMap, &typeMap), new P4::SimplifySelectList(&refMap, &typeMap), new P4::RemoveSelectBooleans(&refMap, &typeMap), new P4::Predication(&refMap), new P4::MoveDeclarations(), // more may have been introduced new P4::ConstantFolding(&refMap, &typeMap), new P4::LocalCopyPropagation(&refMap, &typeMap), new P4::ConstantFolding(&refMap, &typeMap), new P4::MoveDeclarations(), new P4::ValidateTableProperties({ "psa_implementation", "psa_direct_counter", "psa_direct_meter", "psa_idle_timeout", "size" }), new P4::SimplifyControlFlow(&refMap, &typeMap), new P4::CompileTimeOperations(), new P4::TableHit(&refMap, &typeMap), new P4::RemoveLeftSlices(&refMap, &typeMap), new P4::TypeChecking(&refMap, &typeMap), new P4::MidEndLast(), evaluator, new VisitFunctor([this, evaluator]() { toplevel = evaluator->getToplevelBlock(); }), }); }
SimpleSwitchMidEnd::SimpleSwitchMidEnd(CompilerOptions& options) : MidEnd(options) { auto evaluator = new P4::EvaluatorPass(&refMap, &typeMap); auto convertEnums = new P4::ConvertEnums(&refMap, &typeMap, new EnumOn32Bits("v1model.p4")); addPasses({ new P4::CheckTableSize(), new P4::EliminateNewtype(&refMap, &typeMap), new P4::EliminateSerEnums(&refMap, &typeMap), new P4::RemoveActionParameters(&refMap, &typeMap), convertEnums, new VisitFunctor([this, convertEnums]() { enumMap = convertEnums->getEnumMapping(); }), new P4::OrderArguments(&refMap, &typeMap), new P4::TypeChecking(&refMap, &typeMap), new P4::SimplifyKey(&refMap, &typeMap, new P4::OrPolicy( new P4::IsValid(&refMap, &typeMap), new P4::IsMask())), new P4::ConstantFolding(&refMap, &typeMap), new P4::StrengthReduction(), new P4::SimplifySelectCases(&refMap, &typeMap, true), // require constant keysets new P4::ExpandLookahead(&refMap, &typeMap), new P4::ExpandEmit(&refMap, &typeMap), new P4::SimplifyParsers(&refMap), new P4::StrengthReduction(), new P4::EliminateTuples(&refMap, &typeMap), new P4::SimplifyComparisons(&refMap, &typeMap), new P4::CopyStructures(&refMap, &typeMap), new P4::NestedStructs(&refMap, &typeMap), new P4::SimplifySelectList(&refMap, &typeMap), new P4::RemoveSelectBooleans(&refMap, &typeMap), new P4::FlattenHeaders(&refMap, &typeMap), new P4::FlattenInterfaceStructs(&refMap, &typeMap), new P4::Predication(&refMap), new P4::MoveDeclarations(), // more may have been introduced new P4::ConstantFolding(&refMap, &typeMap), new P4::LocalCopyPropagation(&refMap, &typeMap), new P4::ConstantFolding(&refMap, &typeMap), new P4::SimplifyKey(&refMap, &typeMap, new P4::OrPolicy( new P4::IsValid(&refMap, &typeMap), new P4::IsMask())), new P4::MoveDeclarations(), new P4::ValidateTableProperties({ "implementation", "size", "counters", "meters", "support_timeout" }), new P4::SimplifyControlFlow(&refMap, &typeMap), new P4::CompileTimeOperations(), new P4::TableHit(&refMap, &typeMap), new P4::RemoveLeftSlices(&refMap, &typeMap), // p4c-bm removed unused action parameters. To produce a compatible // control plane API, we remove them as well for P4-14 programs. isv1 ? new P4::RemoveUnusedActionParameters(&refMap) : nullptr, new P4::TypeChecking(&refMap, &typeMap), new P4::MidEndLast(), evaluator, new VisitFunctor([this, evaluator]() { toplevel = evaluator->getToplevelBlock(); }), }); }