https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87812

--- Comment #3 from H.J. Lu <hjl.tools at gmail dot com> ---
Without AVX, v32qi should be passed the same way before AVX was
added to compiler.  For example,

[hjl@gnu-cfl-1 tmp]$ cat z.c
typedef int __attribute__((mode(SI))) si;
typedef si __attribute__((vector_size (128))) v;

v
foo (int x)
{
 v y = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f',
         '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
 return y;
}
[hjl@gnu-cfl-1 tmp]$ gcc -S -O2 z.c
[hjl@gnu-cfl-1 tmp]$ cat z.s
        .file   "z.c"
        .text
        .p2align 4,,15
        .globl  foo
        .type   foo, @function
foo:
.LFB0:
        .cfi_startproc
        movq    %rdi, %rax
        movl    $48, (%rdi)
        movl    $49, 4(%rdi)
        movl    $50, 8(%rdi)
        movl    $51, 12(%rdi)
        movl    $52, 16(%rdi)
        movl    $53, 20(%rdi)
        movl    $54, 24(%rdi)
        movl    $55, 28(%rdi)
        movl    $56, 32(%rdi)
        movl    $57, 36(%rdi)
        movl    $97, 40(%rdi)
        movl    $98, 44(%rdi)
        movl    $99, 48(%rdi)
        movl    $100, 52(%rdi)
        movl    $101, 56(%rdi)
        movl    $102, 60(%rdi)
        movl    $48, 64(%rdi)
        movl    $49, 68(%rdi)
        movl    $50, 72(%rdi)
        movl    $51, 76(%rdi)
        movl    $52, 80(%rdi)
        movl    $53, 84(%rdi)
        movl    $54, 88(%rdi)
        movl    $55, 92(%rdi)
        movl    $56, 96(%rdi)
        movl    $57, 100(%rdi)
        movl    $97, 104(%rdi)
        movl    $98, 108(%rdi)
        movl    $99, 112(%rdi)
        movl    $100, 116(%rdi)
        movl    $101, 120(%rdi)
        movl    $102, 124(%rdi)
        ret
        .cfi_endproc
.LFE0:
        .size   foo, .-foo
        .ident  "GCC: (GNU) 8.2.1 20181011 (Red Hat 8.2.1-4)"
        .section        .note.GNU-stack,"",@progbits
[hjl@gnu-cfl-1 tmp]$ 

If there were AVX1024, GCC would pass y in vector register. When AVX1024
were disabled, GCC would pass y in memory and issue an ABI change warning.
So LLVM is wrong.

Reply via email to