------- Comment #19 from jakub at gcc dot gnu dot org 2007-08-29 08:07 -------
Binary search among the routines in java_raw_api.c with -fno-inline shows
the noclass testcase fails if either ffi_java_raw_call or
ffi_java_translate_args
is compiled with -O2 -fdce, if both are compiled with -O2 -fno-dce the testcase
succeeds.
The assembly diff for ffi_java_raw_call is fairly small:
--- /tmp/j4.s1 2007-08-29 10:05:43.000000000 +0200
+++ /tmp/j4.s2 2007-08-29 10:05:49.000000000 +0200
@@ -51,12 +51,6 @@ ffi_java_raw_call:
# /tmp/j4.i:1008
.loc 1 1008 0
lwz 0,0(1)
- # /tmp/j4.i:1007
- .loc 1 1007 0
- mr 31,1
-.LCFI9:
- # /tmp/j4.i:1008
- .loc 1 1008 0
lwz 9,4(3)
slwi 9,9,2
addi 9,9,30
@@ -150,10 +144,6 @@ ffi_java_raw_call:
.uleb128 0x2
.byte 0x9d # DW_CFA_offset, column 0x1d
.uleb128 0x3
- .byte 0x4 # DW_CFA_advance_loc4
- .4byte .LCFI9-.LCFI8
- .byte 0xd # DW_CFA_def_cfa_register
- .uleb128 0x1f
.align 2
.LEFDE0:
#NO_APP
@@ -207,10 +197,6 @@ ffi_java_raw_call:
.uleb128 0x2
.byte 0x9d # DW_CFA_offset, column 0x1d
.uleb128 0x3
- .byte 0x4 # DW_CFA_advance_loc4
- .4byte .LCFI9-.LCFI8
- .byte 0xd # DW_CFA_def_cfa_register
- .uleb128 0x1f
.align 2
.LEFDE1:
#NO_APP
@@ -224,14 +210,9 @@ ffi_java_raw_call:
.2byte 0x1 # Location expression size
.byte 0x51 # DW_OP_reg1
.4byte .LCFI0-.Ltext0 # Location list begin address (*.LLST0)
- .4byte .LCFI9-.Ltext0 # Location list end address (*.LLST0)
- .2byte 0x2 # Location expression size
- .byte 0x71 # DW_OP_breg1
- .sleb128 32
- .4byte .LCFI9-.Ltext0 # Location list begin address (*.LLST0)
.4byte .LFE28-.Ltext0 # Location list end address (*.LLST0)
.2byte 0x2 # Location expression size
- .byte 0x8f # DW_OP_breg31
+ .byte 0x71 # DW_OP_breg1
.sleb128 32
.4byte 0x0 # Location list terminator begin (*.LLST0)
.4byte 0x0 # Location list terminator end (*.LLST0)
Investigating (though my guess is this is caused by dataflow).
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32758