This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug bootstrap/69727] [6 Regression] ICE in profiledbootstrap in reg_save_code at ../../gcc/caller-save.c:141


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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2016-02-09
     Ever confirmed|0                           |1

--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Steps to reproduce on non-powerpc host (no need for ppc64 binutils):
../configure --target powerpc64-linux --enable-languages=c,c++
--disable-bootstrap
make -j16
Ctrl^C it early, after it configures stuff in gcc/ subdir and starts building
there
copy over the attached auto-host.h into gcc/ subdir
cd gcc
touch auto-host.h
make -j16 cc1 cc1plus
copy over the attached caller-save.{ii,gcda} into a new subdirectory
..../cc1plus -fpreprocessed caller-save.ii -msecure-plt -quiet -dumpbase
caller-save.ii -auxbase-strip caller-save.s -g -O2 -version -fno-PIE
-fno-exceptions -fno-rtti -fasynchronous-unwind-tables -fprofile-use -o
caller-save.s
This generates (besides debug info) the same assembly as the one in native
profiledbootstrap that ICEs on the 
typedef float TFtype __attribute__ ((mode (TF)));
typedef _Complex float TCtype __attribute__ ((mode (TC)));
TCtype
__multc3 (TFtype a, TFtype b, TFtype c, TFtype d)
{
  TFtype ac, bd, ad, bc, x, y;
  TCtype res;

  ac = a * c;
  bd = b * d;
  ad = a * d;
  bc = b * c;

  __asm__ ("" : "=m"(ac) : "m"(ac));
  __asm__ ("" : "=m"(bd) : "m"(bd));
  __asm__ ("" : "=m"(ad) : "m"(ad));
  __asm__ ("" : "=m"(bc) : "m"(bc));

  x = ac - bd;
  y = ad + bc;

  if (__builtin_expect ((x) != (x), 0) && __builtin_expect ((y) != (y), 0))
    {

      _Bool recalc = 0;
      if (__builtin_expect (!__builtin_expect ((a) != (a), 0) &
!__builtin_expect (!__builtin_expect (((a) - (a)) != ((a) - (a)), 0), 1), 0) ||
__builtin_expect (!__builtin_expect ((b) != (b), 0) & !__builtin_expect
(!__builtin_expect (((b) - (b)) != ((b) - (b)), 0), 1), 0))
 {


   a = __builtin_copysignl (__builtin_expect (!__builtin_expect ((a) != (a), 0)
& !__builtin_expect (!__builtin_expect (((a) - (a)) != ((a) - (a)), 0), 1), 0)
? 1 : 0, a);
   b = __builtin_copysignl (__builtin_expect (!__builtin_expect ((b) != (b), 0)
& !__builtin_expect (!__builtin_expect (((b) - (b)) != ((b) - (b)), 0), 1), 0)
? 1 : 0, b);
   if (__builtin_expect ((c) != (c), 0)) c = __builtin_copysignl (0, c);
   if (__builtin_expect ((d) != (d), 0)) d = __builtin_copysignl (0, d);
          recalc = 1;
 }
     if (__builtin_expect (!__builtin_expect ((c) != (c), 0) &
!__builtin_expect (!__builtin_expect (((c) - (c)) != ((c) - (c)), 0), 1), 0) ||
__builtin_expect (!__builtin_expect ((d) != (d), 0) & !__builtin_expect
(!__builtin_expect (((d) - (d)) != ((d) - (d)), 0), 1), 0))
 {


   c = __builtin_copysignl (__builtin_expect (!__builtin_expect ((c) != (c), 0)
& !__builtin_expect (!__builtin_expect (((c) - (c)) != ((c) - (c)), 0), 1), 0)
? 1 : 0, c);
   d = __builtin_copysignl (__builtin_expect (!__builtin_expect ((d) != (d), 0)
& !__builtin_expect (!__builtin_expect (((d) - (d)) != ((d) - (d)), 0), 1), 0)
? 1 : 0, d);
   if (__builtin_expect ((a) != (a), 0)) a = __builtin_copysignl (0, a);
   if (__builtin_expect ((b) != (b), 0)) b = __builtin_copysignl (0, b);
   recalc = 1;
 }
     if (!recalc
   && (__builtin_expect (!__builtin_expect ((ac) != (ac), 0) &
!__builtin_expect (!__builtin_expect (((ac) - (ac)) != ((ac) - (ac)), 0), 1),
0) || __builtin_expect (!__builtin_expect ((bd) != (bd), 0) & !__builtin_expect
(!__builtin_expect (((bd) - (bd)) != ((bd) - (bd)), 0), 1), 0)
       || __builtin_expect (!__builtin_expect ((ad) != (ad), 0) &
!__builtin_expect (!__builtin_expect (((ad) - (ad)) != ((ad) - (ad)), 0), 1),
0) || __builtin_expect (!__builtin_expect ((bc) != (bc), 0) & !__builtin_expect
(!__builtin_expect (((bc) - (bc)) != ((bc) - (bc)), 0), 1), 0)))
 {

   if (__builtin_expect ((a) != (a), 0)) a = __builtin_copysignl (0, a);
   if (__builtin_expect ((b) != (b), 0)) b = __builtin_copysignl (0, b);
   if (__builtin_expect ((c) != (c), 0)) c = __builtin_copysignl (0, c);
   if (__builtin_expect ((d) != (d), 0)) d = __builtin_copysignl (0, d);
   recalc = 1;
 }
      if (recalc)
 {
   x = __builtin_huge_vall () * (a * c - b * d);
   y = __builtin_huge_vall () * (a * d + b * c);
 }
    }

  __real__ res = x;
  __imag__ res = y;
  return res;
}

testcase.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]