On Thu, Sep 10, 2020 at 5:41 PM Eric Botcazou <botca...@adacore.com> wrote:
>
> > I'd say there must be (wishful thinking) some expand_expr
> > modifier that guarantees this?  Alternatively use
> >
> >      reg = force_reg (mode, reg);

I did a try, seems like force_reg didn't handle PARALLE :(

> >
> > instead of assign_stack_temp & emit_group_store?
> >
> > That said, I don't know very much about the fancy ways to handle
> > stores from PARALLEL - but doesn't PARALLEL mean we can just take
> > any of its members as source?  How does 'reg' look like exactly
> > in your case?  What does 'to' expand to?

'reg' look like this;
(parallel:TI [
    (expr_list:REG_DEP_TRUE (reg:SI 72)
        (const_int 0 [0]))
    (expr_list:REG_DEP_TRUE (reg:DF 73)
        (const_int 8 [0x8]))])

'to' is global var decl as struct S {int a; double b;}, align to 4,
and TYPE_MODE is TImode,
and TImode requires 8 byte alignment.


>
> No, PARALLEL describes a multi-register layout, typically a return value with
> aggregate type, and you need to use emit_group_store to decipher it properly.
>
> emit_group_store should already be able to handle misaligned stores I think.
>
> --
> Eric Botcazou
>
>

Reply via email to