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

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
   <bb 6> [local count: 105119324]:
+  _13 = (unsigned long) g_33;
+  _1 = (unsigned long) p1_20(D);
+  _49 = _13 - _1;
+  ivtmp.19_28 = _49 + 18446744073709551608;

   <bb 7> [local count: 955630224]:
-  # g_34 = PHI <g_22(14), g_33(6)>
   # c_lsm.11_3 = PHI <c_lsm.11_8(14), _14(D)(6)>
   # c_lsm_flag.12_7 = PHI <c_lsm_flag.12_15(14), 0(6)>
-  g_22 = g_34 + 18446744073709551608;
-  _5 = g_22 - p1_20(D);
+  # ivtmp.19_41 = PHI <ivtmp.19_29(14), ivtmp.19_28(6)>
+  _5 = (long int) ivtmp.19_41;
   _6 = _5 /[ex] 8;
   b = _6;
-  _9 = (long unsigned int) _5;
-  _10 = p3_24(D) + _9;
-  _11 = *_10;
+  _50 = (void *) ivtmp.19_41;
+  _51 = (sizetype) p3_24(D);
+  _11 = MEM[(long long int *)_50 + _51 * 1];
   if (_11 != 0)
     goto <bb 8>; [50.00%]
   else
@@ -91,7 +103,8 @@
   <bb 9> [local count: 955630224]:
   # c_lsm.11_8 = PHI <c_lsm.11_3(7), 3(8)>
   # c_lsm_flag.12_15 = PHI <c_lsm_flag.12_7(7), 1(8)>
-  if (p1_20(D) != g_22)
+  ivtmp.19_29 = ivtmp.19_41 - 8;
+  if (ivtmp.19_29 != 18446744073709551608)
     goto <bb 14>; [89.00%]
   else
     goto <bb 10>; [11.00%]


and segfaults at

=> 0x0000000000400614 <+148>:   cmpq   $0x0,(%rdx,%rax,1)

(gdb) p p3
$5 = (long long *) 0x7fffffffdd68
(gdb) p/x $rdx
$4 = 0x7fffffffdd68
(gdb) p/x $rax
$6 = 0xffffffffff801290


(get_scalar_evolution
  (scalar = _10)
  (scalar_evolution = {p3_24(D) + (((unsigned long) g_33 - (unsigned long)
p1_20(D)) + 18446744073709551608), +, 18446744073709551608}_2))
)

IV struct:
  SSA_NAME:     _10
  Type: long long int *
  Base: (long long int *) ((((unsigned long) p3_24(D) + (unsigned long) g_33) -
(unsigned long) p1_20(D)) + 18446744073709551608)
  Step: 18446744073709551608
  Object:       0
  Biv:  N
  Overflowness wrto loop niter: No-overflow


So in the end IVOPTs choses a base object that isn't the base but that
should be OK here.  So something goes wrong elsewhere - on RTL?

Reply via email to