From 59ce97eda551ab255bf98f7aab4756eb8864b662 Mon Sep 17 00:00:00 2001 From: Mihai Budiu Date: Fri, 18 Nov 2022 18:37:18 -0800 Subject: [PATCH 1/3] Alternate strength reduction and constant folding to eliminate constant nested shift operations Signed-off-by: Mihai Budiu --- backends/bmv2/common/lower.cpp | 2 +- backends/bmv2/psa_switch/midend.cpp | 4 +- backends/bmv2/psa_switch/psaSwitch.cpp | 3 +- backends/bmv2/simple_switch/midend.cpp | 4 +- backends/dpdk/midend.cpp | 3 +- backends/ebpf/midend.cpp | 3 +- backends/ubpf/midend.cpp | 4 +- testdata/p4_16_samples/issue3702-bmv2.p4 | 105 ++++++++++++++++++ .../issue3702-bmv2-first.p4 | 88 +++++++++++++++ .../issue3702-bmv2-frontend.p4 | 90 +++++++++++++++ .../issue3702-bmv2-midend.p4 | 99 +++++++++++++++++ .../p4_16_samples_outputs/issue3702-bmv2.p4 | 88 +++++++++++++++ .../issue3702-bmv2.p4-stderr | 0 .../issue3702-bmv2.p4.entries.txt | 0 .../issue3702-bmv2.p4.p4info.txt | 3 + 15 files changed, 487 insertions(+), 9 deletions(-) create mode 100644 testdata/p4_16_samples/issue3702-bmv2.p4 create mode 100644 testdata/p4_16_samples_outputs/issue3702-bmv2-first.p4 create mode 100644 testdata/p4_16_samples_outputs/issue3702-bmv2-frontend.p4 create mode 100644 testdata/p4_16_samples_outputs/issue3702-bmv2-midend.p4 create mode 100644 testdata/p4_16_samples_outputs/issue3702-bmv2.p4 create mode 100644 testdata/p4_16_samples_outputs/issue3702-bmv2.p4-stderr create mode 100644 testdata/p4_16_samples_outputs/issue3702-bmv2.p4.entries.txt create mode 100644 testdata/p4_16_samples_outputs/issue3702-bmv2.p4.p4info.txt diff --git a/backends/bmv2/common/lower.cpp b/backends/bmv2/common/lower.cpp index 9fec53f1ab5..fbcf89b00e8 100644 --- a/backends/bmv2/common/lower.cpp +++ b/backends/bmv2/common/lower.cpp @@ -31,7 +31,7 @@ const IR::Expression* LowerExpressions::shift(const IR::Operation_Binary* expres auto rhs = expression->right; auto rhstype = typeMap->getType(rhs, true); if (rhstype->is()) { - auto cst = rhs->to(); + auto cst = rhs->checkedTo(); big_int maxShift = Util::shift_left(1, LowerExpressions::maxShiftWidth); if (cst->value > maxShift) ::error(ErrorType::ERR_OVERLIMIT, "%1%: shift amount limited to %2% on this target", diff --git a/backends/bmv2/psa_switch/midend.cpp b/backends/bmv2/psa_switch/midend.cpp index 396f4ed09ae..09e9b9e6f26 100644 --- a/backends/bmv2/psa_switch/midend.cpp +++ b/backends/bmv2/psa_switch/midend.cpp @@ -140,8 +140,8 @@ PsaSwitchMidEnd::PsaSwitchMidEnd(CompilerOptions& options, std::ostream* outStre new P4::MoveDeclarations(), // more may have been introduced new P4::ConstantFolding(&refMap, &typeMap), new P4::LocalCopyPropagation(&refMap, &typeMap, nullptr, policy), - new P4::ConstantFolding(&refMap, &typeMap), - new P4::StrengthReduction(&refMap, &typeMap), + new PassRepeated({new P4::ConstantFolding(&refMap, &typeMap), + new P4::StrengthReduction(&refMap, &typeMap)}), new P4::MoveDeclarations(), new P4::ValidateTableProperties({"psa_implementation", "psa_direct_counter", "psa_direct_meter", "psa_idle_timeout", "size"}), diff --git a/backends/bmv2/psa_switch/psaSwitch.cpp b/backends/bmv2/psa_switch/psaSwitch.cpp index ffeb015f414..3fe7f4adc47 100644 --- a/backends/bmv2/psa_switch/psaSwitch.cpp +++ b/backends/bmv2/psa_switch/psaSwitch.cpp @@ -275,7 +275,8 @@ void PsaSwitchBackend::convert(const IR::ToplevelBlock* tlb) { new P4::TypeChecking(refMap, typeMap), new P4::SimplifyControlFlow(refMap, typeMap), new LowerExpressions(typeMap), - new P4::ConstantFolding(refMap, typeMap, false), + new PassRepeated( + {new P4::ConstantFolding(refMap, typeMap), new P4::StrengthReduction(refMap, typeMap)}), new P4::TypeChecking(refMap, typeMap), new P4::RemoveComplexExpressions(refMap, typeMap, new ProcessControls(&structure.pipeline_controls)), diff --git a/backends/bmv2/simple_switch/midend.cpp b/backends/bmv2/simple_switch/midend.cpp index a721e4b978b..1c974c4fc1c 100644 --- a/backends/bmv2/simple_switch/midend.cpp +++ b/backends/bmv2/simple_switch/midend.cpp @@ -98,8 +98,8 @@ SimpleSwitchMidEnd::SimpleSwitchMidEnd(CompilerOptions& options, std::ostream* o new P4::MoveDeclarations(), // more may have been introduced new P4::ConstantFolding(&refMap, &typeMap), new P4::LocalCopyPropagation(&refMap, &typeMap), - new P4::ConstantFolding(&refMap, &typeMap), - new P4::StrengthReduction(&refMap, &typeMap), + new PassRepeated({new P4::ConstantFolding(&refMap, &typeMap), + new P4::StrengthReduction(&refMap, &typeMap)}), new P4::SimplifyKey( &refMap, &typeMap, new P4::OrPolicy(new P4::IsValid(&refMap, &typeMap), new P4::IsMask())), diff --git a/backends/dpdk/midend.cpp b/backends/dpdk/midend.cpp index df7032457a8..60f9847a1c4 100644 --- a/backends/dpdk/midend.cpp +++ b/backends/dpdk/midend.cpp @@ -212,7 +212,8 @@ DpdkMidEnd::DpdkMidEnd(CompilerOptions& options, std::ostream* outStream) { new P4::MoveDeclarations(), // more may have been introduced new P4::ConstantFolding(&refMap, &typeMap), new P4::LocalCopyPropagation(&refMap, &typeMap, nullptr, policy), - new P4::ConstantFolding(&refMap, &typeMap), + new PassRepeated({new P4::ConstantFolding(&refMap, &typeMap), + new P4::StrengthReduction(&refMap, &typeMap)}), new P4::MoveDeclarations(), validateTableProperties(options.arch), new P4::SimplifyControlFlow(&refMap, &typeMap), diff --git a/backends/ebpf/midend.cpp b/backends/ebpf/midend.cpp index a4352e22844..ebaeced2d13 100644 --- a/backends/ebpf/midend.cpp +++ b/backends/ebpf/midend.cpp @@ -92,7 +92,8 @@ const IR::ToplevelBlock* MidEnd::run(EbpfOptions& options, const IR::P4Program* new P4::ExpandEmit(&refMap, &typeMap), new P4::HandleNoMatch(&refMap), new P4::SimplifyParsers(&refMap), - new P4::StrengthReduction(&refMap, &typeMap), + new PassRepeated({new P4::ConstantFolding(&refMap, &typeMap), + new P4::StrengthReduction(&refMap, &typeMap)}), new P4::SimplifyComparisons(&refMap, &typeMap), new P4::EliminateTuples(&refMap, &typeMap), new P4::SimplifySelectList(&refMap, &typeMap), diff --git a/backends/ubpf/midend.cpp b/backends/ubpf/midend.cpp index 9eaf4f3561a..dc0d8497751 100644 --- a/backends/ubpf/midend.cpp +++ b/backends/ubpf/midend.cpp @@ -86,7 +86,9 @@ const IR::ToplevelBlock* MidEnd::run(EbpfOptions& options, const IR::P4Program* new P4::ConstantFolding(&refMap, &typeMap), // accept non-constant keysets new P4::SimplifySelectCases(&refMap, &typeMap, false), new P4::HandleNoMatch(&refMap), - new P4::SimplifyParsers(&refMap), new P4::StrengthReduction(&refMap, &typeMap), + new P4::SimplifyParsers(&refMap), + new PassRepeated({new P4::ConstantFolding(&refMap, &typeMap), + new P4::StrengthReduction(&refMap, &typeMap)}), new P4::SimplifyComparisons(&refMap, &typeMap), new P4::CopyStructures(&refMap, &typeMap), new P4::LocalCopyPropagation(&refMap, &typeMap), diff --git a/testdata/p4_16_samples/issue3702-bmv2.p4 b/testdata/p4_16_samples/issue3702-bmv2.p4 new file mode 100644 index 00000000000..f999ebb3450 --- /dev/null +++ b/testdata/p4_16_samples/issue3702-bmv2.p4 @@ -0,0 +1,105 @@ +//#include "third_party/p4lang_p4c/p4include/core.p4" +//#include "third_party/p4lang_p4c/p4include/v1model.p4" +#include "core.p4" +#include "v1model.p4" + +typedef bit<48> ethernet_addr_t; +typedef bit<32> ipv4_addr_t; + +// Enums +enum bit <16> EtherType { +ETYPE_IPV4 = 0x0800 +}; + +// Header definitions +header ethernet_t { +ethernet_addr_t da; // destination address +ethernet_addr_t sa; // source address +bit<16> type; // First (mandatory) Ethertype field +} + +header ipv4_t { +bit<4> version; +bit<4> ihl; +bit<6> dscp; // The 6 most significant bits of the diff_serv field. +bit<2> ecn; // The 2 least significant bits of the diff_serv field. +bit<16> total_len; +bit<16> identification; +bit<1> reserved; +bit<1> do_not_fragment; +bit<1> more_fragments; +bit<13> frag_offset; +bit<8> ttl; +bit<8> protocol; +bit<16> header_checksum; +ipv4_addr_t src_addr; +ipv4_addr_t dst_addr; +} + +header ipv4_options_t { +varbit<480> options; +} + +// Set of extracted headers. +struct headers_t { +ethernet_t mac; // mac header +ipv4_options_t ip; // v4/v6 union +} + +// Required metadata structure. +struct local_metadata_t { + +} + +// Signature is governed by the architecture (PNA) +parser v1model_parser(packet_in pkt, out headers_t hdrs, +inout local_metadata_t local_meta, +inout standard_metadata_t standard_meta) { +state start { +pkt.extract(hdrs.mac); +transition select(hdrs.mac.type) { +EtherType.ETYPE_IPV4 : parse_ipv4; +default: accept; +} +} + +state parse_ipv4 { +ipv4_t ipv4 = pkt.lookahead(); +bit<32> byte_len = ((bit<32>)(ipv4.ihl & 0xF)) << 2; +pkt.extract(hdrs.ip, byte_len << 3); +transition accept; +} + +} + +control compute_ip_checksum(inout headers_t headers, +inout local_metadata_t local_metadata) { +apply { +} +} +control verify_ip_checksum(inout headers_t headers, +inout local_metadata_t local_metadata) { +apply { +} +} + +control egress(inout headers_t headers, +inout local_metadata_t local_metadata, +inout standard_metadata_t standard_metadata) { +apply { +} +} +control ingress(inout headers_t headers, +inout local_metadata_t local_metadata, +inout standard_metadata_t standard_metadata) { +apply { +} +} + +control deparser(packet_out packet, in headers_t headers) { +apply { +} +} + +// Main invocation +V1Switch(v1model_parser(), verify_ip_checksum(), ingress(), egress(), compute_ip_checksum(), deparser()) main; diff --git a/testdata/p4_16_samples_outputs/issue3702-bmv2-first.p4 b/testdata/p4_16_samples_outputs/issue3702-bmv2-first.p4 new file mode 100644 index 00000000000..ed5af2552a8 --- /dev/null +++ b/testdata/p4_16_samples_outputs/issue3702-bmv2-first.p4 @@ -0,0 +1,88 @@ +#include +#define V1MODEL_VERSION 20180101 +#include + +typedef bit<48> ethernet_addr_t; +typedef bit<32> ipv4_addr_t; +enum bit<16> EtherType { + ETYPE_IPV4 = 16w0x800 +} + +header ethernet_t { + ethernet_addr_t da; + ethernet_addr_t sa; + bit<16> type; +} + +header ipv4_t { + bit<4> version; + bit<4> ihl; + bit<6> dscp; + bit<2> ecn; + bit<16> total_len; + bit<16> identification; + bit<1> reserved; + bit<1> do_not_fragment; + bit<1> more_fragments; + bit<13> frag_offset; + bit<8> ttl; + bit<8> protocol; + bit<16> header_checksum; + ipv4_addr_t src_addr; + ipv4_addr_t dst_addr; +} + +header ipv4_options_t { + varbit<480> options; +} + +struct headers_t { + ethernet_t mac; + ipv4_options_t ip; +} + +struct local_metadata_t { +} + +parser v1model_parser(packet_in pkt, out headers_t hdrs, inout local_metadata_t local_meta, inout standard_metadata_t standard_meta) { + state start { + pkt.extract(hdrs.mac); + transition select(hdrs.mac.type) { + EtherType.ETYPE_IPV4: parse_ipv4; + default: accept; + } + } + state parse_ipv4 { + ipv4_t ipv4 = pkt.lookahead(); + bit<32> byte_len = (bit<32>)ipv4.ihl << 2; + pkt.extract(hdrs.ip, byte_len << 3); + transition accept; + } +} + +control compute_ip_checksum(inout headers_t headers, inout local_metadata_t local_metadata) { + apply { + } +} + +control verify_ip_checksum(inout headers_t headers, inout local_metadata_t local_metadata) { + apply { + } +} + +control egress(inout headers_t headers, inout local_metadata_t local_metadata, inout standard_metadata_t standard_metadata) { + apply { + } +} + +control ingress(inout headers_t headers, inout local_metadata_t local_metadata, inout standard_metadata_t standard_metadata) { + apply { + } +} + +control deparser(packet_out packet, in headers_t headers) { + apply { + } +} + +V1Switch(v1model_parser(), verify_ip_checksum(), ingress(), egress(), compute_ip_checksum(), deparser()) main; diff --git a/testdata/p4_16_samples_outputs/issue3702-bmv2-frontend.p4 b/testdata/p4_16_samples_outputs/issue3702-bmv2-frontend.p4 new file mode 100644 index 00000000000..05de51c8159 --- /dev/null +++ b/testdata/p4_16_samples_outputs/issue3702-bmv2-frontend.p4 @@ -0,0 +1,90 @@ +#include +#define V1MODEL_VERSION 20180101 +#include + +typedef bit<48> ethernet_addr_t; +typedef bit<32> ipv4_addr_t; +enum bit<16> EtherType { + ETYPE_IPV4 = 16w0x800 +} + +header ethernet_t { + ethernet_addr_t da; + ethernet_addr_t sa; + bit<16> type; +} + +header ipv4_t { + bit<4> version; + bit<4> ihl; + bit<6> dscp; + bit<2> ecn; + bit<16> total_len; + bit<16> identification; + bit<1> reserved; + bit<1> do_not_fragment; + bit<1> more_fragments; + bit<13> frag_offset; + bit<8> ttl; + bit<8> protocol; + bit<16> header_checksum; + ipv4_addr_t src_addr; + ipv4_addr_t dst_addr; +} + +header ipv4_options_t { + varbit<480> options; +} + +struct headers_t { + ethernet_t mac; + ipv4_options_t ip; +} + +struct local_metadata_t { +} + +parser v1model_parser(packet_in pkt, out headers_t hdrs, inout local_metadata_t local_meta, inout standard_metadata_t standard_meta) { + @name("v1model_parser.ipv4") ipv4_t ipv4_0; + @name("v1model_parser.byte_len") bit<32> byte_len_0; + state start { + pkt.extract(hdrs.mac); + transition select(hdrs.mac.type) { + EtherType.ETYPE_IPV4: parse_ipv4; + default: accept; + } + } + state parse_ipv4 { + ipv4_0 = pkt.lookahead(); + byte_len_0 = (bit<32>)ipv4_0.ihl << 2; + pkt.extract(hdrs.ip, byte_len_0 << 3); + transition accept; + } +} + +control compute_ip_checksum(inout headers_t headers, inout local_metadata_t local_metadata) { + apply { + } +} + +control verify_ip_checksum(inout headers_t headers, inout local_metadata_t local_metadata) { + apply { + } +} + +control egress(inout headers_t headers, inout local_metadata_t local_metadata, inout standard_metadata_t standard_metadata) { + apply { + } +} + +control ingress(inout headers_t headers, inout local_metadata_t local_metadata, inout standard_metadata_t standard_metadata) { + apply { + } +} + +control deparser(packet_out packet, in headers_t headers) { + apply { + } +} + +V1Switch(v1model_parser(), verify_ip_checksum(), ingress(), egress(), compute_ip_checksum(), deparser()) main; diff --git a/testdata/p4_16_samples_outputs/issue3702-bmv2-midend.p4 b/testdata/p4_16_samples_outputs/issue3702-bmv2-midend.p4 new file mode 100644 index 00000000000..bd059a25155 --- /dev/null +++ b/testdata/p4_16_samples_outputs/issue3702-bmv2-midend.p4 @@ -0,0 +1,99 @@ +#include +#define V1MODEL_VERSION 20180101 +#include + +header ethernet_t { + bit<48> da; + bit<48> sa; + bit<16> type; +} + +header ipv4_t { + bit<4> version; + bit<4> ihl; + bit<6> dscp; + bit<2> ecn; + bit<16> total_len; + bit<16> identification; + bit<1> reserved; + bit<1> do_not_fragment; + bit<1> more_fragments; + bit<13> frag_offset; + bit<8> ttl; + bit<8> protocol; + bit<16> header_checksum; + bit<32> src_addr; + bit<32> dst_addr; +} + +header ipv4_options_t { + varbit<480> options; +} + +struct headers_t { + ethernet_t mac; + ipv4_options_t ip; +} + +struct local_metadata_t { +} + +parser v1model_parser(packet_in pkt, out headers_t hdrs, inout local_metadata_t local_meta, inout standard_metadata_t standard_meta) { + @name("v1model_parser.ipv4") ipv4_t ipv4_0; + bit<160> tmp; + state start { + pkt.extract(hdrs.mac); + transition select(hdrs.mac.type) { + 16w0x800: parse_ipv4; + default: accept; + } + } + state parse_ipv4 { + tmp = pkt.lookahead>(); + ipv4_0.setValid(); + ipv4_0.version = tmp[159:156]; + ipv4_0.ihl = tmp[155:152]; + ipv4_0.dscp = tmp[151:146]; + ipv4_0.ecn = tmp[145:144]; + ipv4_0.total_len = tmp[143:128]; + ipv4_0.identification = tmp[127:112]; + ipv4_0.reserved = tmp[111:111]; + ipv4_0.do_not_fragment = tmp[110:110]; + ipv4_0.more_fragments = tmp[109:109]; + ipv4_0.frag_offset = tmp[108:96]; + ipv4_0.ttl = tmp[95:88]; + ipv4_0.protocol = tmp[87:80]; + ipv4_0.header_checksum = tmp[79:64]; + ipv4_0.src_addr = tmp[63:32]; + ipv4_0.dst_addr = tmp[31:0]; + pkt.extract(hdrs.ip, (bit<32>)tmp[155:152] << 2 + 3); + transition accept; + } +} + +control compute_ip_checksum(inout headers_t headers, inout local_metadata_t local_metadata) { + apply { + } +} + +control verify_ip_checksum(inout headers_t headers, inout local_metadata_t local_metadata) { + apply { + } +} + +control egress(inout headers_t headers, inout local_metadata_t local_metadata, inout standard_metadata_t standard_metadata) { + apply { + } +} + +control ingress(inout headers_t headers, inout local_metadata_t local_metadata, inout standard_metadata_t standard_metadata) { + apply { + } +} + +control deparser(packet_out packet, in headers_t headers) { + apply { + } +} + +V1Switch(v1model_parser(), verify_ip_checksum(), ingress(), egress(), compute_ip_checksum(), deparser()) main; diff --git a/testdata/p4_16_samples_outputs/issue3702-bmv2.p4 b/testdata/p4_16_samples_outputs/issue3702-bmv2.p4 new file mode 100644 index 00000000000..740e4b9783c --- /dev/null +++ b/testdata/p4_16_samples_outputs/issue3702-bmv2.p4 @@ -0,0 +1,88 @@ +#include +#define V1MODEL_VERSION 20180101 +#include + +typedef bit<48> ethernet_addr_t; +typedef bit<32> ipv4_addr_t; +enum bit<16> EtherType { + ETYPE_IPV4 = 0x800 +} + +header ethernet_t { + ethernet_addr_t da; + ethernet_addr_t sa; + bit<16> type; +} + +header ipv4_t { + bit<4> version; + bit<4> ihl; + bit<6> dscp; + bit<2> ecn; + bit<16> total_len; + bit<16> identification; + bit<1> reserved; + bit<1> do_not_fragment; + bit<1> more_fragments; + bit<13> frag_offset; + bit<8> ttl; + bit<8> protocol; + bit<16> header_checksum; + ipv4_addr_t src_addr; + ipv4_addr_t dst_addr; +} + +header ipv4_options_t { + varbit<480> options; +} + +struct headers_t { + ethernet_t mac; + ipv4_options_t ip; +} + +struct local_metadata_t { +} + +parser v1model_parser(packet_in pkt, out headers_t hdrs, inout local_metadata_t local_meta, inout standard_metadata_t standard_meta) { + state start { + pkt.extract(hdrs.mac); + transition select(hdrs.mac.type) { + EtherType.ETYPE_IPV4: parse_ipv4; + default: accept; + } + } + state parse_ipv4 { + ipv4_t ipv4 = pkt.lookahead(); + bit<32> byte_len = (bit<32>)(ipv4.ihl & 0xf) << 2; + pkt.extract(hdrs.ip, byte_len << 3); + transition accept; + } +} + +control compute_ip_checksum(inout headers_t headers, inout local_metadata_t local_metadata) { + apply { + } +} + +control verify_ip_checksum(inout headers_t headers, inout local_metadata_t local_metadata) { + apply { + } +} + +control egress(inout headers_t headers, inout local_metadata_t local_metadata, inout standard_metadata_t standard_metadata) { + apply { + } +} + +control ingress(inout headers_t headers, inout local_metadata_t local_metadata, inout standard_metadata_t standard_metadata) { + apply { + } +} + +control deparser(packet_out packet, in headers_t headers) { + apply { + } +} + +V1Switch(v1model_parser(), verify_ip_checksum(), ingress(), egress(), compute_ip_checksum(), deparser()) main; diff --git a/testdata/p4_16_samples_outputs/issue3702-bmv2.p4-stderr b/testdata/p4_16_samples_outputs/issue3702-bmv2.p4-stderr new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testdata/p4_16_samples_outputs/issue3702-bmv2.p4.entries.txt b/testdata/p4_16_samples_outputs/issue3702-bmv2.p4.entries.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testdata/p4_16_samples_outputs/issue3702-bmv2.p4.p4info.txt b/testdata/p4_16_samples_outputs/issue3702-bmv2.p4.p4info.txt new file mode 100644 index 00000000000..9ec92493e4c --- /dev/null +++ b/testdata/p4_16_samples_outputs/issue3702-bmv2.p4.p4info.txt @@ -0,0 +1,3 @@ +pkg_info { + arch: "v1model" +} From 8247bb9ca1ff76680973b0cd4aae83b610ea8460 Mon Sep 17 00:00:00 2001 From: Mihai Budiu Date: Sat, 19 Nov 2022 10:07:42 -0800 Subject: [PATCH 2/3] Add missing header include Signed-off-by: Mihai Budiu --- backends/bmv2/psa_switch/psaSwitch.h | 1 + 1 file changed, 1 insertion(+) diff --git a/backends/bmv2/psa_switch/psaSwitch.h b/backends/bmv2/psa_switch/psaSwitch.h index 3630fb7cb51..9a8d24ff0c2 100644 --- a/backends/bmv2/psa_switch/psaSwitch.h +++ b/backends/bmv2/psa_switch/psaSwitch.h @@ -35,6 +35,7 @@ limitations under the License. #include "frontends/p4/simplify.h" #include "frontends/p4/typeMap.h" #include "frontends/p4/unusedDeclarations.h" +#include "frontends/p4/strengthReduction.h" #include "ir/ir.h" #include "lib/big_int_util.h" #include "lib/json.h" From ee69a466102acd91a0747c9e42ac7f4fcdebfa87 Mon Sep 17 00:00:00 2001 From: Mihai Budiu Date: Sat, 19 Nov 2022 10:29:01 -0800 Subject: [PATCH 3/3] cpplint Signed-off-by: Mihai Budiu --- backends/bmv2/psa_switch/psaSwitch.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backends/bmv2/psa_switch/psaSwitch.h b/backends/bmv2/psa_switch/psaSwitch.h index 9a8d24ff0c2..de85d67e758 100644 --- a/backends/bmv2/psa_switch/psaSwitch.h +++ b/backends/bmv2/psa_switch/psaSwitch.h @@ -33,9 +33,9 @@ limitations under the License. #include "frontends/p4/evaluator/evaluator.h" #include "frontends/p4/methodInstance.h" #include "frontends/p4/simplify.h" +#include "frontends/p4/strengthReduction.h" #include "frontends/p4/typeMap.h" #include "frontends/p4/unusedDeclarations.h" -#include "frontends/p4/strengthReduction.h" #include "ir/ir.h" #include "lib/big_int_util.h" #include "lib/json.h"