From a29b099d7aa8f3819b5791f69b1d5e346e2a1018 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 20 Mar 2002 22:58:57 +0100 Subject: re PR bootstrap/4192 (fr30-elf does not build - memory exhausted building crtbegin.o) PR bootstrap/4192 * config/fr30/fr30.md (jump): Comment out clobber of fixed register. * genemit.c (output_added_clobbers_hard_reg_p): Only output return stmt if some case has been output. * gcc.c-torture/compile/20020320-1.c: New test. From-SVN: r51088 --- gcc/ChangeLog | 8 ++++++++ gcc/config/fr30/fr30.md | 7 +++++-- gcc/genemit.c | 11 ++++++++--- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.c-torture/compile/20020320-1.c | 24 ++++++++++++++++++++++++ 5 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/20020320-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1e3bb43..131cd9e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2002-03-20 Jakub Jelinek + PR bootstrap/4192 + * config/fr30/fr30.md (jump): Comment out clobber of fixed register. + + * genemit.c (output_added_clobbers_hard_reg_p): Only output return + stmt if some case has been output. + +2002-03-20 Jakub Jelinek + PR c/5972 * config/i386/i386.md (movdicc_c_rex64, movsicc_noc, movhicc_noc, movsfcc_1, movdfcc_1): Add %O2. diff --git a/gcc/config/fr30/fr30.md b/gcc/config/fr30/fr30.md index 6bdfa48..1177c68 100644 --- a/gcc/config/fr30/fr30.md +++ b/gcc/config/fr30/fr30.md @@ -1303,9 +1303,12 @@ ;; Normal unconditional jump. ;; For a description of the computation of the length ;; attribute see the branch patterns above. +;; +;; Although this instruction really clobbers r0, flow +;; relies on jump being simplejump_p in several places +;; and as r0 is fixed, this doesn't change anything (define_insn "jump" - [(set (pc) (label_ref (match_operand 0 "" ""))) - (clobber (reg:SI 0))] + [(set (pc) (label_ref (match_operand 0 "" "")))] "" "* { diff --git a/gcc/genemit.c b/gcc/genemit.c index 2d11d2b..5a7f32a 100644 --- a/gcc/genemit.c +++ b/gcc/genemit.c @@ -722,7 +722,7 @@ output_added_clobbers_hard_reg_p () { struct clobber_pat *clobber; struct clobber_ent *ent; - int clobber_p; + int clobber_p, used; printf ("\n\nint\nadded_clobbers_hard_reg_p (insn_code_number)\n"); printf (" int insn_code_number;\n"); @@ -732,12 +732,17 @@ output_added_clobbers_hard_reg_p () for (clobber_p = 0; clobber_p <= 1; clobber_p++) { + used = 0; for (clobber = clobber_list; clobber; clobber = clobber->next) if (clobber->has_hard_reg == clobber_p) for (ent = clobber->insns; ent; ent = ent->next) - printf (" case %d:\n", ent->code_number); + { + printf (" case %d:\n", ent->code_number); + used++; + } - printf (" return %d;\n\n", clobber_p); + if (used) + printf (" return %d;\n\n", clobber_p); } printf (" default:\n"); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9fd78e0..ca6d0b2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-03-20 Jakub Jelinek + + * gcc.c-torture/compile/20020320-1.c: New test. + 2002-03-19 Jakub Jelinek * gcc.c-torture/compile/20020318-1.c: New test. diff --git a/gcc/testsuite/gcc.c-torture/compile/20020320-1.c b/gcc/testsuite/gcc.c-torture/compile/20020320-1.c new file mode 100644 index 0000000..385c061 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20020320-1.c @@ -0,0 +1,24 @@ +/* PR bootstrap/4192 + This testcase caused infinite loop in flow (several places), + because flow assumes gen_jump generates simple_jump_p. */ + +typedef void (*T) (void); +extern T x[]; + +void +foo (void) +{ + static T *p = x; + static _Bool a; + T f; + + if (__builtin_expect (a, 0)) + return; + + while ((f = *p)) + { + p++; + f (); + } + a = 1; +} -- cgit v1.1