BImode is treated as normal byte-wide mode and causes bug.
Bingfeng Mei
bmei@broadcom.com
Wed Dec 22 14:44:00 GMT 2010
> -----Original Message-----
> From: Paolo Bonzini [mailto:paolo.bonzini@gmail.com] On Behalf Of Paolo
> Bonzini
> Sent: 22 December 2010 14:33
> To: Claudiu Zissulescu
> Cc: Bingfeng Mei; gcc@gcc.gnu.org
> Subject: Re: BImode is treated as normal byte-wide mode and causes bug.
>
> On 12/20/2010 12:43 PM, Claudiu Zissulescu wrote:
> > Hi,
> >
> > Why don't you use a define_insn "zero_extendbisi2" which generates
> > your conversion instruction.
>
> You're right that this should be a valid workaround, but Bingfeng
> reported a bug indeed.
>
I guess Claudiu meant define_expand. There could be several workarounds, one
of which I am using now.
> (zero_extend:SI (reg:BI 120))
>
> should have been transformed to
>
> (and:SI (subreg:SI (reg:BI 120) 0)
> (const_int 1 [0xff]))
>
> and
>
> (subreg:QI (zero_extend:SI (reg:BI 120)) 0)
>
> to
>
> (and:QI (subreg:QI (reg:BI 120) 0)
> (const_int 1 [0xff]))
>
> That said, his observation that
>
> > Grep GET_MODE_PRECISION returns not many results.
>
> ... misses that GET_MODE_MASK will also return the correct value for
> fractional integer modes. This macro has quite a few occurrences in
> combine and elsewhere.
Thanks for letting me know this. Since only our target experiences such
issue, I guess no other processors have such requirements of manipulating
BImode. I can live with the workaround now.
Bingfeng
More information about the Gcc
mailing list