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]
Other format: [Raw text]

Re: Question about ASMCONS


Hi all,

This issue still keeps biting me, specially in the glibc upstreaming
process. I have made a bugzilla entry for this
(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88001) where I also
added my solution for the given issue.

Please can someone help me, or maybe let me know if my patch is acceptable?

Thank you,
Claudiu

On Mon, Dec 19, 2016 at 8:59 PM Claudiu Zissulescu <claziss@gmail.com> wrote:
>
> On 19/12/2016 18:06, Segher Boessenkool wrote:
> > Hi Claudiu,
> >
> > On Mon, Dec 19, 2016 at 12:28:54PM +0000, Claudiu Zissulescu wrote:
> >> I have the following rtl before asmcons pass:
> >>
> >> (insn 8 13 9 2 (set (reg:SI 157 [ list ])
> >>         (asm_operands:SI ("") ("=g") 0 [
> >>                 (const:SI (unspec:SI [
> >>                             (symbol_ref:SI ("c_const") [flags 0x2]  <var_decl 0x7f6735ad25a0 c_const>)
> >>                         ] ARC_UNSPEC_GOTOFFPC))
> >>             ]
> >>              [
> >>                 (asm_input:SI ("0") ../t02.c:9)
> >>             ]
> >>              [] ../t02.c:9)) ../t02.c:9 -1
> >>      (nil))
> >
> > [ snip ]
> >
> > asmcons eventual does reg_overlap_mentioned_p on the input of the move
> > it created with an input of the asm.  The very first thing
> > reg_overlap_mentioned_p tests for is if the thing is constant.  And it
> > is here, and that makes no sense at all (since it is an output, too!)
> >
> > So how did that happen?
> >
> Right, the reg_overlap_mentioned_p returns zero letting the insn 8
> unchanged.
> The problem is observed in crtstuff.c when compiling __do_globa_dtor_aux
> (line 398). Here it is a short test code:
>
> typedef void (*func_ptr) (void);
> static func_ptr __DTOR_LIST__[1] = { (func_ptr)(-1) };
>
> void foo (int a)
> {
>    func_ptr *dtor_list;
>    __asm ("" : "=g" (dtor_list) : "0" (__DTOR_LIST__));
>    dtor_list[a]();
> }
>
> compiled with -O1 -fpic -mcpu=archs for ARC ;) it will crash somewhere
> in verify_rtx_sharing due to the duplicated const(unspec) thingy.
>
> I was thinking to force the replacement of the input, in function.c:6781
> by adding to the condition an i == j check.
>
> Due to this issue, the mainline cannot build ARC uClibc toolchain. I
> suspect that this issue may affect also mips or nios2, but not 100% sure.
>
> Thanks,
> Claudiu
>


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