https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98218
Bug ID: 98218 Summary: [TARGET_MMX_WITH_SSE] Miss vec_cmpmn/vcondmn expander for 64bit vector Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: crazylht at gmail dot com Target Milestone: --- Host: x86_64-pc-linux-gnu Target: x86_64-*-* i?86-*-* Refer to https://godbolt.org/z/sYE88f cat test.c typedef char v8qi __attribute__ ((vector_size(8))); v8qi f1(v8qi a, v8qi b) { return a == b; } gcc -O2 -msse4.1 -S f1(char __vector(8), char __vector(8)): pextrb edx, xmm0, 0 pextrb eax, xmm1, 0 pextrb ecx, xmm0, 1 cmp dl, al pextrb eax, xmm1, 1 pextrb esi, xmm0, 2 setne dl pextrb edi, xmm0, 3 pextrb r8d, xmm0, 4 sub edx, 1 cmp cl, al pextrb eax, xmm1, 2 setne cl pextrb r9d, xmm0, 5 movzx edx, dl sub ecx, 1 cmp sil, al pextrb eax, xmm1, 3 setne sil pextrb r10d, xmm0, 6 pextrb r11d, xmm0, 7 movzx ecx, cl sub esi, 1 cmp dil, al pextrb eax, xmm1, 4 setne dil movzx esi, sil sub edi, 1 cmp r8b, al pextrb eax, xmm1, 5 setne r8b movzx edi, dil sub r8d, 1 cmp r9b, al pextrb eax, xmm1, 6 setne r9b movzx r8d, r8b sub r9d, 1 cmp r10b, al pextrb eax, xmm1, 7 setne r10b movzx r9d, r9b sub r10d, 1 cmp r11b, al setne al movzx r10d, r10b sub eax, 1 movzx eax, al sal rax, 8 or rax, r10 sal rax, 8 or rax, r9 sal rax, 8 or rax, r8 sal rax, 8 or rax, rdi sal rax, 8 or rax, rsi sal rax, 8 or rax, rcx sal rax, 8 or rax, rdx movq xmm0, rax ret It should be better with f1(char __vector(8), char __vector(8)): # @f1(char __vector(8), char __vector(8)) pcmpeqb xmm0, xmm1 ret