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

Uroš Bizjak <ubizjak at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2015-12-21
   Target Milestone|---                         |6.0
     Ever confirmed|0                           |1

--- Comment #3 from Uroš Bizjak <ubizjak at gmail dot com> ---
This is gdb session:

(gdb) r
Starting program: /space/homedirs/uros/test/a.out 

Program aborted. Backtrace:
#0  0x2000004D927
#1  0x2000004FCDF
#2  0x20000120937
#3  0x120000AB7 in foo_ at save_1.f90:11 (discriminator 3)
#4  0x120000C1F in baz_ at save_1.f90:24

Program received signal SIGABRT, Aborted.
0x0000020000290008 in raise () from /lib/libc.so.6.1
(gdb) bt
#0  0x0000020000290008 in raise () from /lib/libc.so.6.1
#1  0x0000020000291ae4 in abort () from /lib/libc.so.6.1
#2  0x000002000004fcb0 in ?? () from
/usr/lib/gcc/alpha-unknown-linux-gnu/4.9.3/libgfortran.so.3
#3  0x0000020000120938 in _gfortran_abort () from
/usr/lib/gcc/alpha-unknown-linux-gnu/4.9.3/libgfortran.so.3
#4  0x0000000120000ab8 in foo (b=<optimized out>) at save_1.f90:11
#5  0x0000000120000c20 in baz () at save_1.f90:24
#6  0x000000012000073c in MAIN__ () at save_1.f90:27
#7  main (argc=<optimized out>, argv=<optimized out>) at save_1.f90:29
#8  0x0000020000278464 in __libc_start_main () from /lib/libc.so.6.1
#9  0x00000001200007a8 in _start ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
(gdb) f 4
#4  0x0000000120000ab8 in foo (b=<optimized out>) at save_1.f90:11
11                if (i .ne. 26 .or. j .ne. 131) call abort
(gdb) p i
$1 = 0
(gdb) p j
$2 = 131

As can be seen, "i" gets clobbered.

The difference starts with foo in f90.250r.sched1, where we now have:

;;   ======================================================
;;   -- basic block 3 from 10 to 121 -- before reload
;;   ======================================================

