Author: Hans Wennborg Date: 2025-02-04T11:19:20+01:00 New Revision: 83ff9d4a34b1e579dd809759d13b70b8837f0cde
URL: https://github.com/llvm/llvm-project/commit/83ff9d4a34b1e579dd809759d13b70b8837f0cde DIFF: https://github.com/llvm/llvm-project/commit/83ff9d4a34b1e579dd809759d13b70b8837f0cde.diff LOG: Revert "[Win/X86] Make _m_prefetch[w] builtins to avoid winnt.h conflicts (#115099)" This broke the build, see buildbot comments on the PR. This reverts commit ee92122b53c7af26bb766e89e1d30ceb2fd5bb93 and follow-up 5dccfd9283cd784758aa3d16fcb6e31f135c080f. Added: Modified: clang/include/clang/Basic/BuiltinsX86.td clang/lib/CodeGen/CGBuiltin.cpp clang/lib/Headers/prfchwintrin.h clang/lib/Headers/xmmintrin.h Removed: ################################################################################ diff --git a/clang/include/clang/Basic/BuiltinsX86.td b/clang/include/clang/Basic/BuiltinsX86.td index 7f3c52ae329d02..572ac7235be02f 100644 --- a/clang/include/clang/Basic/BuiltinsX86.td +++ b/clang/include/clang/Basic/BuiltinsX86.td @@ -130,10 +130,6 @@ let Attributes = [Const, NoThrow, RequiredVectorWidth<128>] in { } } -let Features = "sse", Header = "xmmintrin.h", Attributes = [NoThrow, Const] in { - def _mm_prefetch : X86LibBuiltin<"void(void const *, int)">; -} - // AVX let Attributes = [Const, NoThrow, RequiredVectorWidth<256>], Features = "avx" in { foreach Op = ["addsub", "hadd", "hsub", "max", "min"] in { @@ -142,12 +138,6 @@ let Attributes = [Const, NoThrow, RequiredVectorWidth<256>], Features = "avx" in } } -// PRFCHW -let Features = "prfchw", Header = "intrin.h", Attributes = [NoThrow, Const] in { - def _m_prefetch : X86LibBuiltin<"void(void *)">; - def _m_prefetchw : X86LibBuiltin<"void(void volatile const *)">; -} - // Mechanically ported builtins from the original `.def` file. // @@ -156,6 +146,10 @@ let Features = "prfchw", Header = "intrin.h", Attributes = [NoThrow, Const] in { // current formulation is based on what was easiest to recognize from the // pre-TableGen version. +let Features = "mmx", Attributes = [NoThrow, Const] in { + def _mm_prefetch : X86NoPrefixBuiltin<"void(char const *, int)">; +} + let Features = "sse", Attributes = [NoThrow] in { def ldmxcsr : X86Builtin<"void(unsigned int)">; } diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 4d3d9e9897c148..11fa295dad9524 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -15374,17 +15374,6 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, Function *F = CGM.getIntrinsic(Intrinsic::prefetch, Address->getType()); return Builder.CreateCall(F, {Address, RW, Locality, Data}); } - case X86::BI_m_prefetch: - case X86::BI_m_prefetchw: { - Value *Address = Ops[0]; - // The 'w' suffix implies write. - Value *RW = - ConstantInt::get(Int32Ty, BuiltinID == X86::BI_m_prefetchw ? 1 : 0); - Value *Locality = ConstantInt::get(Int32Ty, 0x3); - Value *Data = ConstantInt::get(Int32Ty, 1); - Function *F = CGM.getIntrinsic(Intrinsic::prefetch, Address->getType()); - return Builder.CreateCall(F, {Address, RW, Locality, Data}); - } case X86::BI_mm_clflush: { return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse2_clflush), Ops[0]); diff --git a/clang/lib/Headers/prfchwintrin.h b/clang/lib/Headers/prfchwintrin.h index 8ec55d7073716f..eaea5f3cf8febf 100644 --- a/clang/lib/Headers/prfchwintrin.h +++ b/clang/lib/Headers/prfchwintrin.h @@ -14,10 +14,6 @@ #ifndef __PRFCHWINTRIN_H #define __PRFCHWINTRIN_H -#if defined(__cplusplus) -extern "C" { -#endif - /// Loads a memory sequence containing the specified memory address into /// all data cache levels. /// @@ -30,7 +26,11 @@ extern "C" { /// /// \param __P /// A pointer specifying the memory address to be prefetched. -void _m_prefetch(void *__P); +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_m_prefetch(void *__P) +{ + __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */); +} /// Loads a memory sequence containing the specified memory address into /// the L1 data cache and sets the cache-coherency state to modified. @@ -48,10 +48,13 @@ void _m_prefetch(void *__P); /// /// \param __P /// A pointer specifying the memory address to be prefetched. -void _m_prefetchw(volatile const void *__P); - -#if defined(__cplusplus) -} // extern "C" -#endif +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_m_prefetchw(volatile const void *__P) +{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcast-qual" + __builtin_prefetch ((const void*)__P, 1, 3 /* _MM_HINT_T0 */); +#pragma clang diagnostic pop +} #endif /* __PRFCHWINTRIN_H */ diff --git a/clang/lib/Headers/xmmintrin.h b/clang/lib/Headers/xmmintrin.h index 1fb070bca827e9..20e66d190113a3 100644 --- a/clang/lib/Headers/xmmintrin.h +++ b/clang/lib/Headers/xmmintrin.h @@ -2197,7 +2197,10 @@ _mm_storer_ps(float *__p, __m128 __a) #define _MM_HINT_T2 1 #define _MM_HINT_NTA 0 -#if 0 +#ifndef _MSC_VER +/* FIXME: We have to #define this because "sel" must be a constant integer, and + Sema doesn't do any form of constant propagation yet. */ + /// Loads one cache line of data from the specified address to a location /// closer to the processor. /// @@ -2222,10 +2225,6 @@ _mm_storer_ps(float *__p, __m128 __a) /// be generated. \n /// _MM_HINT_T2: Move data using the T2 hint. The PREFETCHT2 instruction will /// be generated. -/// -/// _mm_prefetch is implemented as a "library builtin" directly in Clang, -/// similar to how it is done in MSVC. Clang will warn if the user doesn't -/// include xmmintrin.h or immintrin.h. #define _mm_prefetch(a, sel) (__builtin_prefetch((const void *)(a), \ ((sel) >> 2) & 1, (sel) & 0x3)) #endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits