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

--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Reduced testcase:
struct A { A (double) {} _Complex double i; };
typedef int __attribute__ ((vector_size (16))) B;
typedef struct { B b; } C;
struct D { D (const B &x) : b (x) {} B b; };
static inline B foo (const double *x) { C *a; a = (C *) x; return a->b; }
static inline D baz (const A &x) { return foo ((double *) &x); }
D b = baz (0);

(In reply to Eric Botcazou from comment #5)
> I agree that the early return is awkward here.  What happens if you just
> fall through in this case?

It will force the CONCAT into memory.  I'll try the falling through for the
case when bitpos == 0 and bitsize is the whole CONCAT size if mode1 != GET_MODE
(op0) and will add logging when that happens to see how often and when that
happens.

Reply via email to