3 ms·
Out of curiosity just clang or gcc as well?
by runevault 1y ago
Out of curiosity just clang or gcc as well?
- josephg 1y agoI just tried it, and the problem is even worse in gcc. Given this C code: typedef struct { uint16_t a, b; } pair; int eq_copy(pair a, pair b) { return a.a == b.a && a.b == b.b; } int eq_ref(pair *a, pair *b) { return a->a == b->a && a->b == b->b; } Clang generates clean code for the eq_copy variant, but complex code for the eq_ref variant. Gcc emits pretty complex code in both variants. For example, here's eq_ref from gcc -O2: eq_ref: movzx edx, WORD PTR [rsi] xor eax, eax cmp WORD PTR [rdi], dx je .L9 ret .L9: movzx eax, WORD PTR [rsi+2] cmp WORD PTR [rdi+2], ax sete al movzx eax, al ret Have a play around: https://c.godbolt.org/z/79Eaa3jYf https://c.godbolt.org/z/79Eaa3jYf