72class IsMask :
public IsLikeLeftValue {
74 bool isSimple(
const IR::Expression *expression,
const Visitor::Context *ctxt) {
75 if (
auto mask = expression->to<IR::BAnd>()) {
76 if (mask->right->is<IR::Constant>())
77 expression = mask->left;
78 else if (mask->left->is<IR::Constant>())
79 expression = mask->right;
81 return IsLikeLeftValue::isSimple(expression, ctxt);
98 bool isSimple(
const IR::Expression *expression,
const Visitor::Context *ctxt) {
99 return left->isSimple(expression, ctxt) || right->isSimple(expression, ctxt);
137 std::map<const IR::P4Table *, TableInsertions *> toInsert;
141 : typeMap(typeMap), key_policy(key_policy) {
143 CHECK_NULL(key_policy);
144 setName(
"DoSimplifyKey");
148 auto rv = Transform::init_apply(node);
149 node->apply(nameGen);
154 const IR::Node *doStatement(
const IR::Statement *statement,
const IR::Expression *expression);
158 const IR::Node *postorder(IR::MethodCallStatement *statement)
override {
159 return doStatement(statement, statement->methodCall);
161 const IR::Node *postorder(IR::IfStatement *statement)
override {
162 return doStatement(statement, statement->condition);
164 const IR::Node *postorder(IR::SwitchStatement *statement)
override {
165 return doStatement(statement, statement->expression);
167 const IR::Node *postorder(IR::BaseAssignmentStatement *statement)
override {
168 return doStatement(statement, statement->right);
170 const IR::Node *postorder(IR::KeyElement *element)
override;
171 const IR::Node *postorder(IR::P4Table *table)
override;
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:13