https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54589
Jaydeep Chauhan <jaydeepchauhan1494 at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jaydeepchauhan1494 at gmail dot co | |m --- Comment #10 from Jaydeep Chauhan <jaydeepchauhan1494 at gmail dot com> --- Hi, For the below case fix is not working. #include <emmintrin.h> struct param { int a, b, c, d; __m128i array[256]; }; struct param *p1; void func(struct param *p, unsigned char *src, int *dst) { __m128i x = p1->array[*src]; *dst = _mm_cvtsi128_si32(x); } gcc generates for x86-64 with -O2: func: movzbl (%rsi), %eax addq $1, %rax salq $4, %rax addq p1(%rip), %rax movl (%rax), %eax movl %eax, (%rdx) ret clang generates for x86_64 with -O2: func: movq p1(%rip), %rax movzbl (%rsi), %ecx shlq $4, %rcx movl 16(%rax,%rcx), %eax movl %eax, (%rdx) retq