This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
define_subst question
- From: Andrew Stubbs <ams at codesourcery dot com>
- To: GCC Development <gcc at gcc dot gnu dot org>
- Date: Tue, 27 Nov 2018 17:30:13 +0000
- Subject: define_subst question
I want to use define_subst like this:
(define_subst "vec_merge_with_vcc"
[(set (match_operand 0)
(match_operand 1))
(set (match_operand 2)
(match_operand 3))]
""
[(parallel
[(set (match_dup 0)
(vec_merge
(match_dup 1)
(match_operand 4 "" "0")
(match_operand 5 "" "e")))
(set (match_dup 2)
(and (match_dup 3)
(match_operand 5 "" "e")))])])
(Predicates and modes removed for brevity.)
This works perfectly except for operand 5. :-(
The problem is that I can't find a way to make them "match". As it is
the substitution creates two operands, with different numbers, which
obviously is not what I want.
The manual says that I can't do (match_dup 5), and indeed trying that
results in a segmentation fault.
The "e" register class actually contains only one register, so I tried
using (reg:DI EXEC_REG) for the second instance, but that caused an ICE
elsewhere.
I could use an unspec to make the second reference implicit, or just lie
to the compiler and pretend it's not there, but ....
How can I do this properly, please?
Thanks
Andrew