Launchpad has imported 4 comments from the remote bug at
https://bugs.linaro.org/show_bug.cgi?id=331.

If you reply to an imported comment from within Launchpad, your comment
will be sent to the remote bug automatically. Read more about
Launchpad's inter-bugtracker facilities at
https://help.launchpad.net/InterBugTracking.

------------------------------------------------------------------------
On 2014-08-06T23:02:47+00:00 Matthias Klose wrote:

Created attachment 92
preprocessed source

seen with 4.9 linaro 2014.07, works with -O1

$ g++ -c -O2 -fPIE pfs_host.ii
/home/doko/tmp/mysql-5.6-5.6.19/storage/perfschema/pfs_host.cc: In function 
'PFS_host* find_or_create_host(PFS_thread*, const char*, uint)':
/home/doko/tmp/mysql-5.6-5.6.19/storage/perfschema/pfs_host.cc:289:1: error: 
could not split insn
 }
 ^
(insn:TI 304 300 305 (parallel [
            (set (reg:SI 2 x2 [orig:153 D.16667 ] [153])
                (mem/v:SI (reg/f:DI 1 x1 [orig:113 D.16671 ] [113]) [-1  S4 
A32]))
            (set (mem/v:SI (reg/f:DI 1 x1 [orig:113 D.16671 ] [113]) [-1  S4 
A32])
                (unspec_volatile:SI [
                        (ior:SI (mem/v:SI (reg/f:DI 1 x1 [orig:113 D.16671 ] 
[113]) [-1  S4 A32])
                            (const_int 0 [0]))
                        (const_int 5 [0x5])
                    ] UNSPECV_ATOMIC_OP))
            (clobber (reg:CC 66 cc))
            (clobber (reg:SI 3 x3 [330]))
            (clobber (reg:SI 4 x4 [331]))
        ]) /home/doko/tmp/mysql-5.6-5.6.19/include/my_atomic.h:217 2338 
{atomic_fetch_orsi}
     (expr_list:REG_UNUSED (reg:CC 66 cc)
        (expr_list:REG_UNUSED (reg:SI 4 x4 [331])
            (expr_list:REG_UNUSED (reg:SI 3 x3 [330])
                (nil)))))
/home/doko/tmp/mysql-5.6-5.6.19/storage/perfschema/pfs_host.cc:289:1: internal 
compiler error: in final_scan_insn, at final.c:2952
Please submit a full bug report,
with preprocessed source if appropriate.

Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.9/+bug/1353729/comments/0

------------------------------------------------------------------------
On 2014-08-21T17:16:47+00:00 Palachev-ilya wrote:

Created attachment 104
Reduced preprocessed source code from the example above

The mentioned testcase can be reduced to 47 lines of code.
I cannot reduce anymore.

The error is similiar, but is somehow different from yours:

pfs_host.ii:47:1: error: could not split insn
 }
 ^
(insn:TI 71 72 73 (parallel [
            (set (mem/v:SI (reg/f:DI 19 x19 [117]) [-1  S4 A32])
                (unspec_volatile:SI [
                        (ior:SI (mem/v:SI (reg/f:DI 19 x19 [117]) [-1  S4 A32])
                            (const_int 0 [0]))
                        (const_int 5 [0x5])
                    ] UNSPECV_ATOMIC_OP))
            (clobber (reg:CC 66 cc))
            (clobber (reg:SI 1 x1 [143]))
            (clobber (reg:SI 2 x2 [144]))
        ]) pfs_host.ii:32 2326 {atomic_orsi}
     (expr_list:REG_DEAD (reg/f:DI 19 x19 [117])
        (expr_list:REG_UNUSED (reg:CC 66 cc)
            (expr_list:REG_UNUSED (reg:SI 2 x2 [144])
                (expr_list:REG_UNUSED (reg:SI 1 x1 [143])
                    (nil))))))
pfs_host.ii:47:1: internal compiler error: in final_scan_insn, at final.c:2957
0xb2b8c5 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*)
        /home/ilya/cbuild2/build/snapshots/gcc.git/gcc/rtl-error.c:109
