ygao added you to the CC list for the revision "[2/2] Change tbm bextr builtin
function to take an i64imm parameter instead of i32imm.".
This makes the backend TableGen patterns slightly cleaner. An explicit cast is
still needed in tbmintrin.h to convert any big integer down to i32imm. The llvm
backend portion of the patch is located here:
http://llvm-reviews.chandlerc.com/D1788
- Gao.
http://llvm-reviews.chandlerc.com/D1814
Files:
lib/Headers/tbmintrin.h
test/CodeGen/tbm-builtins.c
include/clang/Basic/BuiltinsX86.def
Index: lib/Headers/tbmintrin.h
===================================================================
--- lib/Headers/tbmintrin.h
+++ 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__))
Index: test/CodeGen/tbm-builtins.c
===================================================================
--- test/CodeGen/tbm-builtins.c
+++ test/CodeGen/tbm-builtins.c
@@ -15,6 +15,11 @@
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);
Index: include/clang/Basic/BuiltinsX86.def
===================================================================
--- include/clang/Basic/BuiltinsX86.def
+++ include/clang/Basic/BuiltinsX86.def
@@ -644,7 +644,7 @@
// 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", "")
Index: lib/Headers/tbmintrin.h
===================================================================
--- lib/Headers/tbmintrin.h
+++ 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__))
Index: test/CodeGen/tbm-builtins.c
===================================================================
--- test/CodeGen/tbm-builtins.c
+++ test/CodeGen/tbm-builtins.c
@@ -15,6 +15,11 @@
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);
Index: include/clang/Basic/BuiltinsX86.def
===================================================================
--- include/clang/Basic/BuiltinsX86.def
+++ include/clang/Basic/BuiltinsX86.def
@@ -644,7 +644,7 @@
// 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", "")
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits