This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


On Wed, Jul 20, 2011 at 2:54 PM, H.J. Lu <hjl.tools@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).
>>
>> I agree that we still need to check naked registers. However, for
>> 64bit targets it is OK to pass both, SImode and DImode registers. We
>> are sure that SImode values in DImode regs have top 32bits equal to 0
>> in address calculations. This is not true for QImode regs (assignment
>> to lowpart only). We also have to prevent non-integer registers.
>>
>> Attached is my final version of the patch.
>>
>
> It works fine. ?Can you check it in?

Tested on x86_64-pc-linux-gnu {,-m32} and committed to mainline SVN
with following ChangeLog:

2011-07-20  Uros Bizjak  <ubizjak@gmail.com>

	PR target/49780
	* config/i386/predicates.md (no_seg_addres_operand): No more special.
	* config/i386/i386.c (ix86_decompose_address): Allow only subregs
	of DImode hard registers in base.
	(ix86_legitimate_address_p): Allow SImode and DImode base and index
	registers.

Uros.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]