0x9030b1 final_scan_insn(rtx_def*, _IO_FILE*, int, int, int*)
        /home/ilya/cbuild2/build/snapshots/gcc.git/gcc/final.c:2957
0x903352 final(rtx_def*, _IO_FILE*, int)
        /home/ilya/cbuild2/build/snapshots/gcc.git/gcc/final.c:2027
0x903b52 rest_of_handle_final
        /home/ilya/cbuild2/build/snapshots/gcc.git/gcc/final.c:4453
0x903b52 execute
        /home/ilya/cbuild2/build/snapshots/gcc.git/gcc/final.c:4528
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://bugs.launchpad.net/gcc-linaro> for instructions.

Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.9/+bug/1353729/comments/2

------------------------------------------------------------------------
On 2014-08-21T17:19:36+00:00 Palachev-ilya wrote:

The compiler fails after function split_insns (generaged from md) fails
with the following arguments:

pattern =

(parallel [
        (set (mem/v:SI (reg/f:DI 19 x19 [117]) [-1  S4 A32])
            (unspec_volatile:SI [
                    (ior:SI (mem/v:SI (reg/f:DI 19 x19 [117]) [-1  S4 A32])
                        (const_int 0 [0]))
                    (const_int 5 [0x5])
                ] UNSPECV_ATOMIC_OP))
        (clobber (reg:CC 66 cc))
        (clobber (reg:SI 1 x1 [143]))
        (clobber (reg:SI 2 x2 [144]))
    ])

insn =

(insn:TI 71 72 73 (parallel [
            (set (mem/v:SI (reg/f:DI 19 x19 [117]) [-1  S4 A32])
                (unspec_volatile:SI [
                        (ior:SI (mem/v:SI (reg/f:DI 19 x19 [117]) [-1  S4 A32])
                            (const_int 0 [0]))
                        (const_int 5 [0x5])
                    ] UNSPECV_ATOMIC_OP))
            (clobber (reg:CC 66 cc))
            (clobber (reg:SI 1 x1 [143]))
            (clobber (reg:SI 2 x2 [144]))
        ]) pfs_host.ii:32 2326 {atomic_orsi}
     (expr_list:REG_DEAD (reg/f:DI 19 x19 [117])
        (expr_list:REG_UNUSED (reg:CC 66 cc)
            (expr_list:REG_UNUSED (reg:SI 2 x2 [144])
                (expr_list:REG_UNUSED (reg:SI 1 x1 [143])
                    (nil))))))

(from gdb output of debug_rtx(pat) and debug_rtx(insn))

Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.9/+bug/1353729/comments/3

------------------------------------------------------------------------
On 2014-08-22T16:51:25+00:00 Palachev-ilya wrote:

Created attachment 110
The patch that fixes error (maybe incorrect!)

The error is related with legacy built-in functions for atomic memory access
https://gcc.gnu.org/onlinedocs/gcc-4.9.1/gcc/_005f_005fsync-Builtins.html#_005f_005fsync-Builtins

Such builtins are expanded to atomic_* instructions at expand pass.

It has been found that usually all atomic_* RTL instructions (except 
atomic_store*) are splitted out after pass split2 (you can check it by 
compiling sync-1.c from gcc testuite). So there must not be any atomic_* after 
split2 (except atomic_store*).
But in our case insn atomic_orsi was not splitted out after split2 and stayed 
in code till to the final pass.

Final pass also tries to split all instrutions, but it fails with
assertion, if at least 1 insn can not be splitted.

So the first erroneous behavior appears at least at split2 pass.

It checks the operand of atomic_orsi, using function
aarch64_logical_operand return false for 0.

In the attached patch i tried to allow aarch64_logical_operand  to work
with 0 case.

Is it correct?

Reply at:
https://bugs.launchpad.net/ubuntu/+source/gcc-4.9/+bug/1353729/comments/4


** Changed in: linaro
       Status: Unknown => New

** Changed in: linaro
   Importance: Unknown => Wishlist

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1353729

Title:
  [4.9 Regression] ICE in final_scan_insn, at final.c:2952 (aarch64
  -linux-gnu)

To manage notifications about this bug go to:
https://bugs.launchpad.net/linaro/+bug/1353729/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to