From: Faraz Shahbazker Date: Tue, 11 Jun 2019 20:09:57 +0000 (+0000) Subject: mips.c (mips_final_postscan_insn): Modify call to `mips_set_text_contents_type' to... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9570f46f965fa317b394b1d9163c1ceb597023fc;p=gcc.git mips.c (mips_final_postscan_insn): Modify call to `mips_set_text_contents_type' to indicate whether a non-debug... * config/mips/mips.c (mips_final_postscan_insn): Modify call to `mips_set_text_contents_type' to indicate whether a non-debug insn follows. * gcc.target/mips/data-sym-pool.c: Update expected output. * gcc.target/mips/data-sym-multi-pool.c: New test. From-SVN: r272169 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bf0dc947e8f..ba257665673 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-06-11 Faraz Shahbazker + + * config/mips/mips.c (mips_final_postscan_insn): Modify call + to `mips_set_text_contents_type' to indicate whether a + non-debug insn follows. + 2019-06-11 Michael Meissner * config/rs6000/rs6000-cpus.def (ISA_FUTURE_MASKS_SERVER): Delete diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index c6433dca115..0e1a68a9c46 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -20636,9 +20636,19 @@ mips_final_postscan_insn (FILE *file ATTRIBUTE_UNUSED, rtx_insn *insn, if (INSN_P (insn) && GET_CODE (PATTERN (insn)) == UNSPEC_VOLATILE && XINT (PATTERN (insn), 1) == UNSPEC_CONSTTABLE_END) - mips_set_text_contents_type (asm_out_file, "__pend_", - INTVAL (XVECEXP (PATTERN (insn), 0, 0)), - TRUE); + { + rtx_insn *next_insn = next_real_nondebug_insn (insn); + bool code_p = (next_insn != NULL + && INSN_P (next_insn) + && (GET_CODE (PATTERN (next_insn)) != UNSPEC_VOLATILE + || XINT (PATTERN (next_insn), 1) != UNSPEC_CONSTTABLE)); + + /* Switch content type depending on whether there is code beyond + the constant pool. */ + mips_set_text_contents_type (asm_out_file, "__pend_", + INTVAL (XVECEXP (PATTERN (insn), 0, 0)), + code_p); + } } /* Return the function that is used to expand the mulsidi3 pattern. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 443084486ef..302ac15bbe9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-06-11 Faraz Shahbazker + + * gcc.target/mips/data-sym-pool.c: Update expected output. + * gcc.target/mips/data-sym-multi-pool.c: New test. + 2019-06-11 Iain Sandoe PR testsuite/65364 diff --git a/gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c b/gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c new file mode 100644 index 00000000000..1936f5bf27e --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/data-sym-multi-pool.c @@ -0,0 +1,45 @@ +/* { dg-do compile } */ +/* { dg-options "-mips16 -mcode-readable=yes" } */ +/* { dg-skip-if "per-function expected output" { *-*-* } { "-flto" } { "" } } */ + +/* This testcase generates multiple constant pools within a function body. */ + +#define C(a,b) \ + if (a > b) goto gt; \ + if (a < b) goto lt; + +#define C4(x,b) C((x)[0], b) C((x)[1],b) C((x)[2],b) C((x)[3],b) +#define C16(x,y) C4(x, (y)[0]) C4(x, (y)[1]) C4(x, (y)[2]) C4(x, (y)[3]) + +#define C64(x,y) C16(x,y) C16(x+4,y) C16(x+8,y) +#define C256(x,y) C64(x,y) C64(x,y+4) C64(x,y+8) + +unsigned foo(int x[64], int y[64]) +{ + C256(x,y); + + return 0x01234567; + gt: + return 0x12345678; + lt: + return 0xF0123456; +} + +/* Check that: +1. The __pend symbol is emitted as STT_FUNCTION followed by instructions: + .type __pend_frob_, @function # Symbol # must match label. +__pend_foo_: # The symbol must match. + .insn +.L: + +2. __pend symbol at end of function has type STT_OBJECT + + .type __pend_foo_, @object +__pend_foo_: + .insn + .end foo + + */ + +/* { dg-final { scan-assembler "\t\\.type\t(__pend_foo_\[0-9\]+), @function\n\\1:\n\t\\.insn\n.L\[0-9\]+:\n" } } */ +/* { dg-final { scan-assembler "\t\\.type\t(__pend_foo_\[0-9\]+), @object\n\\1:\n\t\\.end\tfoo\n" } } */ diff --git a/gcc/testsuite/gcc.target/mips/data-sym-pool.c b/gcc/testsuite/gcc.target/mips/data-sym-pool.c index 8776d2b6e4e..f093511179b 100644 --- a/gcc/testsuite/gcc.target/mips/data-sym-pool.c +++ b/gcc/testsuite/gcc.target/mips/data-sym-pool.c @@ -16,9 +16,8 @@ __pool_frob_3: # The symbol must match. .align 2 $L3: # The label must match. .word 305419896 - .type __pend_frob_3, @function # Symbol # must match label. + .type __pend_frob_3, @object # Symbol # must match label. __pend_frob_3: # The symbol must match. - .insn that is `__pool_*'/`__pend_*' symbols inserted around a constant pool. @@ -26,4 +25,4 @@ __pend_frob_3: # The symbol must match. symbol from being placed in the constant pool at `-O0' for SVR4 code and consequently interfering with test expectations. */ -/* { dg-final { scan-assembler "\tl\[wd\]\t\\\$\[0-9\]+,(.L(\[0-9\]+))\n.*\t\\.type\t(__pool_frob_\\2), @object\n\\3:\n\t\\.align\t2\n\\1:\n\t\\.d?word\t305419896\n\t\\.type\t(__pend_frob_\\2), @function\n\\4:\n\t\\.insn\n" } } */ +/* { dg-final { scan-assembler "\tl\[wd\]\t\\\$\[0-9\]+,(.L(\[0-9\]+))\n.*\t\\.type\t(__pool_frob_\\2), @object\n\\3:\n\t\\.align\t2\n\\1:\n\t\\.d?word\t305419896\n\t\\.type\t(__pend_frob_\\2), @object\n\\4:\n" } } */