------- 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