aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJoern Rennecke <joern.rennecke@embecosm.com>2012-11-29 02:39:20 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2012-11-29 02:39:20 +0000
commit9b7542b9c27aad34dfd70f4d6c3cc9034b9327a8 (patch)
tree8095015d66f0a6bd9b60a890c1be56064e569ee9 /gcc
parent2d7aa5780cebd11f16917ca3983cfd65b457317a (diff)
downloadgcc-9b7542b9c27aad34dfd70f4d6c3cc9034b9327a8.zip
gcc-9b7542b9c27aad34dfd70f4d6c3cc9034b9327a8.tar.gz
gcc-9b7542b9c27aad34dfd70f4d6c3cc9034b9327a8.tar.bz2
* config/epiphany/epiphany.md (isub_i+1): Work around generator bug.
From-SVN: r193919
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog2
-rw-r--r--gcc/config/epiphany/epiphany.md17
2 files changed, 12 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6a4c7ee3..fb11de0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -10,6 +10,8 @@
* config/epiphany/t-epiphany (SPECS): Set.
(specs): New rule.
+ * config/epiphany/epiphany.md (isub_i+1): Work around generator bug.
+
2012-11-28 Jakub Jelinek <jakub@redhat.com>
PR debug/36728
diff --git a/gcc/config/epiphany/epiphany.md b/gcc/config/epiphany/epiphany.md
index 21e619c..fb55e38 100644
--- a/gcc/config/epiphany/epiphany.md
+++ b/gcc/config/epiphany/epiphany.md
@@ -1024,19 +1024,22 @@
; use next_active_insn to look at the 'following' insn. That should
; exist, because peephole2 runs after reload, and there has to be
; a return after an fp_int insn.
+; ??? However, we can not even ordinarily match the preceding insn;
+; there is some bug in the generators such that then it leaves out
+; the check for PARALLEL before the length check for the then-second
+; main insn. Observed when compiling compatibility-atomic-c++0x.cc
+; from libstdc++-v3.
(define_peephole2
- [(match_parallel 5 "float_operation" [(match_operand 6 "" "")])
- (match_parallel 3 "float_operation"
+ [(match_parallel 3 "float_operation"
[(set (match_operand:SI 0 "gpr_operand" "")
(match_operator:SI 4 "addsub_operator"
[(match_operand:SI 1 "gpr_operand" "")
(match_operand:SI 2 "gpr_operand" "")]))
(clobber (reg:CC_FP CCFP_REGNUM))])]
- "get_attr_sched_use_fpu (peep2_next_insn (0))
- && peep2_regno_dead_p (2, CC_REGNUM)
- && get_attr_sched_use_fpu (next_active_insn (peep2_next_insn (1)))"
- [(match_dup 5)
- (parallel [(set (match_dup 0) (match_dup 4))
+ "get_attr_sched_use_fpu (prev_active_insn (peep2_next_insn (0)))
+ && peep2_regno_dead_p (1, CC_REGNUM)
+ && get_attr_sched_use_fpu (next_active_insn (peep2_next_insn (0)))"
+ [(parallel [(set (match_dup 0) (match_dup 4))
(clobber (reg:CC CC_REGNUM))])]
)