;;        0--> b  0: i  17 r82=`*$LC0'
;;        1--> b  0: i  16 r81=`s.894'
;;        2--> b  0: i  10 r77=`i.892'
;;        3--> b  0: i  20 r88=[r82+0xf&0xfffffffffffffff8]
;;        4--> b  0: i  19 r84=[r82+0x8&0xfffffffffffffff8]
;;        5--> b  0: i  22 r90=r82&0x7
;;        5--> b  0: i  18 r83=[r82&0xfffffffffffffff8]
;;        6--> b  0: i  27 r87=r88<<0x40-r82&0x7<<0x3
;;        6--> b  0: i  43 r106=[r81+0xf&0xfffffffffffffff8]
;;        7--> b  0: i  24 r86=r84<<0x40-r82&0x7<<0x3
;;        7--> b  0: i  31 r92=[r82+0x10&0xfffffffffffffff8]
;;        8--> b  0: i  26 r84=zxt(r84,0x40,r82<<0x3)
;;        8--> b  0: i  32 r93=[r82+0x13&0xfffffffffffffff8]
;;        9--> b  0: i  28 r87={(r90==0)?0:r87}
;;        9--> b  0: i  44 r105=[r81&0xfffffffffffffff8]
;;       10--> b  0: i  23 r83=zxt(r83,0x40,r82<<0x3)
;;       10--> b  0: i  40 r101=[r82+0x14&0xfffffffffffffff8]
;;       11--> b  0: i  25 r86={(r90==0)?0:r86}
;;       11--> b  0: i  13 r79=`j.893'
;;       12--> b  0: i  30 r84=r84|r87
;;       13--> b  0: i  29 r83=r83|r86
;;       14--> b  0: i  46 r104=unspec[r84,0x40,r81] 3
;;       15--> b  0: i  51 r106=unspec[r106,0x40,r81] 4
;;       16--> b  0: i  48 r103=unspec[r83,0x40,r81] 3
;;       17--> b  0: i  47 r84=r84<<r81<<0x3
;;       18--> b  0: i  53 r106=r106|r104
;;       18--> b  0: i  55 [r81+0xf&0xfffffffffffffff8]=r106
;;       19--> b  0: i  33 r94=r82+0x10
;;       20--> b  0: i  50 r103=r103|r84
;;       20--> b  0: i  56 [r81+0x8&0xfffffffffffffff8]=r103
;;       21--> b  0: i  34 r95=zxt(r92,0x20,r94<<0x3)
;;       21--> b  0: i  58 r109=[r81+0x13&0xfffffffffffffff8]
;;       22--> b  0: i  35 r96=r93&0x7fffffff<<0x40-r94&0x7<<0x3
;;       22--> b  0: i  59 r108=[r81+0x10&0xfffffffffffffff8]
;;       23--> b  0: i  60 r112=r81+0x10
;;       24--> b  0: i  38 r99=r95|r96
;;       25--> b  0: i  61 r111=unspec[r99,0x20,r112] 3
;;       26--> b  0: i  63 r109=unspec[r109,0x20,r112] 4
;;       27--> b  0: i  62 r110=zxn(r99#0)<<r112<<0x3
;;       28--> b  0: i  64 r108=!0xffffffff<<r112<<0x3&r108
;;       29--> b  0: i  65 r109=r109|r111
;;       29--> b  0: i  67 [r81+0x13&0xfffffffffffffff8]=r109
;;       30--> b  0: i  66 r108=r108|r110
;;       30--> b  0: i  68 [r81+0x10&0xfffffffffffffff8]=r108
;;       31--> b  0: i  41 r102=r82+0x14
;;       31--> b  0: i  69 r114=[r81+0x14&0xfffffffffffffff8]
;;       32--> b  0: i  42 r100#0=zxt(r101,0x8,r102<<0x3)
;;       33--> b  0: i  70 r113=r81+0x14
;;       34--> b  0: i  49 r83=r83<<r81<<0x3
;;       35--> b  0: i  52 r105=!0xffffffffffffffff<<r81<<0x3&r105
;;       36--> b  0: i  71 r114=!0xff<<r113<<0x3&r114
;;       37--> b  0: i  72 r115=zxn(r100)<<r113<<0x3
;;       38--> b  0: i  78 $18=0x3
;;       39--> b  0: i  79 $17=0x20
;;       40--> b  0: i  80 $16=r81+0x15
;;       41--> b  0: i  11 r78=0x1a
;;       41--> b  0: i  12 [r77]=r78
;;       42--> b  0: i  14 r80=0x83
;;       42--> b  0: i  15 [r79]=r80
;;       43--> b  0: i  54 r105=r105|r83
;;       43--> b  0: i  57 [r81&0xfffffffffffffff8]=r105
;;       44--> b  0: i  73 r115=r115|r114
;;       44--> b  0: i  74 [r81+0x14&0xfffffffffffffff8]=r115
;;       45--> b  0: i  81 {$0=call [`memset'];use $29;clobber $26;}
;;       47--> b  0: i 121 pc=L114
;;      Ready list (final):  
;;   total time = 47
;;   new head = 17
;;   new tail = 121

With the mentioned revision backed out, we got:

;;   ======================================================
;;   -- basic block 3 from 10 to 121 -- before reload
;;   ======================================================

;;        0--> b  0: i  10 r77=`i.892'
;;        1--> b  0: i  13 r79=`j.893'
;;        2--> b  0: i  11 r78=0x1a
;;        2--> b  0: i  17 r82=`*$LC0'
;;        3--> b  0: i  12 [r77]=r78
;;        3--> b  0: i  14 r80=0x83
;;        4--> b  0: i  15 [r79]=r80
;;        4--> b  0: i  78 $18=0x3
;;        5--> b  0: i  20 r88=[r82+0xf&0xfffffffffffffff8]
;;        6--> b  0: i  19 r84=[r82+0x8&0xfffffffffffffff8]
;;        7--> b  0: i  16 r81=`s.894'
;;        8--> b  0: i  27 r87=r88<<0x40-r82&0x7<<0x3
;;        8--> b  0: i  18 r83=[r82&0xfffffffffffffff8]
;;        9--> b  0: i  22 r90=r82&0x7
;;        9--> b  0: i  31 r92=[r82+0x10&0xfffffffffffffff8]
;;       10--> b  0: i  24 r86=r84<<0x40-r82&0x7<<0x3
;;       10--> b  0: i  43 r106=[r81+0xf&0xfffffffffffffff8]
;;       11--> b  0: i  26 r84=zxt(r84,0x40,r82<<0x3)
;;       11--> b  0: i  32 r93=[r82+0x13&0xfffffffffffffff8]
;;       12--> b  0: i  28 r87={(r90==0)?0:r87}
;;       12--> b  0: i  40 r101=[r82+0x14&0xfffffffffffffff8]
;;       13--> b  0: i  23 r83=zxt(r83,0x40,r82<<0x3)
;;       13--> b  0: i  44 r105=[r81&0xfffffffffffffff8]
;;       14--> b  0: i  25 r86={(r90==0)?0:r86}
;;       15--> b  0: i  30 r84=r84|r87
;;       16--> b  0: i  29 r83=r83|r86
;;       17--> b  0: i  46 r104=unspec[r84,0x40,r81] 3
;;       18--> b  0: i  51 r106=unspec[r106,0x40,r81] 4
;;       19--> b  0: i  48 r103=unspec[r83,0x40,r81] 3
;;       20--> b  0: i  47 r84=r84<<r81<<0x3
;;       21--> b  0: i  53 r106=r106|r104
;;       21--> b  0: i  55 [r81+0xf&0xfffffffffffffff8]=r106
;;       22--> b  0: i  33 r94=r82+0x10
;;       23--> b  0: i  50 r103=r103|r84
;;       23--> b  0: i  56 [r81+0x8&0xfffffffffffffff8]=r103
;;       24--> b  0: i  34 r95=zxt(r92,0x20,r94<<0x3)
;;       24--> b  0: i  58 r109=[r81+0x13&0xfffffffffffffff8]
;;       25--> b  0: i  35 r96=r93&0x7fffffff<<0x40-r94&0x7<<0x3
;;       25--> b  0: i  59 r108=[r81+0x10&0xfffffffffffffff8]
;;       26--> b  0: i  60 r112=r81+0x10
;;       27--> b  0: i  38 r99=r95|r96
;;       28--> b  0: i  61 r111=unspec[r99,0x20,r112] 3
;;       29--> b  0: i  63 r109=unspec[r109,0x20,r112] 4
;;       30--> b  0: i  62 r110=zxn(r99#0)<<r112<<0x3
;;       31--> b  0: i  64 r108=!0xffffffff<<r112<<0x3&r108
;;       32--> b  0: i  65 r109=r109|r111
;;       32--> b  0: i  67 [r81+0x13&0xfffffffffffffff8]=r109
;;       33--> b  0: i  66 r108=r108|r110
;;       33--> b  0: i  68 [r81+0x10&0xfffffffffffffff8]=r108
;;       34--> b  0: i  41 r102=r82+0x14
;;       34--> b  0: i  69 r114=[r81+0x14&0xfffffffffffffff8]
;;       35--> b  0: i  42 r100#0=zxt(r101,0x8,r102<<0x3)
;;       36--> b  0: i  70 r113=r81+0x14
;;       37--> b  0: i  49 r83=r83<<r81<<0x3
;;       38--> b  0: i  52 r105=!0xffffffffffffffff<<r81<<0x3&r105
;;       39--> b  0: i  71 r114=!0xff<<r113<<0x3&r114
;;       40--> b  0: i  72 r115=zxn(r100)<<r113<<0x3
;;       41--> b  0: i  79 $17=0x20
;;       42--> b  0: i  80 $16=r81+0x15
;;       43--> b  0: i  54 r105=r105|r83
;;       43--> b  0: i  57 [r81&0xfffffffffffffff8]=r105
;;       44--> b  0: i  73 r115=r115|r114
;;       44--> b  0: i  74 [r81+0x14&0xfffffffffffffff8]=r115
;;       45--> b  0: i  81 {$0=call [`memset'];use $29;clobber $26;}
;;       47--> b  0: i 121 pc=L114
;;      Ready list (final):  
;;   total time = 47
;;   new head = 10
;;   new tail = 121

Please note how (insn 12) and (insn 15) get moved through AND addresses. AND
address alias its neighbours, so when AND address is read and later written, it
overwrites the intervening write with stalled value.

The referred revision doesn't handle AND addresses.

The dumps can be obtained with a crosscompiler to alphaev68-linux-gnu target.

Reply via email to