------- Comment #1 from rguenth at gcc dot gnu dot org 2009-09-23 21:46 ------- So, we have
;; basic block 3, loop depth 1, count 0 ;; prev block 2, next block 7 ;; pred: 7 [100.0%] (fallthru,dfs_back) 2 [100.0%] (fallthru,exec) ;; succ: 7 [98.5%] (true,exec) 4 [1.5%] (false,exec) <bb 3>: # BM_tab_19 = PHI <BM_tab_11(7), &BM_tab[256](2)> MEM[base: BM_tab_19, offset: 0x0fffffffc] = 6; MEM[base: BM_tab_19, offset: 0x0fffffff8] = 6; MEM[base: BM_tab_19, offset: 0x0fffffff4] = 6; D.2422_17 = (unsigned int) BM_tab_19; D.2423_18 = D.2422_17 + 0x0fffffff0; BM_tab_24 = (int *) D.2423_18; BM_tab_11 = BM_tab_24; MEM[base: BM_tab_24] = 6; if (&BM_tab[0] != BM_tab_24) goto <bb 7>; else goto <bb 4>; ;; basic block 7, loop depth 1, count 0 ;; prev block 3, next block 4 ;; pred: 3 [98.5%] (true,exec) ;; succ: 3 [100.0%] (fallthru,dfs_back) <bb 7>: goto <bb 3>; and for block 7 do Optimizing block #7 1>>> COND 1 = &BM_tab[0] ne_expr BM_tab_24 1>>> COND 0 = &BM_tab[0] eq_expr BM_tab_24 LKUP STMT D.2422_17 = nop_expr BM_tab_24 D.2422_17 = (unsigned int) BM_tab_24; LKUP STMT D.2423_18 = D.2422_17 plus_expr 0x0fffffff0 D.2423_18 = D.2422_17 + 0x0fffffff0; FIND: D.2423_18 LKUP STMT BM_tab_24 = nop_expr D.2423_18 BM_tab_24 = (int *) D.2423_18; FIND: BM_tab_24 LKUP STMT &BM_tab[0] ne_expr BM_tab_24 if (&BM_tab[0] != BM_tab_24) FIND: 1 oops. And we jump-thread into an endless loop. How is this supposed to work? -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |law at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41454