https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82045

--- Comment #6 from ro at CeBiTec dot Uni-Bielefeld.DE <ro at CeBiTec dot 
Uni-Bielefeld.DE> ---
>> --- Comment #4 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot
>> gnu.org> ---
> [...]
>>> Natively, I can easily reproduce the ICE with
>>> 
>>> $ cc1 -fpreprocessed libgcc2.i -quiet -mcpu=v9 -o libgcc2.s
>>> 
>>> Please note that I'm using a 32-bit compiler; maybe the problem doesn't
>>> occur on a 64-bit host?
>>
>> That's certainly a possibility, although I don't *think* we changed
>> anything in terms of variable sizes.
>
> Just to be sure, I've just built a bi-arch sparcv9-sun-solaris2.11
> compiler: the 64-bit _multc3.o builds just fine, but the compiler ICEs
> for the 32-bit just as the 32-bit compiler does.

On top of that, I've tried both x86_64-pc-linux-gnu x
sparc-sun-solaris2.11 and i686-pc-linux-gnu x
sparc-sun-solaris2.11 compilers.  Both compile the preprocessed input
just fine.

I've now run the native cc1 under gdb.  This is the full stacktrace:

#0  fancy_abort (file=file@entry=0x2b86f8 "/var/gcc/reghunt/trunk/gcc/calls.c",
line=line@entry=4563, function=function@entry=0x2b8fa0
<emit_library_call_value_1(int, rtx_def*, rtx_def*, libcall_type, machine_mode,
int, void*)::__FUNCTION__> "emit_library_call_value_1") at
/var/gcc/reghunt/trunk/gcc/diagnostic.c:1487
#1  0x005a06dc in emit_library_call_value_1 (retval=retval@entry=0,
orgfun=orgfun@entry=0xfa98e540, value=value@entry=0x0,
fn_type=fn_type@entry=LCT_NORMAL, outmode=outmode@entry=E_SImode,
nargs=nargs@entry=2, p=0xffbfdfc4, p@entry=0xffbfdfbc) at
/var/gcc/reghunt/trunk/gcc/calls.c:4562
#2  0x005a69ac in emit_library_call (orgfun=orgfun@entry=0xfa98e540,
fn_type=fn_type@entry=LCT_NORMAL, outmode=outmode@entry=E_SImode,
nargs=nargs@entry=2) at /var/gcc/reghunt/trunk/gcc/calls.c:5146
#3  0x00eac154 in sparc_emit_float_lib_cmp (x=x@entry=0xfa98c948, y=0xfa98c960,
comparison=NE) at /var/gcc/reghunt/trunk/gcc/config/sparc/sparc.c:8144
#4  0x00eac3d0 in emit_scc_insn (operands=operands@entry=0xffbfe098) at
/var/gcc/reghunt/trunk/gcc/config/sparc/sparc.c:3170
#5  0x0104c5d0 in gen_cstoretf4 (operand0=0xfa98c978, operand1=0xfa98e530,
operand2=0xfa98c948, operand3=0xfa98c960) at
/var/gcc/reghunt/trunk/gcc/config/sparc/sparc.md:779
#6  0x0099b108 in insn_gen_fn::operator() (a3=<optimized out>, a2=<optimized
out>, a1=<optimized out>, a0=<optimized out>, this=0x50a0) at
/var/gcc/reghunt/trunk/gcc/recog.h:303
#7  maybe_gen_insn (icode=icode@entry=CODE_FOR_cstoretf4, nops=nops@entry=4,
ops=ops@entry=0xffbfe1d8) at /var/gcc/reghunt/trunk/gcc/optabs.c:7046
#8  0x0099b6ec in maybe_expand_insn (icode=icode@entry=CODE_FOR_cstoretf4,
nops=nops@entry=4, ops=ops@entry=0xffbfe1d8) at
/var/gcc/reghunt/trunk/gcc/optabs.c:7076
#9  0x006eaea4 in emit_cstore (target=target@entry=0xfa9830e0,
icode=icode@entry=CODE_FOR_cstoretf4, code=code@entry=NE,
mode=mode@entry=E_TFmode, compare_mode=compare_mode@entry=E_TFmode,
unsignedp=unsignedp@entry=0, x=0xfa98c948, x@entry=0xfa98e4d0, y=0xfa98c960,
y@entry=0xfa98e4f0, normalizep=normalizep@entry=1,
target_mode=target_mode@entry=E_QImode) at
/var/gcc/reghunt/trunk/gcc/expmed.c:5325
#10 0x006eb5f0 in emit_store_flag_1 (target=target@entry=0xfa9830e0, code=NE,
op0=op0@entry=0xfa98e4d0, op1=op1@entry=0xfa98e4f0, mode=mode@entry=E_TFmode,
unsignedp=unsignedp@entry=0, normalizep=normalizep@entry=1,
target_mode=target_mode@entry=E_QImode) at
/var/gcc/reghunt/trunk/gcc/expmed.c:5563
#11 0x006eb050 in emit_store_flag (target=target@entry=0xfa9830e0,
code=code@entry=NE, op0=op0@entry=0xfa98e4d0, op1=op1@entry=0xfa98e4f0,
mode=mode@entry=E_TFmode, unsignedp=unsignedp@entry=0, normalizep=<optimized
out>, normalizep@entry=1) at /var/gcc/reghunt/trunk/gcc/expmed.c:5823
#12 0x006ec308 in emit_store_flag_force (target=target@entry=0xfa9830e0,
code=code@entry=NE, op0=0xfa98e4d0, op1=0xfa98e4f0, mode=mode@entry=E_TFmode,
unsignedp=unsignedp@entry=0, normalizep=<optimized out>, normalizep@entry=1) at
/var/gcc/reghunt/trunk/gcc/expmed.c:5956
#13 0x00713fe0 in do_store_flag (mode=<optimized out>, target=0xfa9830e0,
ops=0xffbfe458) at /var/gcc/reghunt/trunk/gcc/expr.c:11511
#14 expand_expr_real_2 (ops=ops@entry=0xffbfe500,
target=target@entry=0xfa9830e0, tmode=<optimized out>,
modifier=modifier@entry=EXPAND_NORMAL) at
/var/gcc/reghunt/trunk/gcc/expr.c:9259
#15 0x005b968c in expand_gimple_stmt_1 (stmt=0xfa89a2a0) at
/var/gcc/reghunt/trunk/gcc/cfgexpand.c:3691
#16 expand_gimple_stmt (stmt=stmt@entry=0xfa89a2a0) at
/var/gcc/reghunt/trunk/gcc/cfgexpand.c:3751
#17 0x005bd820 in expand_gimple_basic_block (bb=0xfa9780c0,
disable_tail_calls=disable_tail_calls@entry=false) at
/var/gcc/reghunt/trunk/gcc/cfgexpand.c:5753
#18 0x005c2a7c in (anonymous namespace)::pass_expand::execute (this=<optimized
out>, fun=0xfa970000) at /var/gcc/reghunt/trunk/gcc/cfgexpand.c:6360
#19 0x009c380c in execute_one_pass (pass=pass@entry=0x15d9b60) at
/var/gcc/reghunt/trunk/gcc/passes.c:2495
#20 0x009c41c0 in execute_pass_list_1 (pass=0x15d9b60, pass@entry=0x15d7440) at
/var/gcc/reghunt/trunk/gcc/passes.c:2584
#21 0x009c425c in execute_pass_list (fn=0xfa970000, pass=0x15d7440) at
/var/gcc/reghunt/trunk/gcc/passes.c:2595
#22 0x00601bd4 in cgraph_node::expand (this=0xfa80e0d8) at
/var/gcc/reghunt/trunk/gcc/cgraphunit.c:2054
#23 0x00603a1c in output_in_order () at
/var/gcc/reghunt/trunk/gcc/cgraphunit.c:2296
#24 symbol_table::compile (this=0xfa80e000) at
/var/gcc/reghunt/trunk/gcc/cgraphunit.c:2537
#25 0x006067e4 in symbol_table::finalize_compilation_unit (this=0xfa80e000) at
/var/gcc/reghunt/trunk/gcc/cgraphunit.c:2631
#26 0x00ace800 in compile_file () at /var/gcc/reghunt/trunk/gcc/toplev.c:496
#27 0x00ad1128 in do_compile () at /var/gcc/reghunt/trunk/gcc/toplev.c:2037
#28 toplev::main (this=this@entry=0xffbfea36, argc=argc@entry=7,
argv=argv@entry=0xffbfea9c) at /var/gcc/reghunt/trunk/gcc/toplev.c:2172
#29 0x012428d0 in main (argc=7, argv=0xffbfea9c) at
/var/gcc/reghunt/trunk/gcc/main.c:39

