https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95891
Bug ID: 95891 Summary: Missing optimization Product: gcc Version: 10.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: jm at bourguet dot org Target Milestone: --- I'm sorry, this is perhaps not the correct component but my knowledge of gcc internals does not allow me to do more than guess. For all version of gcc I've tried, the following code: struct point { int x, y; }; bool f(point a, point b) { return a.x == b.x && a.y == b.y; } bool f(unsigned long long a, unsigned long long b) { return a == b; } is compiled to f(point, point): xor eax, eax cmp edi, esi je .L5 ret .L5: sar rdi, 32 sar rsi, 32 cmp edi, esi sete al ret f(unsigned long long, unsigned long long): cmp rdi, rsi sete al ret I'd expect f(point, point) to have the same assembly as f(unsigned long long, unsigned long long). Yours, -- Jean-Marc Bourguet