Summary: | [4.2 Regression] wrong code generated with optimization on x86-64 | ||
---|---|---|---|
Product: | gcc | Reporter: | Brett Polivka <brett.polivka> |
Component: | tree-optimization | Assignee: | Not yet assigned to anyone <unassigned> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | fang, gcc-bugs |
Priority: | P3 | Keywords: | alias, wrong-code |
Version: | 4.2.3 | ||
Target Milestone: | 4.3.0 | ||
Host: | x86_64-linux-gnu | Target: | x86_64-linux-gnu |
Build: | x86_64-linux-gnu | Known to work: | 4.1.3 4.3.0 |
Known to fail: | 4.2.3 4.2.5 | Last reconfirmed: | 2008-05-03 09:32:16 |
Attachments: |
preprocessed output of test program
preprocessed output of test program |
Description
Brett Polivka
2008-05-02 22:29:53 UTC
Created attachment 15563 [details]
preprocessed output of test program
Created attachment 15564 [details]
preprocessed output of test program
Previous version was from wrong code
Confirmed. On the tree level we get aliasing wrong again: <bb 2>: # VUSE <n_50>; D.30804_7 = n; # VUSE <SMT.294_51>; D.30805_8 = s_3->x; if (D.30804_7 < D.30805_8) goto <L3>; else goto <L5>; <L3>:; __b_9 = &s_3->x; # __b_2 = PHI <__b_9(3), &n(2)>; <L5>:; # VUSE <n_50>; # VUSE <D.30570_14>; D.30813_12 = *__b_2; # D.30570_15 = V_MUST_DEF <D.30570_14>; D.30570 = 2; if (D.30813_12 > 2) goto <L6>; else goto <L8>; <L6>:; __b_20 = &s_3->x; # __b_1 = PHI <__b_20(5), &D.30570(4)>; <L8>:; # VUSE <n_50>; # VUSE <D.30570_15>; D.30636_23 = *__b_1; DSE deleted the intermediate store to s_3->x: # VUSE <n_50>; # VUSE <D.30570_14>; D.30813_12 = *__b_2; - # SMT.294_52 = V_MAY_DEF <SMT.294_51>; - s_3->x = D.30813_12; # D.30570_15 = V_MUST_DEF <D.30570_14>; D.30570 = 2; thus, a workaround is -fno-tree-dse. 4.2.4 is being released, changing milestones to 4.2.5. Closing 4.2 branch, fixed in 4.3. |