summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/include/clang/Basic/BuiltinsX86.def2
-rw-r--r--clang/lib/Headers/tbmintrin.h2
-rw-r--r--clang/test/CodeGen/tbm-builtins.c5
3 files changed, 7 insertions, 2 deletions
diff --git a/clang/include/clang/Basic/BuiltinsX86.def b/clang/include/clang/Basic/BuiltinsX86.def
index b86e1a372d2..dea1cc6b16d 100644
--- a/clang/include/clang/Basic/BuiltinsX86.def
+++ b/clang/include/clang/Basic/BuiltinsX86.def
@@ -644,7 +644,7 @@ BUILTIN(__builtin_ia32_pext_di, "ULLiULLiULLi", "")
// TBM
BUILTIN(__builtin_ia32_bextri_u32, "UiUiIUi", "")
-BUILTIN(__builtin_ia32_bextri_u64, "ULLiULLiIUi", "")
+BUILTIN(__builtin_ia32_bextri_u64, "ULLiULLiIULLi", "")
BUILTIN(__builtin_ia32_blcfill_u32, "UiUi", "")
BUILTIN(__builtin_ia32_blcfill_u64, "ULLiULLi", "")
BUILTIN(__builtin_ia32_blci_u32, "UiUi", "")
diff --git a/clang/lib/Headers/tbmintrin.h b/clang/lib/Headers/tbmintrin.h
index 51c83f258ff..56e13be9cff 100644
--- a/clang/lib/Headers/tbmintrin.h
+++ b/clang/lib/Headers/tbmintrin.h
@@ -35,7 +35,7 @@
#define __bextri_u32(a, b) (__builtin_ia32_bextri_u32((a), (b)))
#ifdef __x86_64__
-#define __bextri_u64(a, b) (__builtin_ia32_bextri_u64((a), (b)))
+#define __bextri_u64(a, b) (__builtin_ia32_bextri_u64((a), (int)(b)))
#endif
static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
diff --git a/clang/test/CodeGen/tbm-builtins.c b/clang/test/CodeGen/tbm-builtins.c
index b879e76ae2e..109c7f897a2 100644
--- a/clang/test/CodeGen/tbm-builtins.c
+++ b/clang/test/CodeGen/tbm-builtins.c
@@ -15,6 +15,11 @@ unsigned long long test__bextri_u64(unsigned long long a) {
return __bextri_u64(a, 2);
}
+unsigned long long test__bextri_u64_bigint(unsigned long long a) {
+ // CHECK: call i64 @llvm.x86.tbm.bextri.u64
+ return __bextri_u64(a, 0x7fffffffffLL);
+}
+
unsigned int test__blcfill_u32(unsigned int a) {
// CHECK: call i32 @llvm.x86.tbm.blcfill.u32
return __blcfill_u32(a);
OpenPOWER on IntegriCloud