From mboxrd@z Thu Jan 1 00:00:00 1970 From: Geoff Keating To: gcc@gcc.gnu.org, mark@codesourcery.com Subject: ssa bootstrap problem on x86 (cmpstrsi_1 pattern) Date: Sat, 22 Jul 2000 21:24:00 -0000 Message-id: <200007230424.VAA00564@localhost.cygnus.com> X-SW-Source: 2000-07/msg00708.html 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