On Fri, Dec 6, 2013 at 11:40 AM, Bin.Cheng <amker.ch...@gmail.com> wrote: > On Fri, Dec 6, 2013 at 6:19 PM, Richard Biener > <richard.guent...@gmail.com> wrote: >> On Mon, Nov 25, 2013 at 7:41 PM, Jeff Law <l...@redhat.com> wrote: >>> On 11/25/13 02:22, bin.cheng wrote: >>> >>> Unless there's a PR for this problem, I think this needs to wait. >> >> I agree. Btw, please split the patch. > Yes, I will get back to this after entering stage 1 again :) > > Hi Richard, > I talked with you about clean strip_offset_1 up after this series of > base simplification patches, but I realized it's not safe because > affine facility has it's limit, like can only support 8 elements. > Though the cleanup passes bootstrap and test on x86/x86_64 and most of > codes in strip_offset_1 won't be executed usually, I guess we'd better > to live with it, so what do you think?
Not sure - I'm lacking some context here ;) If you have a cleanup patch fine - WRT the affine limit of 8 elements, further elements will just add to the rest tree. This is to limit compile-time. Richard. > Thanks, > bin > >> >> Index: gcc/tree-affine.c >> =================================================================== >> --- gcc/tree-affine.c (revision 205087) >> +++ gcc/tree-affine.c (working copy) >> @@ -328,7 +328,19 @@ tree_to_aff_combination (tree expr, tree type, aff >> double_int::from_uhwi (bitpos / BITS_PER_UNIT)); >> core = build_fold_addr_expr (core); >> if (TREE_CODE (core) == ADDR_EXPR) >> - aff_combination_add_elt (comb, core, double_int_one); >> + { >> + /* Handle &MEM[ptr + CST] in core part of complex reference. */ >> + if (TREE_CODE (TREE_OPERAND (core, 0)) == MEM_REF) >> + { >> + core = TREE_OPERAND (core, 0); >> + tree_to_aff_combination (TREE_OPERAND (core, 0), type, &tmp); >> + aff_combination_add (comb, &tmp); >> + tree_to_aff_combination (TREE_OPERAND (core, 1), sizetype, &tmp); >> + aff_combination_add (comb, &tmp); >> + } >> + else >> + aff_combination_add_elt (comb, core, double_int_one); >> + } >> else >> { >> tree_to_aff_combination (core, type, &tmp) >> >> please handle the offset before taking the address, thus >> >> if (TREE_CODE (core) == MEM_REF) >> { >> add constant offset; >> core = TREE_OPERAND (core, 0); >> } >> else >> core = build_fold_addr_expr (core); >> >> that simplifies things and avoids the address building. >> >> Richard. >> >>> jeff >>> >>> > > > > -- > Best Regards.