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

Andrey Belevantsev <abel at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |abel at gcc dot gnu.org

--- Comment #9 from Andrey Belevantsev <abel at gcc dot gnu.org> 2012-01-20 
07:45:57 UTC ---
(In reply to comment #8)
> For ud_dce it's simplest to add/remove fake edges around it.  For 4.8 it could
> be worthwhile to try adding fake edges around all RTL passes (at least those
> running in cfglayout mode) and see what breaks...

Do you mean just add/remove fake edges in init/fini_dce?  For Jakub's test:

    5 NOTE_INSN_BASIC_BLOCK
    2 r60:DI=di:DI
      REG_DEAD: di:DI
    3 r61:DI=r10:DI
      REG_DEAD: r10:DI
    4 NOTE_INSN_FUNCTION_BEG
    7 bx:DI=r60:DI
      REG_DEAD: r60:DI
    9 r63:DI=L0
   10 clobber [scratch]
   11 clobber [bp:DI]
   12 bp:DI=[r61:DI]
   13 clobber [scratch]
   14 clobber [sp:DI]
   15 sp:DI=[r61:DI+0x8]
      REG_DEAD: r61:DI
   16 use bp:DI
   17 use sp:DI
   18 pc=r63:DI
      REG_DEAD: r63:DI
      REG_NON_LOCAL_GOTO: 0

on top of his patch this results in 

 starting the processing of deferred insns
 ending the processing of deferred insns
 df_analyze called
-df_worklist_dataflow_doublequeue:n_basic_blocks 3 n_edges 1 count 3 (    1)
+df_worklist_dataflow_doublequeue:n_basic_blocks 3 n_edges 2 count 3 (    1)
+df_worklist_dataflow_doublequeue:n_basic_blocks 3 n_edges 2 count 3 (    1)
+df_worklist_dataflow_doublequeue:n_basic_blocks 3 n_edges 2 count 3 (    1)


 bar
@@ -45,7 +47,7 @@ Dataflow summary:
 ;; rd  out     (21)
 0, 1, 2, 4, 5, 6, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23

-( 0 )->[2]->( )
+( 0 )->[2]->( 1 )
 ;; bb 2 artificial_defs: { }
 ;; bb 2 artificial_uses: { u0(6){ d7(bb 2 insn 12) }u1(7){ d9(bb 2 insn 15)
}u2(16){ d11(bb 0 insn -1) }u3(20){ d12(bb 0 insn -1) }}
 ;; lr  in       5 [di] 6 [bp] 7 [sp] 16 [argp] 20 [frame] 39 [r10]
@@ -60,8 +62,8 @@ Dataflow summary:
 3, 7, 9, 24, 25, 26
 ;; rd  kill    (9)
 3, 4, 7, 8, 9, 10, 24, 25, 26
-;; lr  out      3 [bx] 7 [sp] 16 [argp] 20 [frame]
-;; live  out    3 [bx] 7 [sp] 16 [argp] 20 [frame]
+;; lr  out      3 [bx] 6 [bp] 7 [sp] 16 [argp] 20 [frame]
+;; live  out    3 [bx] 6 [bp] 7 [sp] 16 [argp] 20 [frame]
 ;; rd  out     (24)
 0, 1, 2, 3, 5, 6, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26
 ;;  UD chains for artificial uses
@@ -93,7 +95,7 @@ Dataflow summary:
 ;;      reg 20 { d12(bb 0 insn -1) }
 ;;      reg 63 { d26(bb 2 insn 9) }

-( )->[1]->( )
+( 2 )->[1]->( )
 ;; bb 1 artificial_defs: { }
 ;; bb 1 artificial_uses: { u17(3){ }u18(6){ }u19(7){ }u20(20){ }}
 ;; lr  in       3 [bx] 6 [bp] 7 [sp] 20 [frame]

so we get only extra bp in live outs of block 2 and still kill insn 7 (which is
the actual problem).  Do we need bx to appear in live ins of EXIT (those are
empty with or without the patch)?

Reply via email to