Since BPF ISA allows 32-bit ops and extensions, smaller types can be
safely promoted to SImode (vs. DImode), thus following

-       M = DImode;                             \
+       M = SImode;

Also it is desirable to keep SImode regs as is, thus promotion only
needs to be done for sub SImode values (vs. DImode), thus following

-         && GET_MODE_SIZE (M) < 8)             \
+         && GET_MODE_SIZE (M) < 4)             \

This helps generate more wN regs. This is also part of the ABI change to
be addressed in PR/124171.

However currently this causes additional selftest failures which I'm
investigating, but figured I'll send it with the rest of the series on
same theme.

        PR target/124419

gcc/ChangeLog:

        * config/bpf/bpf.h (PROMOTE_MODE): Promote modes smaller than
        SImode to SImode.

gcc/testsuite/ChangeLog:

        * gcc.target/bpf/btfext-lineinfo.c: Adjust for codegen changes.

Signed-off-by: Vineet Gupta <[email protected]>
---
 gcc/config/bpf/bpf.h                           | 7 +++----
 gcc/testsuite/gcc.target/bpf/btfext-lineinfo.c | 8 ++++----
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/gcc/config/bpf/bpf.h b/gcc/config/bpf/bpf.h
index c8dad55fd4c4..32730628febe 100644
--- a/gcc/config/bpf/bpf.h
+++ b/gcc/config/bpf/bpf.h
@@ -43,14 +43,13 @@
 #define BITS_PER_WORD 64
 #define UNITS_PER_WORD 8
 
-/* When storing an integer whose size is less than 64-bit in a
-   register, promote it to a DImode.  */
+/* Promote integer modes smaller than a word to SImode.  */
 #define PROMOTE_MODE(M, UNSIGNEDP, TYPE)       \
   do                                           \
     {                                          \
       if (GET_MODE_CLASS (M) == MODE_INT       \
-         && GET_MODE_SIZE (M) < 8)             \
-       M = DImode;                             \
+         && GET_MODE_SIZE (M) < 4)             \
+       M = SImode;                             \
     } while (0)
 
 /* Align argument parameters on the stack to 64-bit, at a minimum.  */
diff --git a/gcc/testsuite/gcc.target/bpf/btfext-lineinfo.c 
b/gcc/testsuite/gcc.target/bpf/btfext-lineinfo.c
index dc1c297d663e..9d3a68e2ddef 100644
--- a/gcc/testsuite/gcc.target/bpf/btfext-lineinfo.c
+++ b/gcc/testsuite/gcc.target/bpf/btfext-lineinfo.c
@@ -38,12 +38,12 @@ int bar_func (struct T *t)
 
 /* { dg-final { scan-assembler-times "btfext-lineinfo\.c.0\"\[\t 
\]+\[^\n\]*btf_aux_string" 1 } } */
 /* { dg-final { scan-assembler-times "4byte\[\t \]+\.LFB.\[\t \]+# insn_label" 
2 } } */
-/* { dg-final { scan-assembler-times "4byte\[\t \]+LI.\[\t \]+# insn_label" 6 
} } */
+/* { dg-final { scan-assembler-times "4byte\[\t \]+LI.\[\t \]+# insn_label" 8 
} } */
 
-/* { dg-final { scan-assembler-times "# \\(line, col\\)" 8 } } */
+/* { dg-final { scan-assembler-times "# \\(line, col\\)" 10 } } */
 /* { dg-final { scan-assembler-times "# \\(line, col\\) \\(18, 5\\)" 1 } } */
-/* { dg-final { scan-assembler-times "# \\(line, col\\) \\(20, 10\\)" 1 } } */
-/* { dg-final { scan-assembler-times "# \\(line, col\\) \\(21, 18\\)" 1 } } */
+/* { dg-final { scan-assembler-times "# \\(line, col\\) \\(20, 10\\)" 2 } } */
+/* { dg-final { scan-assembler-times "# \\(line, col\\) \\(21, 18\\)" 2 } } */
 /* { dg-final { scan-assembler-times "# \\(line, col\\) \\(22, 1\\)" 1 } } */
 /* { dg-final { scan-assembler-times "# \\(line, col\\) \\(25, 5\\)" 1 } } */
 /* { dg-final { scan-assembler-times "# \\(line, col\\) \\(28, 7\\)" 1 } } */
-- 
2.53.0

Reply via email to