------- Comment #14 from uweigand at gcc dot gnu dot org  2006-01-20 18:39 
-------
Some additional details about the s390x failure.  This is caused by a
miscompile of the fdd2a00__write__2 support routine:

        lg      %r4,168(%r15)   # 35    *movdi_64/8     [length = 6]
        lg      %r3,160(%r15)   # 36    *movdi_64/8     [length = 6]
        cgr     %r4,%r3 # 37    *cmpdi_ccs/1    [length = 4]
        stg     %r2,168(%r15)   # 33    *movdi_64/9     [length = 6]

Note how insn 35 reads a stack slot that is uninitialized because
insn 33 has been scheduled later.  This is apparently caused by
an alias set issue.  The code at the .t97.final_cleanup level reads:

  A.63 = system__arith_64__add_with_ovflo_check (D.1421, D.1426);
  R38b = (ada__streams__Tstream_element_offsetB *) &A.63;

where the data type of A.63 is system__arith_64__int64.

This gets expanded into

(insn 32 31 33 3 (set (reg:DI 60)
        (reg:DI 2 %r2)) -1 (nil)
    (nil))

(insn 33 32 34 3 (set (mem/c/i:DI (plus:DI (reg/f:DI 39 virtual-stack-vars)
                (const_int -8 [0xfffffffffffffff8])) [26 A.63+0 S8 A64])
        (reg:DI 60)) -1 (nil)
    (nil))

(insn 34 33 35 3 (parallel [
            (set (reg:DI 43 [ R38b ])
                (plus:DI (reg/f:DI 39 virtual-stack-vars)
                    (const_int -8 [0xfffffffffffffff8])))
            (clobber (reg:CC 33 %cc))
        ]) -1 (nil)
    (nil))

(insn 35 34 36 3 (set (reg:DI 48 [ D.1430 ])
        (mem:DI (reg:DI 43 [ R38b ]) [27 S8 A64])) -1 (nil)
    (nil))

Note alias set 26 in insn 33 vs. alias set 27 in insn 35.

Any ideas why this would be the case?


-- 


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

Reply via email to