[Qemu-devel] [PATCH] Update the avx2 configure test to be compatible with clang

Rebecca Cran posted 1 patch 6 years, 1 month ago
Test asan failed
Test FreeBSD passed
Test checkpatch passed
Test docker-mingw@fedora passed
Test docker-clang@ubuntu failed
Test s390x passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20190809041952.57302-1-rebecca@bsdio.com
There is a newer version of this series
configure | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
[Qemu-devel] [PATCH] Update the avx2 configure test to be compatible with clang
Posted by Rebecca Cran 6 years, 1 month ago
clang doesn't support the GCC pragma to enable AVX2, but instead
requires the command line option -mavx2. Since GCC also supports that,
remove the pragma lines and add the -mavx2 option when building the
test.

Signed-off-by: Rebecca Cran <rebecca@bsdio.com>
---
 configure | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/configure b/configure
index 714e7fb6a1..30d6c02ab4 100755
--- a/configure
+++ b/configure
@@ -5392,8 +5392,6 @@ fi
 
 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
   cat > $TMPC << EOF
-#pragma GCC push_options
-#pragma GCC target("avx2")
 #include <cpuid.h>
 #include <immintrin.h>
 static int bar(void *a) {
@@ -5402,7 +5400,7 @@ static int bar(void *a) {
 }
 int main(int argc, char *argv[]) { return bar(argv[0]); }
 EOF
-  if compile_object "" ; then
+  if compile_object "-mavx2" ; then
     avx2_opt="yes"
   else
     avx2_opt="no"
-- 
2.22.0


Re: [Qemu-devel] [PATCH] Update the avx2 configure test to be compatible with clang
Posted by no-reply@patchew.org 6 years, 1 month ago
Patchew URL: https://patchew.org/QEMU/20190809041952.57302-1-rebecca@bsdio.com/



Hi,

This series failed the asan build test. Please find the testing commands and
their output below. If you have Docker installed, you can probably reproduce it
locally.

=== TEST SCRIPT BEGIN ===
#!/bin/bash
make docker-image-fedora V=1 NETWORK=1
time make docker-test-debug@fedora TARGET_LIST=x86_64-softmmu J=14 NETWORK=1
=== TEST SCRIPT END ===

  CC      util/qemu-sockets.o
  CC      util/uri.o
  CC      util/notify.o
/tmp/qemu-test/src/util/bufferiszero.c:71:13: error: unknown pragma ignored [-Werror,-Wunknown-pragmas]
#pragma GCC push_options
            ^
/tmp/qemu-test/src/util/bufferiszero.c:72:13: error: unknown pragma ignored [-Werror,-Wunknown-pragmas]
#pragma GCC target("sse2")
            ^
/tmp/qemu-test/src/util/bufferiszero.c:108:13: error: unknown pragma ignored [-Werror,-Wunknown-pragmas]
#pragma GCC pop_options
            ^
/tmp/qemu-test/src/util/bufferiszero.c:116:13: error: unknown pragma ignored [-Werror,-Wunknown-pragmas]
#pragma GCC push_options
            ^
/tmp/qemu-test/src/util/bufferiszero.c:117:13: error: unknown pragma ignored [-Werror,-Wunknown-pragmas]
#pragma GCC target("sse4")
            ^
/tmp/qemu-test/src/util/bufferiszero.c:148:13: error: unknown pragma ignored [-Werror,-Wunknown-pragmas]
#pragma GCC pop_options
            ^
/tmp/qemu-test/src/util/bufferiszero.c:149:13: error: unknown pragma ignored [-Werror,-Wunknown-pragmas]
#pragma GCC push_options
            ^
/tmp/qemu-test/src/util/bufferiszero.c:150:13: error: unknown pragma ignored [-Werror,-Wunknown-pragmas]
#pragma GCC target("avx2")
            ^
/tmp/qemu-test/src/util/bufferiszero.c:187:13: error: unknown pragma ignored [-Werror,-Wunknown-pragmas]
#pragma GCC pop_options
            ^
9 errors generated.


The full log is available at
http://patchew.org/logs/20190809041952.57302-1-rebecca@bsdio.com/testing.asan/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
Re: [Qemu-devel] [PATCH] Update the avx2 configure test to be compatible with clang
Posted by Richard Henderson 6 years, 1 month ago
On 8/8/19 9:19 PM, Rebecca Cran wrote:
> clang doesn't support the GCC pragma to enable AVX2, but instead
> requires the command line option -mavx2. Since GCC also supports that,
> remove the pragma lines and add the -mavx2 option when building the
> test.

No, this means we're not testing what we need:

We need to compile exactly one function using avx2.

The other functions should be compiled with sse4 and sse2, respectively, and we
choose between them by testing cpuid bits at startup.  If you supply -mavx2 to
the entire compilation, then the routine that is supposed to use only sse2 will
in fact use avx2, and then the runtime selection is moot.


r~

Re: [Qemu-devel] [PATCH] Update the avx2 configure test to be compatible with clang
Posted by Rebecca Cran 6 years, 1 month ago
On 2019-08-08 23:22, Richard Henderson wrote:
>
> No, this means we're not testing what we need:
>
> We need to compile exactly one function using avx2.
>
> The other functions should be compiled with sse4 and sse2, respectively, and we
> choose between them by testing cpuid bits at startup.  If you supply -mavx2 to
> the entire compilation, then the routine that is supposed to use only sse2 will
> in fact use avx2, and then the runtime selection is moot.


Oh, sorry, I hadn't fully realized there's runtime selection. Fixing
this would require significant rework in that case, so I'll just build
with GCC instead for now!


-- 
Rebecca Cran