http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51780
Bug #: 51780 Summary: Missed optimization for ==/!= comparison Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassig...@gcc.gnu.org ReportedBy: kti...@gcc.gnu.org Target: *-*-* Hi, optimization misses to eliminate addition for 'b' in following code: extern unsigned int ar[256]; int foo (int a, unsigned int b) { int c = ar[a] + b; int d = (int) b; return c != d; } compiled this code with -O2 we get tree-optimized as follwing: ;; Function foo (foo, funcdef_no=0, decl_uid=1600, cgraph_uid=0) foo (int a, unsigned int b) { int d; int c; _Bool D.2717; int D.2716; unsigned int D.2715; unsigned int D.2714; <bb 2>: D.2714_2 = ar[a_1(D)]; D.2715_4 = D.2714_2 + b_3(D); c_5 = (int) D.2715_4; d_6 = (int) b_3(D); D.2717_7 = c_5 != d_6; D.2716_8 = (int) D.2717_7; <L0>: return D.2716_8; } but optimized variant should be: ;; Function foo (foo, funcdef_no=0, decl_uid=1709, cgraph_uid=0) foo (int a, unsigned int b) { _Bool D.1717; int D.1716; unsigned int D.1714; <bb 2>: D.1714_2 = ar[a_1(D)]; D.1717_7 = D.1714_2 != 0; D.1716_8 = (int) D.1717_7; return D.1716_8; }