<div dir="ltr">Hi Nemanja, <div><br></div><div>This commit seems to break the build. </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 26, 2015 at 12:27 PM, Nemanja Ivanovic <span dir="ltr"><<a href="mailto:nemanja.i.ibm@gmail.com" target="_blank">nemanja.i.ibm@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: nemanjai<br>
Date: Fri Jun 26 14:27:20 2015<br>
New Revision: 240821<br>
<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D240821-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=-JSX6WJtQN5DfjEzuAw8x1qmO37oKdUkDnNhkH8A_gs&s=SQHoz7EH4NVnz-L3dJpc35tQd56ACVqfZsBltBU1hgo&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=240821&view=rev</a><br>
Log:<br>
Add missing builtins to altivec.h for ABI compliance (vol. 1)<br>
<br>
This patch corresponds to review:<br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D10637&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=-JSX6WJtQN5DfjEzuAw8x1qmO37oKdUkDnNhkH8A_gs&s=BhSklugH4YfN4eUVh5nbWuTzCKAuvssreZ0ytB-FKms&e=" rel="noreferrer" target="_blank">http://reviews.llvm.org/D10637</a><br>
<br>
This is the first round of additions of missing builtins listed in the ABI document. More to come (this builds onto what seurer already addes). This patch adds:<br>
vector signed long long vec_abs(vector signed long long)<br>
vector double vec_abs(vector double)<br>
vector signed long long vec_add(vector signed long long, vector signed long long)<br>
vector unsigned long long vec_add(vector unsigned long long, vector unsigned long long)<br>
vector double vec_add(vector double, vector double)<br>
vector double vec_and(vector bool long long, vector double)<br>
vector double vec_and(vector double, vector bool long long)<br>
vector double vec_and(vector double, vector double)<br>
vector signed long long vec_and(vector signed long long, vector signed long long)<br>
vector double vec_andc(vector bool long long, vector double)<br>
vector double vec_andc(vector double, vector bool long long)<br>
vector double vec_andc(vector double, vector double)<br>
vector signed long long vec_andc(vector signed long long, vector signed long long)<br>
vector double vec_ceil(vector double)<br>
vector bool long long vec_cmpeq(vector double, vector double)<br>
vector bool long long vec_cmpge(vector double, vector double)<br>
vector bool long long vec_cmpge(vector signed long long, vector signed long long)<br>
vector bool long long vec_cmpge(vector unsigned long long, vector unsigned long long)<br>
vector bool long long vec_cmpgt(vector double, vector double)<br>
vector bool long long vec_cmple(vector double, vector double)<br>
vector bool long long vec_cmple(vector signed long long, vector signed long long)<br>
vector bool long long vec_cmple(vector unsigned long long, vector unsigned long long)<br>
vector bool long long vec_cmplt(vector double, vector double)<br>
vector bool long long vec_cmplt(vector signed long long, vector signed long long)<br>
vector bool long long vec_cmplt(vector unsigned long long, vector unsigned long long)<br>
<br>
Modified:<br>
    cfe/trunk/include/clang/Basic/BuiltinsPPC.def<br>
    cfe/trunk/lib/CodeGen/CGBuiltin.cpp<br>
    cfe/trunk/lib/Headers/altivec.h<br>
    cfe/trunk/test/CodeGen/builtins-ppc-p8vector.c<br>
    cfe/trunk/test/CodeGen/builtins-ppc-vsx.c<br>
