P4C
The P4 Compiler
Loading...
Searching...
No Matches
expandEmit.h
1/*
2 * Copyright 2017 VMware, Inc.
3 * SPDX-FileCopyrightText: 2017 VMware, Inc.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef MIDEND_EXPANDEMIT_H_
9#define MIDEND_EXPANDEMIT_H_
10
11#include "frontends/common/resolveReferences/resolveReferences.h"
12#include "frontends/p4/typeChecking/typeChecker.h"
13#include "ir/ir.h"
14
15namespace P4 {
16
36class DoExpandEmit : public Transform, public ResolutionContext {
37 TypeMap *typeMap;
38
39 public:
40 explicit DoExpandEmit(TypeMap *typeMap) : typeMap(typeMap) {
41 CHECK_NULL(typeMap);
42 setName("DoExpandEmit");
43 }
44 // return true if the expansion produced something "new"
45 bool expandArg(const IR::Type *type, const IR::Argument *argument,
46 std::vector<const IR::Argument *> *result,
47 std::vector<const IR::Type *> *resultTypes);
48 const IR::Node *postorder(IR::MethodCallStatement *statement) override;
49};
50
51class ExpandEmit : public PassManager {
52 public:
53 explicit ExpandEmit(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) {
54 setName("ExpandEmit");
55 if (!typeChecking) typeChecking = new TypeChecking(nullptr, typeMap);
56 passes.push_back(typeChecking);
57 passes.push_back(new DoExpandEmit(typeMap));
58 }
59};
60
61} // namespace P4
62
63#endif /* MIDEND_EXPANDEMIT_H_ */
Definition expandEmit.h:36
Definition node.h:53
Definition visitor.h:442
Definition typeChecker.h:55
Definition typeMap.h:32
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13