diff options
| -rw-r--r-- | clang/include/clang/Basic/BuiltinsX86.def | 2 | ||||
| -rw-r--r-- | clang/lib/Headers/tbmintrin.h | 2 | ||||
| -rw-r--r-- | clang/test/CodeGen/tbm-builtins.c | 5 |
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); |

