[Bug rtl-optimization/55829] [4.8 Regression] ICE: in curr_insn_transform, at lra-constraints.c:3069 with -msse3

pinskia at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Jan 4 03:39:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55829

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2013-01-04
     Ever Confirmed|0                           |1

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> 2013-01-04 03:38:40 UTC ---
Confirmed here is a more reduced testcase:
extern double p2[];
extern double ck[];
int chk_pd(void);
int sse3_test (void)
{
  int i = 0;
  int fail = 0;
  __m128d t1 = (__m128d){*p2, 0};
  __m128d t2 = __builtin_ia32_shufpd (t1, t1, 0);
  double p10 = p2[0];
  for (; i < 80; i += 1)
    {
    ck[0] = p10;
    __builtin_ia32_storeupd (p2, t2);
    fail += chk_pd ();
    }
}

--- CUT ---
Note the first difference with -fno-expensive-optimizations is the ira dump. 
Also note if we change t1/t2 into:
  __m128d t2 = (__m128d){*p2, *p2};
It works.  The difference between those two are:
(insn 17 13 7 2 (set (reg/v:V2DF 65 [ t2 ])
        (vec_concat:V2DF (reg:DF 80 [ D.1764 ])
            (reg:DF 80 [ D.1764 ]))) t6.c:11 1467 {*vec_concatv2df}
     (nil))

(insn 10 9 5 2 (set (reg/v:V2DF 63 [ t2 ])
        (vec_duplicate:V2DF (reg:DF 62 [ D.1756 ]))) t6.c:9 1466 {vec_dupv2df}
     (nil))

Note both of those two RTL are the exactly the same, maybe we should convert
the vec_concat of the same value into vec_duplicate but that is a different
issue all together and would make this ICE latent.



More information about the Gcc-bugs mailing list