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: Question about ASMCONS

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

[ 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__));

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.


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