This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
ssa bootstrap problem on x86 (cmpstrsi_1 pattern)
- To: gcc at gcc dot gnu dot org, mark at codesourcery dot com
- Subject: ssa bootstrap problem on x86 (cmpstrsi_1 pattern)
- From: Geoff Keating <geoffk at cygnus dot com>
- Date: Sat, 22 Jul 2000 21:24:37 -0700
Hi Mark,
I've looked at the SSA bootstrap problem. It's caused by an insn
in the x86 backend which looks like:
(define_insn "cmpstrsi_1"
[(set (reg:CC 17)
(if_then_else:CC (ne (match_operand:SI 2 "register_operand" "c")
(const_int 0))
(compare:SI (mem:BLK (match_operand:SI 0 "address_operand" "S"))
(mem:BLK (match_operand:SI 1 "address_operand" "D")))
(const_int 0)))
(use (match_operand:SI 3 "immediate_operand" "i"))
(use (reg:CC 17))
(use (reg:SI 19))
(clobber (match_dup 0))
(clobber (match_dup 1))
(clobber (match_dup 2))]
...)
The problem here is the match_dups. IMHO, it would be much better if
these were written as match_scratch with '0', '1', and '2'
constraints.
Alternatively, we could detect this case in ssa.c and rewrite the insn
using a SEQUENCE, copying the first three operands. We should do this
detection only when the MD file contains constructs that make it
necessary (specifically if an insn in the .md file has a MATCH_DUP
between something it uses and something it sets), as there's likely to
be a significant performance penalty. And it'll be ugly.
Alternatively, we could declare that this pattern is inherently
incompatible with SSA and disable its use if SSA is requested.
--
- Geoffrey Keating <geoffk@cygnus.com>