<br>
Modified: cfe/trunk/include/clang/Basic/BuiltinsPPC.def<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_Basic_BuiltinsPPC.def-3Frev-3D240821-26r1-3D240820-26r2-3D240821-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=-JSX6WJtQN5DfjEzuAw8x1qmO37oKdUkDnNhkH8A_gs&s=O_KuAaBocBYoYfOEN08gde-3_xudAPB1FFA2u9euabU&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsPPC.def?rev=240821&r1=240820&r2=240821&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Basic/BuiltinsPPC.def (original)<br>
+++ cfe/trunk/include/clang/Basic/BuiltinsPPC.def Fri Jun 26 14:27:20 2015<br>
@@ -267,6 +267,18 @@ BUILTIN(__builtin_vsx_xsmindp, "ddd", ""<br>
 BUILTIN(__builtin_vsx_xvdivdp, "V2dV2dV2d", "")<br>
 BUILTIN(__builtin_vsx_xvdivsp, "V4fV4fV4f", "")<br>
<br>
+BUILTIN(__builtin_vsx_xvrdpip, "V2dV2d", "")<br>
+BUILTIN(__builtin_vsx_xvrspip, "V4fV4f", "")<br>
+<br>
+BUILTIN(__builtin_vsx_xvcmpeqdp, "V2ULLiV2dV2d", "")<br>
+BUILTIN(__builtin_vsx_xvcmpeqsp, "V4UiV4fV4f", "")<br>
+<br>
+BUILTIN(__builtin_vsx_xvcmpgedp, "V2ULLiV2dV2d", "")<br>
+BUILTIN(__builtin_vsx_xvcmpgesp, "V4UiV4fV4f", "")<br>
+<br>
+BUILTIN(__builtin_vsx_xvcmpgtdp, "V2ULLiV2dV2d", "")<br>
+BUILTIN(__builtin_vsx_xvcmpgtsp, "V4UiV4fV4f", "")<br>
+<br>
 // HTM builtins<br>
 BUILTIN(__builtin_tbegin, "UiUIi", "")<br>
 BUILTIN(__builtin_tend, "UiUIi", "")<br>
<br>
Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_CodeGen_CGBuiltin.cpp-3Frev-3D240821-26r1-3D240820-26r2-3D240821-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=-JSX6WJtQN5DfjEzuAw8x1qmO37oKdUkDnNhkH8A_gs&s=x0m5HJBLgKvZHm85gI0tNCeYBglc8vyiRfo3RqDepJw&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=240821&r1=240820&r2=240821&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Fri Jun 26 14:27:20 2015<br>
@@ -6560,6 +6560,13 @@ Value *CodeGenFunction::EmitPPCBuiltinEx<br>
     llvm::Function *F = CGM.getIntrinsic(ID);<br>
     return Builder.CreateCall(F, Ops, "");<br>
   }<br>
+  case PPC::BI__builtin_vsx_xvrspip:<br>
+  case PPC::BI__builtin_vsx_xvrdpip:<br>
+    llvm::Type *ResultType = ConvertType(E->getType());<br>
+    Value *X = EmitScalarExpr(E->getArg(0));<br>
+    ID = Intrinsic::ceil;<br>
+    llvm::Function *F = CGM.getIntrinsic(ID, ResultType);<br>
+    return Builder.CreateCall(F, X);<br>
   }<br>
 }<br>
<br>
<br>
Modified: cfe/trunk/lib/Headers/altivec.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_Headers_altivec.h-3Frev-3D240821-26r1-3D240820-26r2-3D240821-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=-JSX6WJtQN5DfjEzuAw8x1qmO37oKdUkDnNhkH8A_gs&s=R6qgbB4DtmQjgFToC5Hu3DCT0-eaVx7sxKj3ed9fLNc&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/altivec.h?rev=240821&r1=240820&r2=240821&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Headers/altivec.h (original)<br>
+++ cfe/trunk/lib/Headers/altivec.h Fri Jun 26 14:27:20 2015<br>
@@ -110,14 +110,28 @@ static vector signed int __ATTRS_o_ai ve<br>
   return __builtin_altivec_vmaxsw(__a, -__a);<br>
 }<br>
<br>
+#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)<br>
+static vector signed long long __ATTRS_o_ai<br>
+vec_abs(vector signed long long __a) {<br>
+  return __builtin_altivec_vmaxsd(__a, -__a);<br>
+}<br>
+#endif<br>
+<br>
 static vector float __ATTRS_o_ai vec_abs(vector float __a) {<br>
   vector unsigned int __res =<br>
       (vector unsigned int)__a & (vector unsigned int)(0x7FFFFFFF);<br>
   return (vector float)__res;<br>
 }<br>
<br>
-/* vec_abss */<br>
+#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)<br>
+static vector double __ATTRS_o_ai vec_abs(vector double __a) {<br>
+  vector unsigned long long __res = { 0x7FFFFFFFFFFFFFFF, 0x7FFFFFFFFFFFFFFF };<br>
+  __res &= (vector unsigned int)__a;<br>
+  return (vector double)__res;<br>
+}<br>
+#endif<br>
<br>
+/* vec_abss */<br>
 #define __builtin_altivec_abss_v16qi vec_abss<br>
 #define __builtin_altivec_abss_v8hi vec_abss<br>
 #define __builtin_altivec_abss_v4si vec_abss<br>
@@ -226,6 +240,16 @@ static vector unsigned int __ATTRS_o_ai<br>
 }<br>
