------- Comment #14 from steven at gcc dot gnu dot org 2010-02-12 21:46 ------- On x86_64 the two functions still give different code:
;; Function strength_test2 (strength_test2) strength_test2 (int * data) { unsigned int ivtmp.12; int * pretmp.9; int * pretmp.7; int k; int D.2743; int D.2741; int * D.2740; long unsigned int D.2739; long unsigned int D.2738; int D.2737; <bb 2>: k_3 = *data_2(D); pretmp.7_24 = data_2(D) + 8; pretmp.9_26 = data_2(D) + 4; ivtmp.12_25 = (unsigned int) k_3; <bb 3>: # ivtmp.12_5 = PHI <ivtmp.12_25(2), ivtmp.12_12(3)> D.2737_6 = *pretmp.7_24; D.2738_7 = (long unsigned int) D.2737_6; D.2739_8 = D.2738_7 * 4; D.2740_9 = data_2(D) + D.2739_8; *D.2740_9 = 2; D.2741_28 = (int) ivtmp.12_5; D.2743_13 = *pretmp.9_26; ivtmp.12_12 = ivtmp.12_5 + ivtmp.12_25; if (D.2743_13 > D.2741_28) goto <bb 3>; else goto <bb 4>; <bb 4>: return; } ;; Function strength_result2 (strength_result2) strength_result2 (int * data) { unsigned int D.2772; unsigned int D.2773; unsigned int D.2774; int * pretmp.21; int i; int k; int D.2735; int * D.2733; long unsigned int D.2732; long unsigned int D.2731; int D.2730; <bb 2>: k_3 = *data_2(D); pretmp.21_22 = data_2(D) + 8; pretmp.21_23 = data_2(D) + 4; <bb 3>: # i_1 = PHI <0(2), i_25(3)> D.2730_6 = *pretmp.21_22; D.2731_7 = (long unsigned int) D.2730_6; D.2732_8 = D.2731_7 * 4; D.2733_9 = data_2(D) + D.2732_8; *D.2733_9 = 2; D.2772_5 = (unsigned int) i_1; D.2773_11 = (unsigned int) k_3; D.2774_24 = D.2772_5 + D.2773_11; i_25 = (int) D.2774_24; D.2735_12 = *pretmp.21_23; if (D.2735_12 > i_25) goto <bb 3>; else goto <bb 4>; <bb 4>: return; } -- steven at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed|2005-12-21 03:39:56 |2010-02-12 21:46:26 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18316