This is the mail archive of the 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 ARM]Refine scaled address expression on ARM

> -----Original Message-----
> From: Richard Earnshaw 
> Sent: Thursday, August 29, 2013 9:06 PM
> To: Bin Cheng
> Cc:
> Subject: Re: [PATCH ARM]Refine scaled address expression on ARM
> On 28/08/13 08:00, bin.cheng wrote:
> > Hi,
> > 
> > This patch refines scaled address expression on ARM.  It supports 
> > "base+index*scale" in arm_legitimate_address_outer_p.  It also tries 
> > to legitimize "base + index * scale + offset" with "reg <- base + 
> > offset;  reg
> > + index * scale" by introducing thumb2_legitimize_address.  For now 
> > + function
> > thumb2_legitimize_address is a kind of placeholder and just does the 
> > mentioned transformation by calling to try_multiplier_address.  Hoping 
> > we can improve it in the future.
> > 
> > With this patch:
> > 1) "base+index*scale" is recognized.
> That's because (PLUS (REG) (MULT (REG) (CONST))) is not canonical form.
>  So this shouldn't be necessary.  Can you identify where this
non-canoncial form is being generated?

Oh, for now ivopt constructs "index*scale" to test whether backend supports
scaled addressing mode, which is not valid on ARM, so I was going to
construct "base + index*scale" instead.  Since "base + index * scale" is not
canonical form, I will construct the canonical form and drop this part of
the patch.

Is rest of this patch OK?


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