<div dir="ltr">LGTM</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 2, 2013 at 1:32 PM, Yunzhong Gao <span dir="ltr"><<a href="mailto:Yunzhong_Gao@playstation.sony.com" target="_blank">Yunzhong_Gao@playstation.sony.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">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.".<br>

<br>
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: <a href="http://llvm-reviews.chandlerc.com/D1788" target="_blank">http://llvm-reviews.chandlerc.com/D1788</a><br>

- Gao.<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D1814" target="_blank">http://llvm-reviews.chandlerc.com/D1814</a><br>
<br>
Files:<br>
  lib/Headers/tbmintrin.h<br>
  test/CodeGen/tbm-builtins.c<br>
  include/clang/Basic/BuiltinsX86.def<br>
<br>
Index: lib/Headers/tbmintrin.h<br>
===================================================================<br>
--- lib/Headers/tbmintrin.h<br>
+++ lib/Headers/tbmintrin.h<br>
@@ -35,7 +35,7 @@<br>
 #define __bextri_u32(a, b) (__builtin_ia32_bextri_u32((a), (b)))<br>
<br>
 #ifdef __x86_64__<br>
-#define __bextri_u64(a, b) (__builtin_ia32_bextri_u64((a), (b)))<br>
+#define __bextri_u64(a, b) (__builtin_ia32_bextri_u64((a), (int)(b)))<br>
 #endif<br>
<br>
 static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))<br>
Index: test/CodeGen/tbm-builtins.c<br>
===================================================================<br>
--- test/CodeGen/tbm-builtins.c<br>
+++ test/CodeGen/tbm-builtins.c<br>
@@ -15,6 +15,11 @@<br>
   return __bextri_u64(a, 2);<br>
 }<br>
<br>
+unsigned long long test__bextri_u64_bigint(unsigned long long a) {<br>
+  // CHECK: call i64 @llvm.x86.tbm.bextri.u64<br>
+  return __bextri_u64(a, 0x7fffffffffLL);<br>
+}<br>
+<br>
 unsigned int test__blcfill_u32(unsigned int a) {<br>
   // CHECK: call i32 @llvm.x86.tbm.blcfill.u32<br>
   return __blcfill_u32(a);<br>
Index: include/clang/Basic/BuiltinsX86.def<br>
===================================================================<br>
--- include/clang/Basic/BuiltinsX86.def<br>
+++ include/clang/Basic/BuiltinsX86.def<br>
@@ -644,7 +644,7 @@<br>
<br>
 // TBM<br>
 BUILTIN(__builtin_ia32_bextri_u32, "UiUiIUi", "")<br>
-BUILTIN(__builtin_ia32_bextri_u64, "ULLiULLiIUi", "")<br>
+BUILTIN(__builtin_ia32_bextri_u64, "ULLiULLiIULLi", "")<br>
 BUILTIN(__builtin_ia32_blcfill_u32, "UiUi", "")<br>
 BUILTIN(__builtin_ia32_blcfill_u64, "ULLiULLi", "")<br>
 BUILTIN(__builtin_ia32_blci_u32, "UiUi", "")<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>~Craig
</div>