18class LowerExpressions :
public Transform {
20 std::optional<int> maxShiftWidth;
21 const IR::Expression *shift(
const IR::Operation_Binary *expression)
const;
24 explicit LowerExpressions(
P4::TypeMap *typeMap, std::optional<int> maxShiftWidth)
27 this->maxShiftWidth = maxShiftWidth;
28 setName(
"LowerExpressions");
31 const IR::Node *postorder(IR::Shl *expression)
override {
return shift(expression); }
32 const IR::Node *postorder(IR::Shr *expression)
override {
return shift(expression); }
33 const IR::Node *postorder(IR::Expression *expression)
override;
34 const IR::Node *postorder(IR::Slice *expression)
override;
35 const IR::Node *postorder(IR::Concat *expression)
override;
36 const IR::Node *postorder(IR::Cast *expression)
override;