<br>
 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__)<br>
+static vector signed long long __ATTRS_o_ai<br>
+vec_add(vector signed long long __a, vector signed long long __b) {<br>
+  return __a + __b;<br>
+}<br>
+<br>
+static vector unsigned long long __ATTRS_o_ai<br>
+vec_add(vector unsigned long long __a, vector unsigned long long __b) {<br>
+  return __a + __b;<br>
+}<br>
+<br>
 static vector signed __int128 __ATTRS_o_ai vec_add(vector signed __int128 __a,<br>
                                                    vector signed __int128 __b) {<br>
   return __a + __b;<br>
@@ -241,6 +265,13 @@ static vector float __ATTRS_o_ai vec_add<br>
   return __a + __b;<br>
 }<br>
<br>
+#ifdef __VSX__<br>
+static vector double __ATTRS_o_ai<br>
+vec_add(vector double __a, vector double __b) {<br>
+  return __a + __b;<br>
+}<br>
+#endif // __VSX__<br>
+<br>
 /* vec_vaddubm */<br>
<br>
 #define __builtin_altivec_vaddubm vec_vaddubm<br>
@@ -746,6 +777,24 @@ static vector float __ATTRS_o_ai vec_and<br>
 }<br>
<br>
 #ifdef __VSX__<br>
+static vector double __ATTRS_o_ai vec_and(vector bool long long __a, vector double __b) {<br>
+  vector unsigned long long __res =<br>
+      (vector unsigned long long)__a & (vector unsigned long long)__b;<br>
+  return (vector double)__res;<br>
+}<br>
+<br>
+static vector double __ATTRS_o_ai vec_and(vector double __a, vector bool long long __b) {<br>
+  vector unsigned long long __res =<br>
+      (vector unsigned long long)__a & (vector unsigned long long)__b;<br>
+  return (vector double)__res;<br>
+}<br>
+<br>
+static vector double __ATTRS_o_ai vec_and(vector double __a, vector double __b) {<br>
+  vector unsigned long long __res =<br>
+      (vector unsigned long long)__a & (vector unsigned long long)__b;<br>
+  return (vector double)__res;<br>
+}<br>
+<br>
 static vector signed long long __ATTRS_o_ai<br>
 vec_and(vector signed long long __a, vector signed long long __b) {<br>
   return __a & __b;<br>
@@ -1068,6 +1117,26 @@ static vector float __ATTRS_o_ai vec_and<br>
 }<br>
<br>
 #ifdef __VSX__<br>
