From 158f4bf3af3ffcc2b231f615b2cc6a199b92dc25 Mon Sep 17 00:00:00 2001 From: Gabor Buella Date: Thu, 12 Apr 2018 18:42:02 +0000 Subject: [PATCH] [X86] Introduce wbinvd intrinsic A previously missing intrinsic for an old instruction. Reviewers: craig.topper, echristo Reviewed By: craig.topper Differential Revision: https://reviews.llvm.org/D45311 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329937 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/BuiltinsX86.def | 3 ++- lib/Headers/ia32intrin.h | 5 +++++ test/CodeGen/builtin-wbinvd.c | 10 ++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 test/CodeGen/builtin-wbinvd.c diff --git a/include/clang/Basic/BuiltinsX86.def b/include/clang/Basic/BuiltinsX86.def index 6fa7e68be7..b4c3e2887b 100644 --- a/include/clang/Basic/BuiltinsX86.def +++ b/include/clang/Basic/BuiltinsX86.def @@ -679,7 +679,8 @@ TARGET_BUILTIN(__builtin_ia32_clflushopt, "vvC*", "", "clflushopt") //CLWB TARGET_BUILTIN(__builtin_ia32_clwb, "vvC*", "", "clwb") -//WBNOINVD +//WB[NO]INVD +TARGET_BUILTIN(__builtin_ia32_wbinvd, "v", "", "") TARGET_BUILTIN(__builtin_ia32_wbnoinvd, "v", "", "wbnoinvd") // ADX diff --git a/lib/Headers/ia32intrin.h b/lib/Headers/ia32intrin.h index 4928300103..38f51e5073 100644 --- a/lib/Headers/ia32intrin.h +++ b/lib/Headers/ia32intrin.h @@ -70,4 +70,9 @@ __rdtscp(unsigned int *__A) { #define _rdpmc(A) __rdpmc(A) +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_wbinvd(void) { + return __builtin_ia32_wbinvd(); +} + #endif /* __IA32INTRIN_H */ diff --git a/test/CodeGen/builtin-wbinvd.c b/test/CodeGen/builtin-wbinvd.c new file mode 100644 index 0000000000..fe5ad58ca2 --- /dev/null +++ b/test/CodeGen/builtin-wbinvd.c @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 %s -ffreestanding -triple=x86_64-unknown-unknown -emit-llvm -o - -Wall -Werror | FileCheck %s +// RUN: %clang_cc1 %s -ffreestanding -triple=i386-unknown-unknown -emit-llvm -o - -Wall -Werror | FileCheck %s + +#include + +void test_wbinvd(void) { + //CHECK-LABEL: @test_wbinvd + //CHECK: call void @llvm.x86.wbinvd() + _wbinvd(); +} -- 2.40.0