<div dir="ltr">Committed as r196361.<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/12/3 Kevin Qin <span dir="ltr"><<a href="mailto:kevinqindev@gmail.com" target="_blank">kevinqindev@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><a href="http://llvm-reviews.chandlerc.com/D2315" target="_blank">http://llvm-reviews.chandlerc.com/D2315</a><br>
<br>
Files:<br>
  include/clang/Basic/<a href="http://arm_neon.td" target="_blank">arm_neon.td</a><br>
  lib/CodeGen/CGBuiltin.cpp<br>
  test/CodeGen/aarch64-neon-misc.c<br>
<br>
Index: include/clang/Basic/<a href="http://arm_neon.td" target="_blank">arm_neon.td</a><br>
===================================================================<br>
--- include/clang/Basic/<a href="http://arm_neon.td" target="_blank">arm_neon.td</a><br>
+++ include/clang/Basic/<a href="http://arm_neon.td" target="_blank">arm_neon.td</a><br>
@@ -748,7 +748,7 @@<br>
 def CFMLT  : SOpInst<"vclt", "udd", "csifUcUsUiQcQsQiQlQfQUcQUsQUiQUlQd", OP_LT>;<br>
<br>
 def CMEQ  : SInst<"vceqz", "ud",<br>
-                  "csifUcUsUiPcPsQcQsQiQlQfQUcQUsQUiQUlQPcQPsQd">;<br>
+                  "csifUcUsUiPcPsQcQsQiQlQfQUcQUsQUiQUlQPcQPsdQd">;<br>
 def CMGE  : SInst<"vcgez", "ud", "csifdQcQsQiQlQfQd">;<br>
 def CMLE  : SInst<"vclez", "ud", "csifdQcQsQiQlQfQd">;<br>
 def CMGT  : SInst<"vcgtz", "ud", "csifdQcQsQiQlQfQd">;<br>
Index: lib/CodeGen/CGBuiltin.cpp<br>
===================================================================<br>
--- lib/CodeGen/CGBuiltin.cpp<br>
+++ lib/CodeGen/CGBuiltin.cpp<br>
@@ -1759,6 +1759,7 @@<br>
   bool ExtendEle = false;<br>
   bool OverloadInt = false;<br>
   bool OverloadCmpInt = false;<br>
+  bool IsFpCmpZInt = false;<br>
   bool OverloadCvtInt = false;<br>
   bool OverloadWideInt = false;<br>
   bool OverloadNarrowInt = false;<br>
@@ -2267,7 +2268,8 @@<br>
   case AArch64::BI__builtin_neon_vceqzd_f64:<br>
     Int = Intrinsic::aarch64_neon_vceq; s = "vceq";<br>
     // Add implicit zero operand.<br>
-    Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType()));<br>
+    Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy));<br>
+    IsFpCmpZInt = true;<br>
     OverloadCmpInt = true; break;<br>
   // Scalar Floating-point Compare Greater Than Or Equal<br>
   case AArch64::BI__builtin_neon_vcges_f32:<br>
@@ -2279,7 +2281,8 @@<br>
   case AArch64::BI__builtin_neon_vcgezd_f64:<br>
     Int = Intrinsic::aarch64_neon_vcge; s = "vcge";<br>
     // Add implicit zero operand.<br>
-    Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType()));<br>
+    Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy));<br>
+    IsFpCmpZInt = true;<br>
     OverloadCmpInt = true; break;<br>
   // Scalar Floating-point Compare Greather Than<br>
   case AArch64::BI__builtin_neon_vcgts_f32:<br>
@@ -2291,7 +2294,8 @@<br>
   case AArch64::BI__builtin_neon_vcgtzd_f64:<br>
     Int = Intrinsic::aarch64_neon_vcgt; s = "vcgt";<br>
     // Add implicit zero operand.<br>
-    Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType()));<br>
+    Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy));<br>
+    IsFpCmpZInt = true;<br>
     OverloadCmpInt = true; break;<br>
   // Scalar Floating-point Compare Less Than or Equal<br>
   case AArch64::BI__builtin_neon_vcles_f32:<br>
@@ -2303,7 +2307,8 @@<br>
   case AArch64::BI__builtin_neon_vclezd_f64:<br>
     Int = Intrinsic::aarch64_neon_vclez; s = "vcle";<br>
     // Add implicit zero operand.<br>
-    Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType()));<br>
+    Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy));<br>
+    IsFpCmpZInt = true;<br>
     OverloadCmpInt = true; break;<br>
   // Scalar Floating-point Compare Less Than Zero<br>
   case AArch64::BI__builtin_neon_vclts_f32:<br>
@@ -2315,7 +2320,8 @@<br>
   case AArch64::BI__builtin_neon_vcltzd_f64:<br>
     Int = Intrinsic::aarch64_neon_vcltz; s = "vclt";<br>
     // Add implicit zero operand.<br>
-    Ops.push_back(llvm::Constant::getNullValue(Ops[0]->getType()));<br>
+    Ops.push_back(llvm::Constant::getNullValue(CGF.FloatTy));<br>
+    IsFpCmpZInt = true;<br>
     OverloadCmpInt = true; break;<br>
   // Scalar Floating-point Absolute Compare Greater Than Or Equal<br>
   case AArch64::BI__builtin_neon_vcages_f32:<br>
@@ -2600,6 +2606,8 @@<br>
     Ty = CGF.ConvertType(Arg->getType());<br>
     VTy = llvm::VectorType::get(Ty, 1);<br>
     Tys.push_back(VTy);<br>
+    if(IsFpCmpZInt)<br>
+      VTy = llvm::VectorType::get(CGF.FloatTy, 1);<br>
     Tys.push_back(VTy);<br>
<br>
     F = CGF.CGM.getIntrinsic(Int, Tys);<br>
Index: test/CodeGen/aarch64-neon-misc.c<br>
===================================================================<br>
--- test/CodeGen/aarch64-neon-misc.c<br>
+++ test/CodeGen/aarch64-neon-misc.c<br>
@@ -96,6 +96,12 @@<br>
   return vceqz_f32(a);<br>
 }<br>
<br>
+// CHECK: test_vceqz_f64<br>
+// CHECK: fcmeq  {{d[0-9]+}}, {{d[0-9]+}}, #0<br>
+uint64x1_t test_vceqz_f64(float64x1_t a) {<br>
+  return vceqz_f64(a);<br>
+}<br>
+<br>
 // CHECK: test_vceqzq_f32<br>
 // CHECK: fcmeq  {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0<br>
 uint32x4_t test_vceqzq_f32(float32x4_t a) {<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Best Regards,<div><br></div><div>Kevin Qin</div></div>
</div>