At the gcc_assert, I have

p/x mode
$17 = 0xffbfdfd4
(gdb) p *val
$18 = {code = REG, mode = E_TFmode, jump = 0, call = 0, unchanging = 0, volatil
= 0, in_struct = 0, used = 0, frame_related = 0, return_val = 0, u2 =
{original_regno = 354, insn_uid = 354, symbol_ref_flags = 354,
var_location_status = (VAR_INIT_STATUS_INITIALIZED | unknown: 352), num_elem =
354}, u = {fld = {{rt_int = 354, rt_uint = 354, rt_str = 0x162 <error: Cannot
access memory at address 0x162>, rt_rtx = 0x162, rt_rtvec = 0x162, rt_type =
354, rt_addr_diff_vec_flags = {min_align = 0, base_after_vec = 0, min_after_vec
= 0, max_after_vec = 0, min_after_base = 0, max_after_base = 0, offset_unsigned
= 0, scale = 1}, rt_cselib = 0x162, rt_tree = 0x162, rt_bb = 0x162, rt_mem =
0x162, rt_constant = 0x162, rt_cfi = 0x162}}, hwint = {1520446713775}, reg =
{regno = 354, nregs = 1, unused = 11513775, attrs = 0x0}, block_sym = {fld =
{{rt_int = 354, rt_uint = 354, rt_str = 0x162 <error: Cannot access memory at
address 0x162>, rt_rtx = 0x162, rt_rtvec = 0x162, rt_type = 354,
rt_addr_diff_vec_flags = {min_align = 0, base_after_vec = 0, min_after_vec = 0,
max_after_vec = 0, min_after_base = 0, max_after_base = 0, offset_unsigned = 0,
scale = 1}, rt_cselib = 0x162, rt_tree = 0x162, rt_bb = 0x162, rt_mem = 0x162,
rt_constant = 0x162, rt_cfi = 0x162}, {rt_int = 28290991, rt_uint = 28290991,
rt_str = 0x1afafaf <error: Cannot access memory at address 0x1afafaf>, rt_rtx =
0x1afafaf, rt_rtvec = 0x1afafaf, rt_type = 28290991, rt_addr_diff_vec_flags =
{min_align = 1, base_after_vec = 1, min_after_vec = 0, max_after_vec = 1,
min_after_base = 0, max_after_base = 1, offset_unsigned = 1, scale = 175},
rt_cselib = 0x1afafaf, rt_tree = 0x1afafaf, rt_bb = 0x1afafaf, rt_mem =
0x1afafaf, rt_constant = 0x1afafaf, rt_cfi = 0x1afafaf}}, block = 0x0, offset =
11582255486992739}, rv = {cl = 0, decimal = 0, sign = 0, signalling = 0,
canonical = 0, uexp = 354, sig = {28290991, 0, 2947526575, 2696704, 355}}, fv =
{data = {low = 1520446713775, high = 2947526575}, mode = 2696704}, hwiv = {elem
= {1520446713775}}}}

No idea why the mode value would be corrupted here:
sparc_emit_float_lib_cmp passes in a TFmode at this point.

        Rainer

Reply via email to