gcc.dg/debug/debug-[12].c failures on cmov targets

Richard Henderson rth@redhat.com
Wed Dec 3 23:07:00 GMT 2003


> so the lexical block containing xyzzy is discarded and the variable with it.

No, the lexical block should still exist.  I wrote this test for
Alpha, which also has conditional moves.  At -O2 -g I get:

        cmpult $31,$16,$0
        addq $0,$0,$0
        ret $31,($26),1

        .uleb128 0x5     # (DIE (0x70) DW_TAG_variable)
        .4byte  $LASF2   # DW_AT_name: "xyzzy"
        .byte   0x1      # DW_AT_decl_file
        .byte   0x4      # DW_AT_decl_line
        .4byte  0x7f     # DW_AT_type
        .byte   0x1      # DW_AT_location
        .byte   0x50     # DW_OP_reg0

That doesn't use cmov, but change the source to be = 20 and I get

        mov $31,$0
        cmovne $16,20,$0
        ret $31,($26),1

(which is 1 cycle slower on ev6, which is why we prefer the former
if we can use it).  I still get proper debug info for xyzzy.

You should dig deeper to determine where the block gets lost.


r~



More information about the Gcc mailing list