This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Reload generate invalid instruction on ppc64
- From: Alan Modra <amodra at gmail dot com>
- To: Carrot Wei <carrot at google dot com>
- Cc: vmakarov at redhat dot com, David Edelsohn <dje dot gcc at gmail dot com>, GCC Development <gcc at gcc dot gnu dot org>
- Date: Tue, 5 Aug 2014 13:32:00 +0930
- Subject: Re: Reload generate invalid instruction on ppc64
- Authentication-results: sourceware.org; auth=none
- References: <CAEe8uEDftFtsBzhrj5Ab2yj+-uqzAXF8bKZDjjFm8UG-KL24Uw at mail dot gmail dot com> <CAEe8uEB8ZntdO5uHQN-zSCE3fiVC=VyQ2pr_JF+01Jt+X0jVZg at mail dot gmail dot com>
On Mon, Aug 04, 2014 at 05:54:04PM -0700, Carrot Wei wrote:
> Another problem is in the definition of insn pattern "*movdi_internal64".
>
> (define_insn "*movdi_internal64"
> [(set (match_operand:DI 0 "nonimmediate_operand"
> "=Y,r,r,r,r,r,?m,?*d,?*d,r,*h,*h,r,?*wg,r,?*wm")
> (match_operand:DI 1 "input_operand"
> "r,Y,r,I,L,nF,d,m,d,*h,r,0,*wg,r,*wm,r"))]
> "TARGET_POWERPC64
> && (gpc_reg_operand (operands[0], DImode)
> || gpc_reg_operand (operands[1], DImode))"
>
> The predicates of this insn pattern allow the moving of an integer to
> VSX register, but there is no constraint allow this case. Can this
> cause problem in reload?
Probably, just as you found with fprs. The underlying issue is that
the operand predicates don't match the operand constraints. What's
more, you can't make them match without breaking up the insn, or
adding a whole lot of extra alternatives.
--
Alan Modra
Australia Development Lab, IBM