> -----Original Message----- > From: Richard Earnshaw > Sent: Thursday, August 29, 2013 9:06 PM > To: Bin Cheng > Cc: gcc-patches@gcc.gnu.org > 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? Thanks. bin