p4c
p4c copied to clipboard
Unexpected compiler warning when using TNA arch
Compile the following P4 code under p4c 1.2.5.10 (SHA: cceb17da1 BUILD: Release) (current main HEAD).
p4c --target tofino --arch tna my_simple_switch_tna.p4
#include <core.p4>
#if __TARGET_TOFINO__ == 3
#include <t3na.p4>
#elif __TARGET_TOFINO__ == 2
#include <t2na.p4>
#else
#include <tna.p4>
#endif
#include "common/headers.p4"
#include "common/util.p4"
const ether_type_t ETHERTYPE_PROBE = 16w0x88b5;
header probe_h {
bit<8> stage;
@padding bit<7> _pad1;
bit<9> port;
bit<24> qdepth;
}
struct my_header_t {
ethernet_h ethernet;
probe_h probe;
ipv4_h ipv4;
}
// ---------------------------------------------------------------------------
// Ingress parser
// ---------------------------------------------------------------------------
parser SwitchIngressParser(
packet_in pkt,
out my_header_t hdr,
out empty_metadata_t ig_md,
out ingress_intrinsic_metadata_t ig_intr_md) {
TofinoIngressParser() tofino_parser;
state start {
tofino_parser.apply(pkt, ig_intr_md);
transition parse_ethernet;
}
state parse_ethernet {
pkt.extract(hdr.ethernet);
transition select (hdr.ethernet.ether_type) {
ETHERTYPE_IPV4 : parse_ipv4;
ETHERTYPE_PROBE : parse_probe;
default : reject;
}
}
state parse_probe {
pkt.extract(hdr.probe);
transition accept;
}
state parse_ipv4 {
pkt.extract(hdr.ipv4);
transition accept;
}
}
control SwitchIngress(
inout my_header_t hdr,
inout empty_metadata_t ig_md,
in ingress_intrinsic_metadata_t ig_intr_md,
in ingress_intrinsic_metadata_from_parser_t ig_intr_prsr_md,
inout ingress_intrinsic_metadata_for_deparser_t ig_intr_dprsr_md,
inout ingress_intrinsic_metadata_for_tm_t ig_intr_tm_md) {
apply {}
}
// ---------------------------------------------------------------------------
// Ingress Deparser
// ---------------------------------------------------------------------------
control SwitchIngressDeparser(
packet_out pkt,
inout my_header_t hdr,
in empty_metadata_t ig_md,
in ingress_intrinsic_metadata_for_deparser_t ig_intr_dprsr_md) {
apply {
pkt.emit(hdr);
}
}
// ---------------------------------------------------------------------------
// Egress parser
// ---------------------------------------------------------------------------
parser SwitchEgressParser(
packet_in pkt,
out my_header_t hdr,
out empty_metadata_t eg_md,
out egress_intrinsic_metadata_t eg_intr_md) {
TofinoEgressParser() tofino_parser;
state start {
tofino_parser.apply(pkt, eg_intr_md);
transition parse_ethernet;
}
state parse_ethernet {
pkt.extract(hdr.ethernet);
transition select (hdr.ethernet.ether_type) {
ETHERTYPE_IPV4 : parse_ipv4;
ETHERTYPE_PROBE : parse_probe;
default : reject;
}
}
state parse_probe {
pkt.extract(hdr.probe);
transition accept;
}
state parse_ipv4 {
pkt.extract(hdr.ipv4);
transition accept;
}
}
// ---------------------------------------------------------------------------
// Switch Egress MAU
// ---------------------------------------------------------------------------
control SwitchEgress(
inout my_header_t hdr,
inout empty_metadata_t eg_md,
in egress_intrinsic_metadata_t eg_intr_md,
in egress_intrinsic_metadata_from_parser_t eg_prsr_md,
inout egress_intrinsic_metadata_for_deparser_t eg_dprsr_md,
inout egress_intrinsic_metadata_for_output_port_t eg_oport_md) {
apply {
}
}
// ---------------------------------------------------------------------------
// Egress Deparser
// ---------------------------------------------------------------------------
control SwitchEgressDeparser(
packet_out pkt,
inout my_header_t hdr,
in empty_metadata_t eg_md,
in egress_intrinsic_metadata_for_deparser_t eg_dprsr_md) {
apply {
pkt.emit(hdr);
}
}
Pipeline(SwitchIngressParser(),
SwitchIngress(),
SwitchIngressDeparser(),
SwitchEgressParser(),
SwitchEgress(),
SwitchEgressDeparser()) pipe;
Switch(pipe) main;
The compiler warns that:
warning: Parser state min_parse_depth_accept_loop will be unrolled up to 3 times due to @pragma max_loop_depth.
warning: Parser state min_parse_depth_reject_loop will be unrolled up to 3 times due to @pragma max_loop_depth.
warning: Parser state min_parse_depth_accept_loop will be unrolled up to 3 times due to @pragma max_loop_depth.
warning: Parser state min_parse_depth_reject_loop will be unrolled up to 3 times due to @pragma max_loop_depth.
However, these warnings do not show when compiling using the t2na arch and tofino2 target.