------- Comment #30 from jakub at gcc dot gnu dot org 2007-12-11 15:07 ------- mark_target_live_regs doesn't recognize %r28 as live on the fallthrough insn after the branch. There are no BARRIER insns before that fallthrough insn (the jump is conditional and there are no unconditional jumps before that), so find_basic_block gives b == 2, i.e. ENTRY successor. Basic block has: ;; basic block 2, loop depth 0, count 0 ;; prev block 0, next block 3 ;; pred: ENTRY [100.0%] (fallthru) ;; succ: 24 [26.7%] (can_fallthru) 3 [73.3%] (fallthru,can_fallthru) ;; bb 2 artificial_defs: { } ;; bb 2 artificial_uses: { u-1(30){ }} ;; lr in 2 [%r2] 3 [%r3] 4 [%r4] 5 [%r5] 6 [%r6] 7 [%r7] 8 [%r8] 9 [%r9] 10 [%r10] 11 [%r11] 12 [%r12] 23 [%r23] 24 [%r24] 25 [%r25] 26 [%r26] 28 [%r28] 30 [%r30] ;; lr use 2 [%r2] 3 [%r3] 4 [%r4] 5 [%r5] 6 [%r6] 7 [%r7] 8 [%r8] 9 [%r9] 10 [%r10] 11 [%r11] 12 [%r12] 23 [%r23] 24 [%r24] 25 [%r25] 26 [%r26] 28 [%r28] 30 [%r30] ;; lr def 3 [%r3] 5 [%r5] 6 [%r6] 7 [%r7] 8 [%r8] 30 [%r30] ;; live in 2 [%r2] 3 [%r3] 4 [%r4] 5 [%r5] 6 [%r6] 7 [%r7] 8 [%r8] 9 [%r9] 10 [%r10] 11 [%r11] 12 [%r12] 23 [%r23] 24 [%r24] 25 [%r25] 26 [%r26] ;; live gen 3 [%r3] 5 [%r5] 6 [%r6] 7 [%r7] 8 [%r8] 30 [%r30] ;; live kill
In reality %r28 is live from the caller and used (multiple times) throughout the function, but it is not among df_get_live_in (BASIC_BLOCK (2)), but e.g. in lr in. CCing dataflow maintainers if they have ideas what's wrong here. -- jakub at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |zadeck at gcc dot gnu dot | |org, spark at gcc dot gnu | |dot org, bonzini at gnu dot | |org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32636