------- Comment #4 from rguenth at gcc dot gnu dot org  2006-05-02 08:36 -------
Now, this is more like caused by cfg_cleanup.  loop_optimizer_init () inserts a
basic block 11, so we have

(gdb) call debug_bb_n(6)
;; basic block 6, loop depth 0, count 0
;; prev block 5, next block 7
;; pred:       5 [90.0%]  (true,exec)
;; succ:       7 [100.0%]  (fallthru,exec)
<L19>:;
entry_14 = (struct mark_entry *) D.1574_13;

(gdb) call debug_bb_n(7)
;; basic block 7, loop depth 1, count 0
;; prev block 6, next block 11
;; pred:       11 [100.0%]  (fallthru,dfs_back,exec) 6 [100.0%] 
(fallthru,exec)
;; succ:       11 [90.0%]  (true,exec) 8 [10.0%]  (loop_exit,false,exec)
# SMT.5_44 = PHI <SMT.5_43(11), SMT.5_41(6)>;
# bytes_left_7 = PHI <bytes_left_42(11), bytes_left_40(6)>;
# entry_6 = PHI <entry_19(11), entry_14(6)>;
<L6>:;
D.1625_2 = (int *) entry_6;
#   VUSE <bytes_left_7>;
D.1577_18 = MEM[base: D.1625_2];
#   bytes_left_42 = V_MAY_DEF <bytes_left_7>;
#   SMT.5_43 = V_MAY_DEF <SMT.5_44>;
t3 (D.1577_18);
entry_19 = entry_6 + 4B;
#   VUSE <bytes_left_42>;
bytes_left.0_17 = bytes_left;
if (bytes_left.0_17 != 0) goto <L25>; else goto <L8>;

(gdb) call debug_bb_n(11)
;; basic block 11, loop depth 1, count 0
;; prev block 7, next block 8
;; pred:       7 [90.0%]  (true,exec)
;; succ:       7 [100.0%]  (fallthru,dfs_back,exec)
<L25>:;
goto <bb 7> (<L6>);


after VRP, cfg_cleanup removes that block again and leaves us with the broken

(gdb) call debug_bb_n(6)
;; basic block 6, loop depth 0, count 0
;; prev block 5, next block 7
;; pred:       5 [90.0%]  (true,exec)
;; succ:       7 [100.0%]  (fallthru,exec)
<L19>:;
entry_14 = (struct mark_entry *) D.1574_13;

$23 = (struct basic_block_def *) 0xb7ce6f00
(gdb) call debug_bb_n(7)
;; basic block 7, loop depth 1, count 0
;; prev block 6, next block 8
;; pred:       7 [90.0%]  (true,exec) 6 [100.0%]  (fallthru,exec)
;; succ:       7 [90.0%]  (true,exec) 8 [10.0%]  (loop_exit,false,exec)
# SMT.5_44 = PHI <SMT.5_43(7), SMT.5_41(6)>;
# bytes_left_7 = PHI <bytes_left_42(7), bytes_left_40(6)>;
# entry_6 = PHI <entry_19(7), entry_14(6)>;
<L6>:;
D.1625_2 = (int *) entry_6;
#   VUSE <bytes_left_7>;
D.1577_18 = MEM[base: D.1625_2];
#   bytes_left_42 = V_MAY_DEF <bytes_left_7>;
t3 (D.1577_18);
entry_19 = entry_6 + 4B;
#   VUSE <bytes_left_42>;
bytes_left.0_17 = bytes_left;
if (bytes_left.0_17 != 0) goto <L6>; else goto <L8>;


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rakdver at gcc dot gnu dot
                   |                            |org


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

Reply via email to