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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |NEW

--- Comment #21 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Ah, ok, so the difference is in your case for some reason I don't understand
you get:
;; b[2180000000000000000][8] = 1;

(insn 28 27 29 (set (reg/f:DI 104)
        (symbol_ref:DI ("b") [flags 0x2]  <var_decl 0x7f98b10d7ea0 b>))
"small.c":9 -1
     (nil))

(insn 29 28 30 (set (reg:DI 105)
        (const_int 162675373468811328 [0x241f063e9500040])) "small.c":9 -1
     (nil))

(insn 30 29 31 (parallel [
            (set (reg/f:DI 106)
                (plus:DI (reg/f:DI 104)
                    (reg:DI 105)))
            (clobber (reg:CC 17 flags))
        ]) "small.c":9 -1
     (nil))

(insn 31 30 0 (set (mem:DI (reg/f:DI 106) [2 b S8 A128])
        (const_int 1 [0x1])) "small.c":9 -1
     (nil))
while I get:
;; b[2180000000000000000][8] = 1;

(insn 28 27 29 (set (reg/f:DI 104)
        (symbol_ref:DI ("b") [flags 0x2]  <var_decl 0x7f9eb9c05ea0 b>))
"small.c":9 -1
     (nil))

(insn 29 28 30 (set (reg:DI 105)
        (const_int -9060696663385964480 [0x8241f063e9500040])) "small.c":9 -1
     (nil))

(insn 30 29 31 (parallel [
            (set (reg/f:DI 106)
                (plus:DI (reg/f:DI 104)
                    (reg:DI 105)))
            (clobber (reg:CC 17 flags))
        ]) "small.c":9 -1
     (nil))

(insn 31 30 0 (set (mem:DI (reg/f:DI 106) [2 b S8 A128])
        (const_int 1 [0x1])) "small.c":9 -1
     (nil))

Note that the topmost bit is lost.

Anyway, if I write what I see in your dump:
int a;
long b[1][9];
typedef long V __attribute__((vector_size (16), may_alias));

void
foo ()
{ 
  V *c = (V *) ((char *) b + -9060696663385964544);
  *c = (V) { 1, 1 };
  c++;
  *c = (V) { 1, 1 }; 
  c++;
  *c = (V) { 1, 1 };
  c++;
  *c = (V) { 1, 1 }; 
  long __attribute__((may_alias)) *d = (long *) ((char *) b +
162675373468811328);
  *d = 1;
}

then I get the ICE you are getting, so I'll have a look at that.

Reply via email to