28class ArithmeticFixup :
public Transform {
32 const IR::Expression *fix(
const IR::Expression *expr,
const IR::Type_Bits *type);
33 const IR::Node *updateType(
const IR::Expression *expression);
34 const IR::Node *postorder(IR::Expression *expression)
override;
35 const IR::Node *postorder(IR::Operation_Binary *expression)
override;
36 const IR::Node *postorder(IR::Neg *expression)
override;
37 const IR::Node *postorder(IR::Cmpl *expression)
override;
38 const IR::Node *postorder(IR::Cast *expression)
override;
39 explicit ArithmeticFixup(
P4::TypeMap *typeMap) : typeMap(typeMap) { CHECK_NULL(typeMap); }
42class ExpressionConverter :
public Inspector {
54 std::map<const IR::Expression *, Util::IJson *> map;
59 bool withConstantWidths{
false};
67 corelib(P4::P4CoreLibrary::instance()),
68 scalarsName(scalarsName),
85 Util::IJson *get(
const IR::Expression *expression)
const;
97 bool convertBool =
false);
98 Util::IJson *convertLeftValue(
const IR::Expression *e);
99 Util::IJson *convertWithConstantWidths(
const IR::Expression *e);
100 bool isArrayIndexRuntime(
const IR::Expression *e);
102 void postorder(
const IR::BoolLiteral *expression)
override;
103 void postorder(
const IR::MethodCallExpression *expression)
override;
104 void postorder(
const IR::Cast *expression)
override;
105 void postorder(
const IR::Slice *expression)
override;
106 void postorder(
const IR::AddSat *expression)
override { saturated_binary(expression); }
107 void postorder(
const IR::SubSat *expression)
override { saturated_binary(expression); }
108 void postorder(
const IR::Constant *expression)
override;
109 void postorder(
const IR::ArrayIndex *expression)
override;
110 void postorder(
const IR::Member *expression)
override;
111 void postorder(
const IR::Mux *expression)
override;
112 void postorder(
const IR::IntMod *expression)
override;
113 void postorder(
const IR::Operation_Binary *expression)
override;
114 void postorder(
const IR::ListExpression *expression)
override;
115 void postorder(
const IR::StructExpression *expression)
override;
116 void postorder(
const IR::Operation_Unary *expression)
override;
117 void postorder(
const IR::PathExpression *expression)
override;
118 void postorder(
const IR::StringLiteral *expression)
override;
119 void postorder(
const IR::TypeNameExpression *expression)
override;
120 void postorder(
const IR::Expression *expression)
override;
121 void mapExpression(
const IR::Expression *expression,
Util::IJson *
json);
124 void binary(
const IR::Operation_Binary *expression);
125 void saturated_binary(
const IR::Operation_Binary *expression);
const IR::Parameter * enclosingParamReference(const IR::Expression *expression)
Non-null if the expression refers to a parameter from the enclosing control.
Definition backends/bmv2/common/expression.cpp:227
Util::IJson * convert(const IR::Expression *e, bool doFixup=true, bool wrap=true, bool convertBool=false)
Definition backends/bmv2/common/expression.cpp:758