165 ActionAnalysis::ContainerActionsMap container_actions_map;
167 const IR::MAU::Action *preorder(IR::MAU::Action *)
override;
168 const IR::MAU::Instruction *preorder(IR::MAU::Instruction *)
override;
169 const IR::MAU::ActionArg *preorder(IR::MAU::ActionArg *)
override;
170 const IR::Expression *preorder(IR::Expression *)
override;
171 const IR::Constant *preorder(IR::Constant *)
override;
172 const IR::Slice *preorder(IR::Slice *)
override;
173 void analyze_phv_field(IR::Expression *);
174 const IR::MAU::Primitive *preorder(IR::MAU::Primitive *)
override;
175 const IR::MAU::Instruction *postorder(IR::MAU::Instruction *)
override;
176 const IR::MAU::Action *postorder(IR::MAU::Action *)
override;
178 const IR::MAU::AttachedOutput *preorder(IR::MAU::AttachedOutput *)
override;
179 const IR::MAU::StatefulAlu *preorder(IR::MAU::StatefulAlu *)
override;
180 const IR::MAU::HashDist *preorder(IR::MAU::HashDist *)
override;
182 bool has_constant =
false;
183 bool write_found =
false;
191 visitDagOnce =
false;
233 struct ByteRotateMergeInfo {
239 bool saturationArith =
false;
243 ActionAnalysis::ContainerActionsMap container_actions_map;
245 const IR::MAU::Action *preorder(IR::MAU::Action *)
override;
246 const IR::MAU::Instruction *preorder(IR::MAU::Instruction *)
override;
247 const IR::Expression *preorder(IR::Expression *)
override;
248 const IR::Slice *preorder(IR::Slice *)
override;
249 void analyze_phv_field(IR::Expression *);
250 const IR::MAU::ActionDataConstant *preorder(IR::MAU::ActionDataConstant *)
override;
251 const IR::MAU::ActionArg *preorder(IR::MAU::ActionArg *)
override;
252 const IR::Constant *preorder(IR::Constant *)
override;
253 const IR::MAU::Primitive *preorder(IR::MAU::Primitive *)
override;
255 const IR::MAU::AttachedOutput *preorder(IR::MAU::AttachedOutput *ao)
override;
256 const IR::MAU::StatefulAlu *preorder(IR::MAU::StatefulAlu *salu)
override;
257 const IR::MAU::HashDist *preorder(IR::MAU::HashDist *hd)
override;
260 const IR::MAU::Instruction *postorder(IR::MAU::Instruction *)
override;
261 const IR::MAU::Action *postorder(IR::MAU::Action *)
override;
265 bool write_found =
false;
266 ordered_set<PHV::Container>::iterator merged_location;
268 IR::MAU::Instruction *dest_slice_to_container(
PHV::Container container,
272 const IR::Expression **src1_p,
bitvec &src1_writebits,
275 const IR::Expression **src1_p,
const IR::Expression **src2_p,
279 IR::MAU::Instruction *build_merge_instruction(
PHV::Container container,
282 IR::MAU::MultiOperand *mo);
284 ActionAnalysis::ActionParam::type_t type,
cstring match_name,
285 IR::MAU::MultiOperand *mo);
286 const IR::Expression *fill_out_hash_operand(
PHV::Container container,
288 const IR::Expression *fill_out_rand_operand(
PHV::Container container,
294 visitDagOnce =
false;
301 const IR::Expression *preorder(IR::Expression *expr)
override;
302 const IR::Annotation *preorder(IR::Annotation *)
override;
303 const IR::MAU::IXBarExpression *preorder(IR::MAU::IXBarExpression *)
override;
305 bool check_bit_positions(std::map<int, le_bitrange> &salu_inputs,
le_bitrange field_bits,
307 bool verify_on_search_bus(
const IR::MAU::StatefulAlu *,
const Tofino::IXBar::Use &salu_ixbar,
309 bool verify_on_hash_bus(
const IR::MAU::StatefulAlu *salu,
322 enum OP_TYPE { DST = 0, SRC1 = 1, SRC2 = 2 };
324 typedef std::set<std::pair<PHV::Container, le_bitrange>> AllocContainerSlice;
325 bool get_alloc_slice(IR::MAU::Instruction *ins, OP_TYPE type,
326 AllocContainerSlice &op_alloc)
const;
327 const IR::MAU::Instruction *preorder(IR::MAU::Instruction *)
override;
328 const IR::MAU::Synth2Port *preorder(IR::MAU::Synth2Port *s)
override;
329 cstring toString(OP_TYPE ot)
const {
Definition tofino_write_context.h:24
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24