On 11/19/19 4:42 PM, Jakub Jelinek wrote:
> Hi!
>
> On the following testcase we ICE on i686-linux (32-bit), because we store
> (first 96-bit, then 72-bit) structure into the first part of a 2x 96-bit
> complex long double, and for 96-bit floats there is no corresponding
> integral mode that covers it and we ICE when op0 is not in MEM (it is a
> REG).
> The following patch handles the simple case where the whole dest REG is
> covered and value is a MEM using a load from the memory, and for the rest
> just spills on the stack, similarly how we punt when for stores to complex
> REGs if the bitsize/bitnum cover portions of both halves.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>
> 2019-11-19 Jakub Jelinek <ja...@redhat.com>
>
> PR middle-end/90840
> * expmed.c (store_bit_field_1): Handle the case where op0 is not a MEM
> and has a mode that doesn't have corresponding integral type.
>
> * gcc.c-torture/compile/pr90840.c: New test.
OK
jeff