+static vector double __ATTRS_o_ai<br>
+vec_andc(vector bool long long __a, vector double __b) {<br>
+  vector unsigned long long __res =<br>
+      (vector unsigned long long)__a & ~(vector unsigned long long)__b;<br>
+  return (vector double)__res;<br>
+}<br>
+<br>
+static vector double __ATTRS_o_ai<br>
+vec_andc(vector double __a, vector bool long long __b) {<br>
+  vector unsigned long long __res =<br>
+      (vector unsigned long long)__a & ~(vector unsigned long long)__b;<br>
+  return (vector double)__res;<br>
+}<br>
+<br>
+static vector double __ATTRS_o_ai vec_andc(vector double __a, vector double __b) {<br>
+  vector unsigned long long __res =<br>
+      (vector unsigned long long)__a & ~(vector unsigned long long)__b;<br>
+  return (vector double)__res;<br>
+}<br>
+<br>
 static vector signed long long __ATTRS_o_ai<br>
 vec_andc(vector signed long long __a, vector signed long long __b) {<br>
   return __a & ~__b;<br>
@@ -1338,11 +1407,20 @@ vec_vavguw(vector unsigned int __a, vect<br>
<br>
 /* vec_ceil */<br>
<br>
-static vector float __attribute__((__always_inline__))<br>
-vec_ceil(vector float __a) {<br>
+static vector float __ATTRS_o_ai vec_ceil(vector float __a) {<br>
+#ifdef __VSX__<br>
+  return __builtin_vsx_xvrspip(__a);<br>
+#else<br>
   return __builtin_altivec_vrfip(__a);<br>
+#endif<br>
 }<br>
<br>
+#ifdef __VSX__<br>
+static vector double __ATTRS_o_ai vec_ceil(vector double __a) {<br>
+  return __builtin_vsx_xvrdpip(__a);<br>
+}<br>
+#endif<br>
+<br>
 /* vec_vrfip */<br>
<br>
 static vector float __attribute__((__always_inline__))<br>
@@ -1414,15 +1492,55 @@ vec_cmpeq(vector unsigned long long __a,<br>
<br>
 static vector bool int __ATTRS_o_ai vec_cmpeq(vector float __a,<br>
                                               vector float __b) {<br>
+#ifdef __VSX__<br>
+  return (vector bool int)__builtin_vsx_xvcmpeqsp(__a, __b);<br>
+#else<br>
   return (vector bool int)__builtin_altivec_vcmpeqfp(__a, __b);<br>
+#endif<br>
+}<br>
+<br>
+#ifdef __VSX__<br>
+static vector bool long long __ATTRS_o_ai<br>
+vec_cmpeq(vector double __a, vector double __b) {<br>
+  return (vector bool long long)__builtin_vsx_xvcmpeqdp(__a, __b);<br>
 }<br>
+#endif<br>
<br>
 /* vec_cmpge */<br>
<br>
-static vector bool int __attribute__((__always_inline__))<br>
+static vector bool int __ATTRS_o_ai<br>
 vec_cmpge(vector float __a, vector float __b) {<br>
+#ifdef __VSX__<br>
+  return (vector bool int)__builtin_vsx_xvcmpgesp(__a, __b);<br>
+#else<br>
   return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);<br>
+#endif<br>
+}<br>
+<br>
+#ifdef __VSX__<br>
+static vector bool long long __ATTRS_o_ai<br>
+vec_cmpge(vector double __a, vector double __b) {<br>
+  return (vector bool long long)__builtin_vsx_xvcmpgedp(__a, __b);<br>
 }<br>
+#endif<br>
+<br>
+#ifdef __POWER8_VECTOR__<br>
+/*  Forwrad declarations as the functions are used here */<br>
+static vector bool long long __ATTRS_o_ai<br>
+vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b);<br>
+static vector bool long long __ATTRS_o_ai<br>
+vec_cmpgt(vector signed long long __a, vector signed long long __b);<br>
+<br>
+static vector bool long long __ATTRS_o_ai<br>
+vec_cmpge(vector signed long long __a, vector signed long long __b) {<br>
+  return ~(vec_cmpgt(__b, __a));<br>
+}<br>
+<br>
+static vector bool long long __ATTRS_o_ai<br>
+vec_cmpge(vector unsigned long long __a, vector unsigned long long __b) {<br>
+  return ~(vec_cmpgt(__b, __a));<br>
+}<br>
+#endif<br>
<br>
 /* vec_vcmpgefp */<br>
<br>
@@ -1476,9 +1594,19 @@ vec_cmpgt(vector unsigned long long __a,<br>
<br>
 static vector bool int __ATTRS_o_ai vec_cmpgt(vector float __a,<br>
                                               vector float __b) {<br>
+#ifdef __VSX__<br>
+  return (vector bool int)__builtin_vsx_xvcmpgtsp(__a, __b);<br>
+#else<br>
   return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);<br>
+#endif<br>
 }<br>
<br>
+#ifdef __VSX__<br>
+static vector bool long long __ATTRS_o_ai<br>
+vec_cmpgt(vector double __a, vector double __b) {<br>
+  return (vector bool long long)__builtin_vsx_xvcmpgtdp(__a, __b);<br>
+}<br>
+#endif<br>
 /* vec_vcmpgtsb */<br>
<br>
 static vector bool char __attribute__((__always_inline__))<br>
@@ -1530,46 +1658,84 @@ vec_vcmpgtfp(vector float __a, vector fl<br>
<br>
 /* vec_cmple */<br>
<br>
-static vector bool int __attribute__((__always_inline__))<br>
+static vector bool int __ATTRS_o_ai<br>
 vec_cmple(vector float __a, vector float __b) {<br>
-  return (vector bool int)__builtin_altivec_vcmpgefp(__b, __a);<br>
+  return vec_cmpge(__b, __a);<br>
 }<br>
<br>
+#ifdef __VSX__<br>
+static vector bool long long __ATTRS_o_ai<br>
+vec_cmple(vector double __a, vector double __b) {<br>
+  return vec_cmpge(__b, __a);<br>
+}<br>
+#endif<br>
+<br>
+#ifdef __POWER8_VECTOR__<br>
+static vector bool long long __ATTRS_o_ai<br>
+vec_cmple(vector signed long long __a, vector signed long long __b) {<br>
+  return vec_cmpge(__b, __a);<br>
+}<br>
+<br>
+static vector bool long long __ATTRS_o_ai<br>
+vec_cmple(vector unsigned long long __a, vector unsigned long long __b) {<br>
+  return vec_cmpge(__b, __a);<br>
+}<br>
+#endif<br>
+<br>
 /* vec_cmplt */<br>
<br>
 static vector bool char __ATTRS_o_ai vec_cmplt(vector signed char __a,<br>
                                                vector signed char __b) {<br>
-  return (vector bool char)__builtin_altivec_vcmpgtsb(__b, __a);<br>
+  return vec_cmpgt(__b, __a);<br>
 }<br>
<br>
 static vector bool char __ATTRS_o_ai vec_cmplt(vector unsigned char __a,<br>
                                                vector unsigned char __b) {<br>
-  return (vector bool char)__builtin_altivec_vcmpgtub(__b, __a);<br>
+  return vec_cmpgt(__b, __a);<br>
 }<br>
<br>
 static vector bool short __ATTRS_o_ai vec_cmplt(vector short __a,<br>
                                                 vector short __b) {<br>
-  return (vector bool short)__builtin_altivec_vcmpgtsh(__b, __a);<br>
+  return vec_cmpgt(__b, __a);<br>
 }<br>
<br>
 static vector bool short __ATTRS_o_ai vec_cmplt(vector unsigned short __a,<br>
                                                 vector unsigned short __b) {<br>
-  return (vector bool short)__builtin_altivec_vcmpgtuh(__b, __a);<br>
+  return vec_cmpgt(__b, __a);<br>
 }<br>
<br>
 static vector bool int __ATTRS_o_ai vec_cmplt(vector int __a, vector int __b) {<br>
-  return (vector bool int)__builtin_altivec_vcmpgtsw(__b, __a);<br>
+  return vec_cmpgt(__b, __a);<br>
 }<br>
<br>
 static vector bool int __ATTRS_o_ai vec_cmplt(vector unsigned int __a,<br>
                                               vector unsigned int __b) {<br>
-  return (vector bool int)__builtin_altivec_vcmpgtuw(__b, __a);<br>
+  return vec_cmpgt(__b, __a);<br>
 }<br>
<br>
 static vector bool int __ATTRS_o_ai vec_cmplt(vector float __a,<br>
                                               vector float __b) {<br>
-  return (vector bool int)__builtin_altivec_vcmpgtfp(__b, __a);<br>
+  return vec_cmpgt(__b, __a);<br>
+}<br>
+<br>
+#ifdef __VSX__<br>
+static vector bool long long __ATTRS_o_ai<br>
+vec_cmplt(vector double __a, vector double __b) {<br>
+  return vec_cmpgt(__b, __a);<br>
 }<br>
+#endif<br>
+<br>
+#ifdef __POWER8_VECTOR__<br>
+static vector bool long long __ATTRS_o_ai<br>
+vec_cmplt(vector signed long long __a, vector signed long long __b) {<br>
+  return vec_cmpgt(__b, __a);<br>
+}<br>
+<br>
+static vector bool long long __ATTRS_o_ai<br>
+vec_cmplt(vector unsigned long long __a, vector unsigned long long __b) {<br>
+  return vec_cmpgt(__b, __a);<br>
+}<br>
+#endif<br>
<br>
 /* vec_ctf */<br>
<br>
<br>
Modified: cfe/trunk/test/CodeGen/builtins-ppc-p8vector.c<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_test_CodeGen_builtins-2Dppc-2Dp8vector.c-3Frev-3D240821-26r1-3D240820-26r2-3D240821-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=-JSX6WJtQN5DfjEzuAw8x1qmO37oKdUkDnNhkH8A_gs&s=KfYI1OKLlvLfiHMSv-NWIWOJJMktOHNLCtMliu7FevI&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-ppc-p8vector.c?rev=240821&r1=240820&r2=240821&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/builtins-ppc-p8vector.c (original)<br>
+++ cfe/trunk/test/CodeGen/builtins-ppc-p8vector.c Fri Jun 26 14:27:20 2015<br>
@@ -1,7 +1,11 @@<br>
 // REQUIRES: powerpc-registered-target<br>
 // RUN: %clang_cc1 -faltivec -target-feature +power8-vector -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck %s<br>
 // RUN: %clang_cc1 -faltivec -target-feature +power8-vector -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s -check-prefix=CHECK-LE<br>
-// RUN: not %clang_cc1 -faltivec -triple powerpc64-unknown-unknown -emit-llvm %s -o - 2>&1 | FileCheck %s -check-prefix=CHECK-PPC<br>
+// RUN: not %clang_cc1 -faltivec -target-feature +vsx -triple powerpc64-unknown-unknown -emit-llvm %s -o - 2>&1 | FileCheck %s -check-prefix=CHECK-PPC<br>
+// Added -target-feature +vsx above to avoid errors about "vector double" and to<br>
+// generate the correct errors for functions that are only overloaded with VSX<br>
+// (vec_cmpge, vec_cmple). Without this option, there is only one overload so<br>
+// it is selected.<br>
<br>
 vector signed char vsc = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5 };<br>
 vector unsigned char vuc = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5 };<br>
@@ -11,6 +15,7 @@ vector bool int vbi = {0, -1, -1, 0};<br>
 vector bool long long vbll = { 1, 0 };<br>
 vector signed long long vsll = { 1, 2 };<br>
 vector unsigned long long vull = { 1, 2 };<br>
+vector double vda = { 1.e-11, -132.23e10 };<br>
<br>
 int res_i;<br>
 vector signed char res_vsc;<br>
@@ -21,10 +26,35 @@ vector bool int res_vbi;<br>
 vector bool long long res_vbll;<br>
 vector signed long long res_vsll;<br>
 vector unsigned long long res_vull;<br>
+vector double res_vd;<br>
<br>
 // CHECK-LABEL: define void @test1<br>
 void test1() {<br>
<br>
+  /* vec_abs */<br>
+  res_vsll = vec_abs(vsll);<br>
+// CHECK: call <2 x i64> @llvm.ppc.altivec.vmaxsd(<2 x i64> %{{[0-9]]*}}, <2 x i64><br>
+// CHECK-LE: call <2 x i64> @llvm.ppc.altivec.vmaxsd(<2 x i64> %{{[0-9]]*}}, <2 x i64><br>
+// CHECK-PPC: error: call to 'vec_abs' is ambiguous<br>
+<br>
+  res_vd = vec_abs(vda);<br>
+// CHECK: store <2 x i64> <i64 9223372036854775807, i64 9223372036854775807>, <2 x i64>*<br>
+// CHECK: and <2 x i64><br>
+// CHECK-LE: store <2 x i64> <i64 9223372036854775807, i64 9223372036854775807>, <2 x i64>*<br>
+// CHECK-LE: and <2 x i64><br>
+// CHECK-PPC: error: call to 'vec_abs' is ambiguous<br>
+<br>
+  /* vec_add */<br>
+  res_vsll = vec_add(vsll, vsll);<br>
+// CHECK: add <2 x i64><br>
+// CHECK-LE: add <2 x i64><br>
+// CHECK-PPC: error: call to 'vec_add' is ambiguous<br>
+<br>
+  res_vull = vec_add(vull, vull);<br>
+// CHECK: add <2 x i64><br>
+// CHECK-LE: add <2 x i64><br>
+// CHECK-PPC: error: call to 'vec_add' is ambiguous<br>
+<br>
   /* vec_cmpeq */<br>
   res_vbll = vec_cmpeq(vsll, vsll);<br>
 // CHECK: @llvm.ppc.altivec.vcmpequd<br>
@@ -36,6 +66,28 @@ void test1() {<br>
 // CHECK-LE: @llvm.ppc.altivec.vcmpequd<br>
 // CHECK-PPC: error: call to 'vec_cmpeq' is ambiguous<br>
<br>
+  /* vec_cmpge */<br>
+  res_vbll = vec_cmpge(vsll, vsll);<br>
+// CHECK: @llvm.ppc.altivec.vcmpgtsd<br>
+// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd<br>
+// CHECK-PPC: error: call to 'vec_cmpge' is ambiguous<br>
+<br>
+  res_vbll = vec_cmpge(vull, vull);<br>
+// CHECK: @llvm.ppc.altivec.vcmpgtud<br>
+// CHECK-LE: @llvm.ppc.altivec.vcmpgtud<br>
+// CHECK-PPC: error: call to 'vec_cmpge' is ambiguous<br>
+<br>
+  /* vec_cmple */<br>
+  res_vbll = vec_cmple(vsll, vsll);<br>
+// CHECK: @llvm.ppc.altivec.vcmpgtsd<br>
+// CHECK-LE: @llvm.ppc.altivec.vcmpgtsd<br>
+// CHECK-PPC: error: call to 'vec_cmple' is ambiguous<br>
+<br>
+  res_vbll = vec_cmple(vull, vull);<br>
+// CHECK: @llvm.ppc.altivec.vcmpgtud<br>
+// CHECK-LE: @llvm.ppc.altivec.vcmpgtud<br>
+// CHECK-PPC: error: call to 'vec_cmple' is ambiguous<br>
+<br>
   /* vec_cmpgt */<br>
   res_vbll = vec_cmpgt(vsll, vsll);<br>
 // CHECK: @llvm.ppc.altivec.vcmpgtsd<br>
@@ -47,6 +99,17 @@ void test1() {<br>
 // CHECK-LE: @llvm.ppc.altivec.vcmpgtud<br>
 // CHECK-PPC: error: call to 'vec_cmpgt' is ambiguous<br>
<br>
+  /* vec_cmplt */<br>
+  res_vbll = vec_cmplt(vsll, vsll);<br>
+// CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpgtsd(<2 x i64> %{{[0-9]*}}, <2 x i64> %{{[0-9]*}})<br>
+// CHECK-LE: call <2 x i64> @llvm.ppc.altivec.vcmpgtsd(<2 x i64> %{{[0-9]*}}, <2 x i64> %{{[0-9]*}})<br>
+// CHECK-PPC: error: call to 'vec_cmplt' is ambiguous<br>
+<br>
+  res_vbll = vec_cmplt(vull, vull);<br>
+// CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpgtud(<2 x i64> %{{[0-9]*}}, <2 x i64> %{{[0-9]*}})<br>
+// CHECK-LE: call <2 x i64> @llvm.ppc.altivec.vcmpgtud(<2 x i64> %{{[0-9]*}}, <2 x i64> %{{[0-9]*}})<br>
+// CHECK-PPC: error: call to 'vec_cmplt' is ambiguous<br>
+<br>
   /* ----------------------- predicates --------------------------- */<br>
   /* vec_all_eq */<br>
   res_i = vec_all_eq(vsll, vsll);<br>
<br>
Modified: cfe/trunk/test/CodeGen/builtins-ppc-vsx.c<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_test_CodeGen_builtins-2Dppc-2Dvsx.c-3Frev-3D240821-26r1-3D240820-26r2-3D240821-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=-JSX6WJtQN5DfjEzuAw8x1qmO37oKdUkDnNhkH8A_gs&s=yDD4ffFlR1mQ3wCJF5r06K_mOSaC8jZJGZRoKbPYcSc&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-ppc-vsx.c?rev=240821&r1=240820&r2=240821&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/builtins-ppc-vsx.c (original)<br>
+++ cfe/trunk/test/CodeGen/builtins-ppc-vsx.c Fri Jun 26 14:27:20 2015<br>
@@ -1,5 +1,6 @@<br>
 // REQUIRES: powerpc-registered-target<br>
 // RUN: %clang_cc1 -faltivec -target-feature +vsx -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck %s<br>
+// RUN: %clang_cc1 -faltivec -target-feature +vsx -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s<br>
<br>
 vector unsigned char vuc = { 8,  9, 10, 11, 12, 13, 14, 15,<br>
                              0,  1,  2,  3,  4,  5,  6,  7};<br>
@@ -16,14 +17,98 @@ vector float res_vf;<br>
 vector double res_vd;<br>
 vector signed int res_vsi;<br>
 vector unsigned int res_vui;<br>
+vector bool int res_vbi;<br>
 vector bool long long res_vbll;<br>
 vector signed long long res_vsll;<br>
 vector unsigned long long res_vull;<br>
 double res_d;<br>
<br>
+void dummy() { }<br>
+<br>
 void test1() {<br>
 // CHECK-LABEL: define void @test1<br>
<br>
+  res_vd = vec_add(vd, vd);<br>
+// CHECK: fadd <2 x double><br>
+<br>
+  res_vd = vec_and(vbll, vd);<br>
+// CHECK: and <2 x i64><br>
+// CHECK: bitcast <2 x i64> %{{[0-9]*}} to <2 x double><br>
+<br>
+  res_vd = vec_and(vd, vbll);<br>
+// CHECK: and <2 x i64><br>
+// CHECK: bitcast <2 x i64> %{{[0-9]*}} to <2 x double><br>
+<br>
+  res_vd = vec_and(vd, vd);<br>
+// CHECK: and <2 x i64><br>
+// CHECK: bitcast <2 x i64> %{{[0-9]*}} to <2 x double><br>
+<br>
+  dummy();<br>
+// CHECK: call void @dummy()<br>
+<br>
+  res_vd = vec_andc(vbll, vd);<br>
+// CHECK: bitcast <2 x double> %{{[0-9]*}} to <2 x i64><br>
+// CHECK: xor <2 x i64> %{{[0-9]*}}, <i64 -1, i64 -1><br>
+// CHECK: and <2 x i64><br>
+// CHECK: bitcast <2 x i64> %{{[0-9]*}} to <2 x double><br>
+<br>
+  dummy();<br>
+// CHECK: call void @dummy()<br>
+<br>
+  res_vd = vec_andc(vd, vbll);<br>
+// CHECK: bitcast <2 x double> %{{[0-9]*}} to <2 x i64><br>
+// CHECK: xor <2 x i64> %{{[0-9]*}}, <i64 -1, i64 -1><br>
+// CHECK: and <2 x i64><br>
+// CHECK: bitcast <2 x i64> %{{[0-9]*}} to <2 x double><br>
+<br>
+  dummy();<br>
+// CHECK: call void @dummy()<br>
+<br>
+  res_vd = vec_andc(vd, vd);<br>
+// CHECK: bitcast <2 x double> %{{[0-9]*}} to <2 x i64><br>
+// CHECK: xor <2 x i64> %{{[0-9]*}}, <i64 -1, i64 -1><br>
+// CHECK: and <2 x i64><br>
+// CHECK: bitcast <2 x i64> %{{[0-9]*}} to <2 x double><br>
+<br>
+  dummy();<br>
+// CHECK: call void @dummy()<br>
+<br>
+  res_vd = vec_ceil(vd);<br>
+// CHECK: call <2 x double> @llvm.ceil.v2f64(<2 x double> %{{[0-9]*}})<br>
+<br>
+  res_vf = vec_ceil(vf);<br>
+// CHECK: call <4 x float> @llvm.ceil.v4f32(<4 x float> %{{[0-9]*}})<br>
+<br>
+  res_vbll = vec_cmpeq(vd, vd);<br>
+// CHECK: call <2 x i64> @llvm.ppc.vsx.xvcmpeqdp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})<br>
+<br>
+  res_vbi = vec_cmpeq(vf, vf);<br>
+// CHECK: call <4 x i32> @llvm.ppc.vsx.xvcmpeqsp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})<br>
+<br>
+  res_vbll = vec_cmpge(vd, vd);<br>
+// CHECK: call <2 x i64> @llvm.ppc.vsx.xvcmpgedp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})<br>
+<br>
+  res_vbi = vec_cmpge(vf, vf);<br>
+// CHECK: call <4 x i32> @llvm.ppc.vsx.xvcmpgesp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})<br>
+<br>
+  res_vbll = vec_cmpgt(vd, vd);<br>
+// CHECK: call <2 x i64> @llvm.ppc.vsx.xvcmpgtdp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})<br>
+<br>
+  res_vbi = vec_cmpgt(vf, vf);<br>
+// CHECK: call <4 x i32> @llvm.ppc.vsx.xvcmpgtsp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})<br>
+<br>
+  res_vbll = vec_cmple(vd, vd);<br>
+// CHECK: call <2 x i64> @llvm.ppc.vsx.xvcmpgedp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})<br>
+<br>
+  res_vbi = vec_cmple(vf, vf);<br>
+// CHECK: call <4 x i32> @llvm.ppc.vsx.xvcmpgesp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})<br>
+<br>
+  res_vbll = vec_cmplt(vd, vd);<br>
+// CHECK: call <2 x i64> @llvm.ppc.vsx.xvcmpgtdp(<2 x double> %{{[0-9]*}}, <2 x double> %{{[0-9]*}})<br>
+<br>
+  res_vbi = vec_cmplt(vf, vf);<br>
+// CHECK: call <4 x i32> @llvm.ppc.vsx.xvcmpgtsp(<4 x float> %{{[0-9]*}}, <4 x float> %{{[0-9]*}})<br>
+<br>
   /* vec_div */<br>
   res_vf = vec_div(vf, vf);<br>
 // CHECK: @llvm.ppc.vsx.xvdivsp<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>