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

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Some debug:
```
Breakpoint 1, precompute_register_parameters (num_actuals=2, args=0x4aa4090,
reg_parm_seen=0x7fffffffbd6c) at ../../gcc/calls.cc:1022
1022                args[i].value = expand_normal (args[i].tree_value);
(gdb) p debug_generic_expr(args[i].tree_value
A syntax error in expression, near `'.
(gdb) p debug_generic_expr(args[i].tree_value)
*.LC0
$1 = void
(gdb) p debug_rtx(args[i].reg)
(parallel:BLK [
        (expr_list:REG_DEP_TRUE (reg:DI 2 x2)
            (const_int 0 [0]))
        (expr_list:REG_DEP_TRUE (reg:DI 3 x3)
            (const_int 8 [0x8]))
    ])
$2 = void
(gdb) next
1023                preserve_temp_slots (args[i].value);
(gdb) p debug_rtx(args[i].value)
(mem/u/c:BLK (reg/f:DI 101) [0  A64])
$3 = void
(gdb) p debug_tree(args[i].tree_value)
 <var_decl 0x7ffff732ded8 *.LC0
    type <record_type 0x7ffff7321930 IF sizes-gimplified BLK
        size <integer_cst 0x7ffff741e390 constant 96>
        unit-size <integer_cst 0x7ffff733b330 constant 12>
        align:32 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff7321888
        fields <field_decl 0x7ffff731f640 a type <integer_type 0x7ffff741c5e8
int>
            SI t.c:2:25
            size <integer_cst 0x7ffff741e180 constant 32>
            unit-size <integer_cst 0x7ffff741e198 constant 4>
            align:32 warn_if_not_align:0 offset_align 128 decl_not_flexarray: 1
            offset <integer_cst 0x7ffff7402f60 constant 0>
            bit-offset <integer_cst 0x7ffff7402fa8 constant 0> context
<record_type 0x7ffff7321888 IF> chain <field_decl 0x7ffff731f6e0 b>>
        pointer_to_this <pointer_type 0x7ffff737b000> chain <type_decl
0x7ffff731f5a0 D.4585>>
    readonly used static ignored in-constant-pool BLK (null):0:0 size
<integer_cst 0x7ffff741e390 96> unit-size <integer_cst 0x7ffff733b330 12>
    align:64 warn_if_not_align:0 initial <constructor 0x7ffff733b348>
    (mem/u/c:BLK (symbol_ref/f:DI ("*.LC0") [flags 0x82] <var_decl
0x7ffff732ded8 *.LC0>) [0  A64])>
```

So expand_normal pushes the symbol_ref into its own register to begin with.
Then emit_group_load_into_temps has no way to know it is loading from a
constant decl ...

Reply via email to