PATCH [6/n] X32: Supprot 32bit address

H.J. Lu hjl.tools@gmail.com
Tue Jul 19 18:33:00 GMT 2011


On Tue, Jul 19, 2011 at 10:33 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
> On Tue, Jul 19, 2011 at 6:37 PM, Uros Bizjak <ubizjak@gmail.com> wrote:
>>>> Sometimes, the compiler is really creative in inventing instructions:
>>>>
>>>> (insn 47 46 49 7 (set (reg:SI 68 [ D.1686 ])
>>>>         (subreg:SI (plus:SF (reg:SF 159 [ D.1685 ])
>>>>                 (reg:SF 159 [ D.1685 ])) 0)) omp_atomic1.f90:17 247 {*lea_2}
>>>>      (expr_list:REG_DEAD (reg:SF 159 [ D.1685 ])
>>>>         (nil)))
>>>>
>>>> Really funny.
>>>
>>> That's the job of combiner to try all kinds of stuff and it is the
>>> responsibility of the backend to reject those.  I think it would be better
>>> to get back to testing Pmode in the legitimate address hook, perhaps
>>> allowing ptr_mode too in addition to Pmode (which for -m32/-m64 won't mean
>>> any change, just for -mx32).
>>
>> Actually, there is a bypass in ix86_decompose_address, and this RTX
>> squeezed through. IMO constructs like this should be rejected in
>> i_d_a, which effectively only moves Pmode/ptr_mode check here.
>>
>> I'm looking into it.
>
> The problem was in fact the declaration of no_seg_address_operand
> predicate that was defined as special predicate and this way ignoring
> the mode of the operand.
>
> Attached patch also includes check for DImode SUBREGS for base
> register, to eventually save x32 some trouble in future.
>
> I'm currently regression testing the patch added to the patch that
> removed Pmode checks.
>
> H.J., can you please test it on x32?
>

Doing it now.

Thanks.

-- 
H.J.



More information about the Gcc-patches mailing list