17#ifndef MIDEND_HAS_SIDE_EFFECTS_H_
18#define MIDEND_HAS_SIDE_EFFECTS_H_
20#include "frontends/common/resolveReferences/referenceMap.h"
21#include "frontends/p4/methodInstance.h"
33 bool preorder(
const IR::AssignmentStatement *)
override {
37 bool preorder(
const IR::MethodCallExpression *mc)
override {
42 if (refMap && typeMap) {
45 if (bm->name ==
"isValid") {
50 if (em->method->getAnnotation(IR::Annotation::noSideEffectsAnnotation))
return true;
57 bool preorder(
const IR::Primitive *)
override {
61 bool preorder(
const IR::Expression *)
override {
return !result; }
64 explicit hasSideEffects(
const IR::Expression *e) { e->apply(*
this); }
67 : refMap(rm), typeMap(tm) {
70 bool operator()(
const IR::Expression *e) {
75 explicit operator bool() {
return result; }
Definition methodInstance.h:254
Definition methodInstance.h:149
static MethodInstance * resolve(const IR::MethodCallExpression *mce, const DeclarationLookup *refMap, TypeMap *typeMap, bool useExpressionType=false, const Visitor::Context *ctxt=nullptr, bool incomplete=false)
Definition methodInstance.cpp:27
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24