From: Craig Topper Date: Thu, 3 Oct 2013 04:21:19 +0000 (+0000) Subject: Change __builtin_ia32_bextri_u64 to take an i64imm to match up with LLVM backend... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6a48b3f1bd4257b15a44d0d36702eb00e6ce1d2a;p=clang Change __builtin_ia32_bextri_u64 to take an i64imm to match up with LLVM backend changes. An explicit cast is still needed in tbmintrin.h to convert any big integer down to i32imm. Patch from Yunzhong Gao. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191872 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/BuiltinsX86.def b/include/clang/Basic/BuiltinsX86.def index b86e1a372d..dea1cc6b16 100644 --- a/include/clang/Basic/BuiltinsX86.def +++ b/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/lib/Headers/tbmintrin.h b/lib/Headers/tbmintrin.h index 51c83f258f..56e13be9cf 100644 --- a/lib/Headers/tbmintrin.h +++ b/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/test/CodeGen/tbm-builtins.c b/test/CodeGen/tbm-builtins.c index b879e76ae2..109c7f897a 100644 --- a/test/CodeGen/tbm-builtins.c +++ b/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);