http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55195
Jorn Wolfgang Rennecke <amylaar at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |law at redhat dot com Component|middle-end |target --- Comment #4 from Jorn Wolfgang Rennecke <amylaar at gcc dot gnu.org> 2012-11-04 17:31:52 UTC --- (In reply to comment #3) In the ccA1Vjgkjx.234r.shorten dump file, between L19464 and L19463, there is but one call instruction, a basic block start, a barrier, and some 600 NOTE_INSN_VAR_LOCATION: (code_label 4141 28778 2472 19464 "" [1 uses]) (note 2472 4141 3318 [bb 311] NOTE_INSN_BASIC_BLOCK) (call_insn:TI 3318 2472 3319 (parallel [ (call (mem:SI (symbol_ref/v:SI ("@_Jv_ThrowBadArrayIndex") [flags 0x241] <function_decl 0xb73b8700 _Jv_ThrowBadArrayIndex>) [0 S4 A32]) (const_int 16 [0x10])) (clobber (reg:SI 1 %r1)) (clobber (reg:SI 2 %r2)) (use (reg:SI 19 %r19)) (use (const_int 0 [0])) ]) /ssd/synopsys/arc_gnu_4.8-r192641/gcc-4.8/libjava/classpath/gnu/java/nio/charset/MacSymbol.java:73 198 {*call_symref_pic_post_reload} (expr_list:REG_DEAD (reg:SI 26 %r26) (expr_list:REG_DEAD (reg:SI 19 %r19) (expr_list:REG_NORETURN (const_int 0 [0]) (nil)))) (expr_list:REG_CC_SETTER (use (reg:SI 26 %r26)) (nil))) (barrier 3319 3318 28981) (note 28981 3319 28980 (nil) NOTE_INSN_CALL_ARG_LOCATION) ... (note 29183 29182 4140 (var_location D.16611 (nil)) NOTE_INSN_VAR_LOCATION) (code_label 4140 29183 2459 19463 "" [1 uses]) The instruction call_symref_pic_post_reload has the following length attribute setting: (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 0)")) Such a length attribute is not considered variable by shorten_branches. You need to include a clause that is directly in the attribute, e.g. (and (match_test "0") (eq (match_dup 0) (pc)))