-
- Downloads
bpf: support more instructions to match CO-RE relocations
BPF supports multiple instructions to be CO-RE relocatable regardless of the position of the immediate field in the encoding. In particular, not only the MOV instruction allows a CO-RE relocation of its immediate operand, but the LD and ST instructions can have a CO-RE relocation happening to their offset immediate operand, even though those operands are encoded in different encoding bits. This patch moves matching from a more traditional matching of the UNSPEC_CORE_RELOC pattern within a define_insn to a match within the constraints of both immediates and address operands from more generic mov define_insn rule. gcc/Changelog: * config/bpf/bpf-protos.h (bpf_add_core_reloc): Renamed function to bpf_output_move. * config/bpf/bpf.cc (bpf_legitimate_address_p): Allow UNSPEC_CORE_RELOC to match an address. (bpf_insn_cost): Make UNSPEC_CORE_RELOC immediate moves expensive to prioritize loads and stores. (TARGET_INSN_COST): Add hook. (bpf_output_move): Wrapper to call bpf_output_core_reloc. (bpf_print_operand): Add support to print immediate operands specified with the UNSPEC_CORE_RELOC. (bpf_print_operand_address): Likewise, but to support UNSPEC_CORE_RELOC in addresses. (bpf_init_builtins): Flag BPF_BUILTIN_CORE_RELOC as NOTHROW. * config/bpf/bpf.md: Wrap patterns for MOV, LD and ST instruction with bpf_output_move call. (mov_reloc_core<MM:mode>): Remove now spurious define_insn. * config/bpf/constraints.md: Added "c" and "C" constraints to match immediates represented with UNSPEC_CORE_RELOC. * config/bpf/core-builtins.cc (bpf_add_core_reloc): Remove (bpf_output_core_reloc): Add function to create the CO-RE relocations based on new matching rules. * config/bpf/core-builtins.h (bpf_output_core_reloc): Add prototype. * config/bpf/predicates.md (core_imm_operand) Add predicate. (mov_src_operand): Add match for core_imm_operand. gcc/testsuite/ChangeLog: * gcc.target/bpf/btfext-funcinfo.c: Updated to changes. * gcc.target/bpf/core-builtin-fieldinfo-const-elimination.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-existence-1.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-lshift-1-be.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-lshift-1-le.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-lshift-2.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-offset-1.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-rshift-1.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-rshift-2.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-sign-1.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-sign-2.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-size-1.c: Likewise.
Showing
- gcc/config/bpf/bpf-protos.h 1 addition, 1 deletiongcc/config/bpf/bpf-protos.h
- gcc/config/bpf/bpf.cc 52 additions, 2 deletionsgcc/config/bpf/bpf.cc
- gcc/config/bpf/bpf.md 21 additions, 35 deletionsgcc/config/bpf/bpf.md
- gcc/config/bpf/constraints.md 20 additions, 0 deletionsgcc/config/bpf/constraints.md
- gcc/config/bpf/core-builtins.cc 54 additions, 17 deletionsgcc/config/bpf/core-builtins.cc
- gcc/config/bpf/core-builtins.h 2 additions, 0 deletionsgcc/config/bpf/core-builtins.h
- gcc/config/bpf/predicates.md 6 additions, 1 deletiongcc/config/bpf/predicates.md
- gcc/testsuite/gcc.target/bpf/btfext-funcinfo.c 0 additions, 2 deletionsgcc/testsuite/gcc.target/bpf/btfext-funcinfo.c
- gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-const-elimination.c 1 addition, 1 deletion...gcc.target/bpf/core-builtin-fieldinfo-const-elimination.c
- gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-existence-1.c 1 addition, 1 deletion...suite/gcc.target/bpf/core-builtin-fieldinfo-existence-1.c
- gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-1-be.c 4 additions, 4 deletions...suite/gcc.target/bpf/core-builtin-fieldinfo-lshift-1-be.c
- gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-1-le.c 4 additions, 4 deletions...suite/gcc.target/bpf/core-builtin-fieldinfo-lshift-1-le.c
- gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-2.c 3 additions, 3 deletions...estsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-2.c
- gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-offset-1.c 6 additions, 6 deletions...estsuite/gcc.target/bpf/core-builtin-fieldinfo-offset-1.c
- gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-rshift-1.c 4 additions, 4 deletions...estsuite/gcc.target/bpf/core-builtin-fieldinfo-rshift-1.c
- gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-rshift-2.c 2 additions, 2 deletions...estsuite/gcc.target/bpf/core-builtin-fieldinfo-rshift-2.c
- gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-sign-1.c 2 additions, 2 deletionsgcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-sign-1.c
- gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-sign-2.c 2 additions, 2 deletionsgcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-sign-2.c
- gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-size-1.c 4 additions, 4 deletionsgcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-size-1.c
Loading
Please register or sign in to comment