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 > >