This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: general_operand() not accepting CONCAT?
- From: Ian Lance Taylor <iant at google dot com>
- To: Rask Ingemann Lambertsen <rask at sygehus dot dk>
- Cc: gcc at gcc dot gnu dot org
- Date: 25 Apr 2007 07:59:50 -0700
- Subject: Re: general_operand() not accepting CONCAT?
- References: <20070425115134.GC3106@sygehus.dk>
Rask Ingemann Lambertsen <rask@sygehus.dk> writes:
> I just got
>
> /home/rask/cvssrc/gcc/gcc/testsuite/gcc.c-torture/compile/complex-3.c:17:
> error: unrecognizable insn:
> (insn 69 67 70 5 (set (mem:SC (pre_dec:HI (reg/f:HI 12 sp)) [0 S8 A8])
> (concat:SC (reg:SF 36)
> (reg:SF 37))) -1 (nil)
> (nil))
>
> which I thought I'd covered with
>
> (define_mode_macro GT16 [SI DI TI SF DF XF SC DC XC SD DD TD CHI CSI CDI
> CTI])
>
> (define_insn_and_split "*push<mode>1"
> [(set (mem:GT16 (pre_dec:HI (reg:HI SP_REG)))
> (match_operand:GT16 0 "general_operand" "RmIpu"))]
> "TARGET_PUSH_IMM || !CONSTANT_P (operands[0])"
> "#"
> "reload_completed"
> ...
>
> but looking at recog.c, sure enough: general_operand() doesn't accept the
> (concat ...) construct. Is that intentional?
I would expect that most existing backends are not going to handle a
CONCAT correctly. If you want to change general_operand to accept
CONCAT, you will need to audit existing uses.
Ian