I just committed a change to go back to only definining
_XCR_XFEATURE_ENABLED_MASK when clang is in MSVC compatibility mode. I don’t
think I meant to define it outside of that since it doesn’t appear gcc does.
For the other two files, I assume you’re getting a collision of names similar
to what Benjamin Kramer reported on V8?
From: Jordan Rupprecht [mailto:ruppre...@google.com]
Sent: Friday, January 18, 2019 9:30 AM
To: Topper, Craig
Cc: cfe-commits@lists.llvm.org
Subject: Re: r351391 - Recommit r351160 "[X86] Make _xgetbv/_xsetbv on
non-windows platforms"
Hi Craig,
We're seeing issues building a few other things now; notably this part in
opencv:
https://github.com/opencv/opencv/blob/master/modules/core/src/system.cpp#L422
#ifdef _XCR_XFEATURE_ENABLED_MASK // requires immintrin.h
xcr0 = (int)_xgetbv(_XCR_XFEATURE_ENABLED_MASK);
=> error: '__builtin_ia32_xgetbv' needs target feature xsave
We can workaround by building with -mavx... but we also have code running on
non-avx machines that pull in this dependency. (It likely doesn't actually
*use* the code, but still depends on it compiling as a transitive dep).
Is there a more accurate preprocessor macro (e.g. one that says if xsave is
available) we could use to selectively disable this?
There are similar breakages here:
https://chromium.googlesource.com/aosp/platform/external/libchrome/+/master/base/cpu.cc#82
https://github.com/google/sling/blob/master/third_party/jit/cpu.cc#L58
Advice there too would be appreciated, if possible :)
On Wed, Jan 16, 2019 at 3:00 PM Craig Topper via cfe-commits
mailto:cfe-commits@lists.llvm.org>> wrote:
Author: ctopper
Date: Wed Jan 16 14:56:25 2019
New Revision: 351391
URL: http://llvm.org/viewvc/llvm-project?rev=351391&view=rev
Log:
Recommit r351160 "[X86] Make _xgetbv/_xsetbv on non-windows platforms"
V8 has been fixed now.
Modified:
cfe/trunk/include/clang/Basic/BuiltinsX86.def
cfe/trunk/lib/CodeGen/CGBuiltin.cpp
cfe/trunk/lib/Headers/immintrin.h
cfe/trunk/lib/Headers/intrin.h
cfe/trunk/lib/Headers/xsaveintrin.h
cfe/trunk/test/CodeGen/builtins-x86.c
cfe/trunk/test/CodeGen/x86_32-xsave.c
cfe/trunk/test/CodeGen/x86_64-xsave.c
cfe/trunk/test/Headers/ms-intrin.cpp
Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=351391&r1=351390&r2=351391&view=diff
==
--- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original)
+++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Wed Jan 16 14:56:25 2019
@@ -693,6 +693,10 @@ TARGET_BUILTIN(__builtin_ia32_fxsave, "v
// XSAVE
TARGET_BUILTIN(__builtin_ia32_xsave, "vv*ULLi", "n", "xsave")
TARGET_BUILTIN(__builtin_ia32_xrstor, "vv*ULLi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xgetbv, "ULLiUi", "n", "xsave")
+TARGET_HEADER_BUILTIN(_xgetbv, "UWiUi", "nh", "immintrin.h", ALL_MS_LANGUAGES,
"")
+TARGET_BUILTIN(__builtin_ia32_xsetbv, "vUiULLi", "n", "xsave")
+TARGET_HEADER_BUILTIN(_xsetbv, "vUiUWi", "nh", "immintrin.h",
ALL_MS_LANGUAGES, "")
TARGET_BUILTIN(__builtin_ia32_xsaveopt, "vv*ULLi", "n", "xsaveopt")
TARGET_BUILTIN(__builtin_ia32_xrstors, "vv*ULLi", "n", "xsaves")
TARGET_BUILTIN(__builtin_ia32_xsavec, "vv*ULLi", "n", "xsavec")
Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=351391&r1=351390&r2=351391&view=diff
==
--- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Wed Jan 16 14:56:25 2019
@@ -9833,7 +9833,9 @@ Value *CodeGenFunction::EmitX86BuiltinEx
case X86::BI__builtin_ia32_xsavec:
case X86::BI__builtin_ia32_xsavec64:
case X86::BI__builtin_ia32_xsaves:
- case X86::BI__builtin_ia32_xsaves64: {
+ case X86::BI__builtin_ia32_xsaves64:
+ case X86::BI__builtin_ia32_xsetbv:
+ case X86::BI_xsetbv: {
Intrinsic::ID ID;
#define INTRINSIC_X86_XSAVE_ID(NAME) \
case X86::BI__builtin_ia32_##NAME: \
@@ -9853,6 +9855,10 @@ Value *CodeGenFunction::EmitX86BuiltinEx
INTRINSIC_X86_XSAVE_ID(xsavec64);
INTRINSIC_X86_XSAVE_ID(xsaves);
INTRINSIC_X86_XSAVE_ID(xsaves64);
+INTRINSIC_X86_XSAVE_ID(xsetbv);
+case X86::BI_xsetbv:
+ ID = Intrinsic::x86_xsetbv;
+ break;
}
#undef INTRINSIC_X86_XSAVE_ID
Value *Mhi = Builder.CreateTrunc(
@@ -9862,6 +9868,9 @@ Value *CodeGenFunction::EmitX86BuiltinEx
Ops.push_back(Mlo);
return Builder.CreateCall(CGM.getIntrinsic(ID), Ops);
}
+ case X86::BI__builtin_ia32_xgetbv:
+ case X86::BI_xgetbv:
+return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_xgetbv), Ops);
case X86::BI__builtin_ia32_storedqudi128_mask:
case X86::BI__builtin_ia32_storedqusi128_mask:
case X86::BI__builtin_ia32_storedquhi128_mask:
Modified: cfe/trunk/lib/Headers/immi