This is the mail archive of the gcc@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]

Re: Why can't CSE recognize const_int's in HIGH LO_SUM pair?


> On Fri, Sep 07, 2001 at 09:30:05PM -0400, John David Anglin wrote:
> > I think the philosophy was to make the rtl match as closely as
> > possible the machine code.
> 
> Um, no, that's plainly false.  The machine will load some number
> that has high bits set, and add some number that has low bits set.
> If you ask Alpha to load 0x10001000, you'll get
> 
> 	(set (reg) (const_int 0x10000000))
> 	(set (reg) (plus (reg) (const_int 0x1000))
> 
> which is exactly what the machine code is doing.  No need for 
> high/lo_sum, and by not using them, we expose the exact constant
> fragments to cse/combine/etc.

I see what you saying.  Is jump expansion smart enough to figure out
that the final result for the above is the constant 0x10001000?  I'll
try to look into what's involved in changing to the above next week.

I think what has confused the issue is that the HP assembler knows how
to extract the high and low parts.  However, as you note, there are
benefits to creating the high and low parts directly in the compiler.

Dave
-- 
J. David Anglin                                  dave.anglin@nrc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6605)


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