support for the rest of AltiVec functions with bool/pixel arguments and return values (except predicates)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111511 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/CodeGen/builtins-ppc-altivec.c b/test/CodeGen/builtins-ppc-altivec.c
index 587e2b4..6bf3c83 100644
--- a/test/CodeGen/builtins-ppc-altivec.c
+++ b/test/CodeGen/builtins-ppc-altivec.c
@@ -323,12 +323,13 @@
 
   res_vf = vec_vandc(vf, vbi);                  // CHECK: xor <4 x i32>
                                                 // CHECK: and <4 x i32>
+
 }
 
-// CHECK: i32 @test2
-int test2() {
+// CHECK: define void @test2
+void test2() {
   /* vec_avg */
-  res_vsc = vec_avg(vsc, vsc);                  // CHECK: call {{.*}}@llvm.ppc.altivec.vavgsb
+  res_vsc = vec_avg(vsc, vsc);                  // CHECK: @llvm.ppc.altivec.vavgsb
   res_vuc = vec_avg(vuc, vuc);                  // CHECK: @llvm.ppc.altivec.vavgub
   res_vs  = vec_avg(vs, vs);                    // CHECK: @llvm.ppc.altivec.vavgsh
   res_vus = vec_avg(vus, vus);                  // CHECK: @llvm.ppc.altivec.vavguh
@@ -350,53 +351,52 @@
   res_vi = vec_vcmpbfp(vf, vf);                 // CHECK: @llvm.ppc.altivec.vcmpbfp
 
   /* vec_cmpeq */
-  vsc = vec_cmpeq(vsc, vsc);            // CHCK: call {{.*}}@llvm.ppc.altivec.vcmpequb
-  vuc = vec_cmpeq(vuc, vuc);            // CHCK: @llvm.ppc.altivec.vcmpequb
-  vs = vec_cmpeq(vs, vs);              // CHCK: @llvm.ppc.altivec.vcmpequh
-  vs = vec_cmpeq(vus, vus);            // CHCK: @llvm.ppc.altivec.vcmpequh
-  vi = vec_cmpeq(vi, vi);              // CHCK: @llvm.ppc.altivec.vcmpequw
-  vui = vec_cmpeq(vui, vui);            // CHCK: @llvm.ppc.altivec.vcmpequw
-  vf = vec_cmpeq(vf, vf);              // CHCK: @llvm.ppc.altivec.vcmpeqfp
+  res_vbc = vec_cmpeq(vsc, vsc);                // CHECK: @llvm.ppc.altivec.vcmpequb
+  res_vbc = vec_cmpeq(vuc, vuc);                // CHECK: @llvm.ppc.altivec.vcmpequb
+  res_vbs = vec_cmpeq(vs, vs);                  // CHECK: @llvm.ppc.altivec.vcmpequh
+  res_vbs = vec_cmpeq(vus, vus);                // CHECK: @llvm.ppc.altivec.vcmpequh
+  res_vbi = vec_cmpeq(vi, vi);                  // CHECK: @llvm.ppc.altivec.vcmpequw
+  res_vbi = vec_cmpeq(vui, vui);                // CHECK: @llvm.ppc.altivec.vcmpequw
+  res_vbi = vec_cmpeq(vf, vf);                  // CHECK: @llvm.ppc.altivec.vcmpeqfp
 
   /* vec_cmpge */
-  vf = vec_cmpge(vf, vf);              // CHCK: @llvm.ppc.altivec.vcmpgefp
-  vf = vec_vcmpgefp(vf, vf);           // CHCK: call {{.*}}@llvm.ppc.altivec.vcmpgefp
-
+  res_vbi = vec_cmpge(vf, vf);                  // CHECK: @llvm.ppc.altivec.vcmpgefp
+  res_vbi = vec_vcmpgefp(vf, vf);               // CHECK: @llvm.ppc.altivec.vcmpgefp
 }
 
-// CHECK: define i32 @test5
-int test5() {
+// CHECK: define void @test5
+void test5() {
   
   /* vec_cmpgt */
-  vsc = vec_cmpgt(vsc, vsc);            // CHECK: call {{.*}}@llvm.ppc.altivec.vcmpgtsb
-  vuc = vec_cmpgt(vuc, vuc);            // CHECK: call {{.*}}@llvm.ppc.altivec.vcmpgtub
-  vs = vec_cmpgt(vs, vs);              // CHECK: call {{.*}}@llvm.ppc.altivec.vcmpgtsh
-  vus = vec_cmpgt(vus, vus);            // CHECK: @llvm.ppc.altivec.vcmpgtuh
-  vi = vec_cmpgt(vi, vi);              // CHECK: @llvm.ppc.altivec.vcmpgtsw
-  vui = vec_cmpgt(vui, vui);            // CHECK: @llvm.ppc.altivec.vcmpgtuw
-  vf = vec_cmpgt(vf, vf);              // CHECK: @llvm.ppc.altivec.vcmpgtfp
-  vsc = vec_vcmpgtsb(vsc, vsc);         // CHECK: @llvm.ppc.altivec.vcmpgtsb
-  vuc = vec_vcmpgtub(vuc, vuc);         // CHECK: @llvm.ppc.altivec.vcmpgtub
-  vs = vec_vcmpgtsh(vs, vs);           // CHECK: @llvm.ppc.altivec.vcmpgtsh
-  vus = vec_vcmpgtuh(vus, vus);         // CHECK: @llvm.ppc.altivec.vcmpgtuh
-  vi = vec_vcmpgtsw(vi, vi);           // CHECK: @llvm.ppc.altivec.vcmpgtsw
-  vui = vec_vcmpgtuw(vui, vui);         // CHECK: @llvm.ppc.altivec.vcmpgtuw
-  vf = vec_vcmpgtfp(vf, vf);           // CHECK: @llvm.ppc.altivec.vcmpgtfp
+  res_vbc = vec_cmpgt(vsc, vsc);                // CHECK: @llvm.ppc.altivec.vcmpgtsb
+  res_vbc = vec_cmpgt(vuc, vuc);                // CHECK: @llvm.ppc.altivec.vcmpgtub
+  res_vbs = vec_cmpgt(vs, vs);                  // CHECK: @llvm.ppc.altivec.vcmpgtsh
+  res_vbs = vec_cmpgt(vus, vus);                // CHECK: @llvm.ppc.altivec.vcmpgtuh
+  res_vbi = vec_cmpgt(vi, vi);                  // CHECK: @llvm.ppc.altivec.vcmpgtsw
+  res_vbi = vec_cmpgt(vui, vui);                // CHECK: @llvm.ppc.altivec.vcmpgtuw
+  res_vbi = vec_cmpgt(vf, vf);                  // CHECK: @llvm.ppc.altivec.vcmpgtfp
+  res_vbc = vec_vcmpgtsb(vsc, vsc);             // CHECK: @llvm.ppc.altivec.vcmpgtsb
+  res_vbc = vec_vcmpgtub(vuc, vuc);             // CHECK: @llvm.ppc.altivec.vcmpgtub
+  res_vbs = vec_vcmpgtsh(vs, vs);               // CHECK: @llvm.ppc.altivec.vcmpgtsh
+  res_vbs = vec_vcmpgtuh(vus, vus);             // CHECK: @llvm.ppc.altivec.vcmpgtuh
+  res_vbi = vec_vcmpgtsw(vi, vi);               // CHECK: @llvm.ppc.altivec.vcmpgtsw
+  res_vbi = vec_vcmpgtuw(vui, vui);             // CHECK: @llvm.ppc.altivec.vcmpgtuw
+  res_vbi = vec_vcmpgtfp(vf, vf);               // CHECK: @llvm.ppc.altivec.vcmpgtfp
 
   /* vec_cmple */
-  vf = vec_cmple(vf, vf);              // CHECK: call {{.*}}@llvm.ppc.altivec.vcmpgefp
+  res_vbi = vec_cmple(vf, vf);                  // CHECK: @llvm.ppc.altivec.vcmpgefp
 }
 
-// CHECK: define i32 @test6
-int test6() {
+// CHECK: define void @test6
+void test6() {
   /* vec_cmplt */
-  vsc =vec_cmplt(vsc, vsc);            // CHECK: call {{.*}}@llvm.ppc.altivec.vcmpgtsb
-  vsc =vec_cmplt(vuc, vuc);            // CHECK: call {{.*}}@llvm.ppc.altivec.vcmpgtub
-  vs = vec_cmplt(vs, vs);              // CHECK: call {{.*}}@llvm.ppc.altivec.vcmpgtsh
-  vs = vec_cmplt(vus, vus);            // CHECK: @llvm.ppc.altivec.vcmpgtuh
-  vi = vec_cmplt(vi, vi);              // CHECK: @llvm.ppc.altivec.vcmpgtsw
-  vui = vec_cmplt(vui, vui);            // CHECK: @llvm.ppc.altivec.vcmpgtuw
-  vf = vec_cmplt(vf, vf);              // CHECK: @llvm.ppc.altivec.vcmpgtfp
+  res_vbc = vec_cmplt(vsc, vsc);                // CHECK: @llvm.ppc.altivec.vcmpgtsb
+  res_vbc = vec_cmplt(vuc, vuc);                // CHECK: @llvm.ppc.altivec.vcmpgtub
+  res_vbs = vec_cmplt(vs, vs);                  // CHECK: @llvm.ppc.altivec.vcmpgtsh
+  res_vbs = vec_cmplt(vus, vus);                // CHECK: @llvm.ppc.altivec.vcmpgtuh
+  res_vbi = vec_cmplt(vi, vi);                  // CHECK: @llvm.ppc.altivec.vcmpgtsw
+  res_vbi = vec_cmplt(vui, vui);                // CHECK: @llvm.ppc.altivec.vcmpgtuw
+  res_vbi = vec_cmplt(vf, vf);                  // CHECK: @llvm.ppc.altivec.vcmpgtfp
 
   /* vec_ctf */
   res_vf  = vec_ctf(vi, param_i);               // CHECK: @llvm.ppc.altivec.vcfsx
@@ -443,28 +443,36 @@
   res_vsc = vec_ld(0, &param_sc);               // CHECK: @llvm.ppc.altivec.lvx
   res_vuc = vec_ld(0, &vuc);                    // CHECK: @llvm.ppc.altivec.lvx
   res_vuc = vec_ld(0, &param_uc);               // CHECK: @llvm.ppc.altivec.lvx
+  res_vbc = vec_ld(0, &vbc);                    // CHECK: @llvm.ppc.altivec.lvx
   res_vs  = vec_ld(0, &vs);                     // CHECK: @llvm.ppc.altivec.lvx
   res_vs  = vec_ld(0, &param_s);                // CHECK: @llvm.ppc.altivec.lvx
   res_vus = vec_ld(0, &vus);                    // CHECK: @llvm.ppc.altivec.lvx
   res_vus = vec_ld(0, &param_us);               // CHECK: @llvm.ppc.altivec.lvx
+  res_vbs = vec_ld(0, &vbs);                    // CHECK: @llvm.ppc.altivec.lvx
+  res_vp  = vec_ld(0, &vp);                     // CHECK: @llvm.ppc.altivec.lvx
   res_vi  = vec_ld(0, &vi);                     // CHECK: @llvm.ppc.altivec.lvx
   res_vi  = vec_ld(0, &param_i);                // CHECK: @llvm.ppc.altivec.lvx
   res_vui = vec_ld(0, &vui);                    // CHECK: @llvm.ppc.altivec.lvx
   res_vui = vec_ld(0, &param_ui);               // CHECK: @llvm.ppc.altivec.lvx
+  res_vbi = vec_ld(0, &vbi);                    // CHECK: @llvm.ppc.altivec.lvx
   res_vf  = vec_ld(0, &vf);                     // CHECK: @llvm.ppc.altivec.lvx
   res_vf  = vec_ld(0, &param_f);                // CHECK: @llvm.ppc.altivec.lvx
   res_vsc = vec_lvx(0, &vsc);                   // CHECK: @llvm.ppc.altivec.lvx
   res_vsc = vec_lvx(0, &param_sc);              // CHECK: @llvm.ppc.altivec.lvx
   res_vuc = vec_lvx(0, &vuc);                   // CHECK: @llvm.ppc.altivec.lvx
   res_vuc = vec_lvx(0, &param_uc);              // CHECK: @llvm.ppc.altivec.lvx
+  res_vbc = vec_lvx(0, &vbc);                   // CHECK: @llvm.ppc.altivec.lvx
   res_vs  = vec_lvx(0, &vs);                    // CHECK: @llvm.ppc.altivec.lvx
   res_vs  = vec_lvx(0, &param_s);               // CHECK: @llvm.ppc.altivec.lvx
   res_vus = vec_lvx(0, &vus);                   // CHECK: @llvm.ppc.altivec.lvx
   res_vus = vec_lvx(0, &param_us);              // CHECK: @llvm.ppc.altivec.lvx
+  res_vbs = vec_lvx(0, &vbs);                   // CHECK: @llvm.ppc.altivec.lvx
+  res_vp  = vec_lvx(0, &vp);                    // CHECK: @llvm.ppc.altivec.lvx
   res_vi  = vec_lvx(0, &vi);                    // CHECK: @llvm.ppc.altivec.lvx
   res_vi  = vec_lvx(0, &param_i);               // CHECK: @llvm.ppc.altivec.lvx
   res_vui = vec_lvx(0, &vui);                   // CHECK: @llvm.ppc.altivec.lvx
   res_vui = vec_lvx(0, &param_ui);              // CHECK: @llvm.ppc.altivec.lvx
+  res_vbi = vec_lvx(0, &vbi);                   // CHECK: @llvm.ppc.altivec.lvx
   res_vf  = vec_lvx(0, &vf);                    // CHECK: @llvm.ppc.altivec.lvx
   res_vf  = vec_lvx(0, &param_f);               // CHECK: @llvm.ppc.altivec.lvx
 
@@ -489,28 +497,36 @@
   res_vsc = vec_ldl(0, &param_sc);              // CHECK: @llvm.ppc.altivec.lvxl
   res_vuc = vec_ldl(0, &vuc);                   // CHECK: @llvm.ppc.altivec.lvxl
   res_vuc = vec_ldl(0, &param_uc);              // CHECK: @llvm.ppc.altivec.lvxl
+  res_vbc = vec_ldl(0, &vbc);                   // CHECK: @llvm.ppc.altivec.lvxl
   res_vs  = vec_ldl(0, &vs);                    // CHECK: @llvm.ppc.altivec.lvxl
   res_vs  = vec_ldl(0, &param_s);               // CHECK: @llvm.ppc.altivec.lvxl
   res_vus = vec_ldl(0, &vus);                   // CHECK: @llvm.ppc.altivec.lvxl
   res_vus = vec_ldl(0, &param_us);              // CHECK: @llvm.ppc.altivec.lvxl
+  res_vbs = vec_ldl(0, &vbs);                   // CHECK: @llvm.ppc.altivec.lvxl
+  res_vp  = vec_ldl(0, &vp);                    // CHECK: @llvm.ppc.altivec.lvxl
   res_vi  = vec_ldl(0, &vi);                    // CHECK: @llvm.ppc.altivec.lvxl
   res_vi  = vec_ldl(0, &param_i);               // CHECK: @llvm.ppc.altivec.lvxl
   res_vui = vec_ldl(0, &vui);                   // CHECK: @llvm.ppc.altivec.lvxl
   res_vui = vec_ldl(0, &param_ui);              // CHECK: @llvm.ppc.altivec.lvxl
+  res_vbi = vec_ldl(0, &vbi);                   // CHECK: @llvm.ppc.altivec.lvxl
   res_vf  = vec_ldl(0, &vf);                    // CHECK: @llvm.ppc.altivec.lvxl
   res_vf  = vec_ldl(0, &param_f);               // CHECK: @llvm.ppc.altivec.lvxl
   res_vsc = vec_lvxl(0, &vsc);                  // CHECK: @llvm.ppc.altivec.lvxl
   res_vsc = vec_lvxl(0, &param_sc);             // CHECK: @llvm.ppc.altivec.lvxl
   res_vuc = vec_lvxl(0, &vuc);                  // CHECK: @llvm.ppc.altivec.lvxl
+  res_vbc = vec_lvxl(0, &vbc);                  // CHECK: @llvm.ppc.altivec.lvxl
   res_vuc = vec_lvxl(0, &param_uc);             // CHECK: @llvm.ppc.altivec.lvxl
   res_vs  = vec_lvxl(0, &vs);                   // CHECK: @llvm.ppc.altivec.lvxl
   res_vs  = vec_lvxl(0, &param_s);              // CHECK: @llvm.ppc.altivec.lvxl
   res_vus = vec_lvxl(0, &vus);                  // CHECK: @llvm.ppc.altivec.lvxl
   res_vus = vec_lvxl(0, &param_us);             // CHECK: @llvm.ppc.altivec.lvxl
+  res_vbs = vec_lvxl(0, &vbs);                  // CHECK: @llvm.ppc.altivec.lvxl
+  res_vp  = vec_lvxl(0, &vp);                   // CHECK: @llvm.ppc.altivec.lvxl
   res_vi  = vec_lvxl(0, &vi);                   // CHECK: @llvm.ppc.altivec.lvxl
   res_vi  = vec_lvxl(0, &param_i);              // CHECK: @llvm.ppc.altivec.lvxl
   res_vui = vec_lvxl(0, &vui);                  // CHECK: @llvm.ppc.altivec.lvxl
   res_vui = vec_lvxl(0, &param_ui);             // CHECK: @llvm.ppc.altivec.lvxl
+  res_vbi = vec_lvxl(0, &vbi);                  // CHECK: @llvm.ppc.altivec.lvxl
   res_vf  = vec_lvxl(0, &vf);                   // CHECK: @llvm.ppc.altivec.lvxl
   res_vf  = vec_lvxl(0, &param_f);              // CHECK: @llvm.ppc.altivec.lvxl
 
@@ -534,18 +550,42 @@
 
   /* vec_max */
   res_vsc = vec_max(vsc, vsc);                  // CHECK: @llvm.ppc.altivec.vmaxsb
+  res_vsc = vec_max(vbc, vsc);                  // CHECK: @llvm.ppc.altivec.vmaxsb
+  res_vsc = vec_max(vsc, vbc);                  // CHECK: @llvm.ppc.altivec.vmaxsb
   res_vuc = vec_max(vuc, vuc);                  // CHECK: @llvm.ppc.altivec.vmaxub
+  res_vuc = vec_max(vbc, vuc);                  // CHECK: @llvm.ppc.altivec.vmaxub
+  res_vuc = vec_max(vuc, vbc);                  // CHECK: @llvm.ppc.altivec.vmaxub
   res_vs  = vec_max(vs, vs);                    // CHECK: @llvm.ppc.altivec.vmaxsh
+  res_vs  = vec_max(vbs, vs);                   // CHECK: @llvm.ppc.altivec.vmaxsh
+  res_vs  = vec_max(vs, vbs);                   // CHECK: @llvm.ppc.altivec.vmaxsh
   res_vus = vec_max(vus, vus);                  // CHECK: @llvm.ppc.altivec.vmaxuh
+  res_vus = vec_max(vbs, vus);                  // CHECK: @llvm.ppc.altivec.vmaxuh
+  res_vus = vec_max(vus, vbs);                  // CHECK: @llvm.ppc.altivec.vmaxuh
   res_vi  = vec_max(vi, vi);                    // CHECK: @llvm.ppc.altivec.vmaxsw
+  res_vi  = vec_max(vbi, vi);                   // CHECK: @llvm.ppc.altivec.vmaxsw
+  res_vi  = vec_max(vi, vbi);                   // CHECK: @llvm.ppc.altivec.vmaxsw
   res_vui = vec_max(vui, vui);                  // CHECK: @llvm.ppc.altivec.vmaxuw
+  res_vui = vec_max(vbi, vui);                  // CHECK: @llvm.ppc.altivec.vmaxuw
+  res_vui = vec_max(vui, vbi);                  // CHECK: @llvm.ppc.altivec.vmaxuw
   res_vf  = vec_max(vf, vf);                    // CHECK: @llvm.ppc.altivec.vmaxfp
   res_vsc = vec_vmaxsb(vsc, vsc);               // CHECK: @llvm.ppc.altivec.vmaxsb
+  res_vsc = vec_vmaxsb(vbc, vsc);               // CHECK: @llvm.ppc.altivec.vmaxsb
+  res_vsc = vec_vmaxsb(vsc, vbc);               // CHECK: @llvm.ppc.altivec.vmaxsb
   res_vuc = vec_vmaxub(vuc, vuc);               // CHECK: @llvm.ppc.altivec.vmaxub
+  res_vuc = vec_vmaxub(vbc, vuc);               // CHECK: @llvm.ppc.altivec.vmaxub
+  res_vuc = vec_vmaxub(vuc, vbc);               // CHECK: @llvm.ppc.altivec.vmaxub
   res_vs  = vec_vmaxsh(vs, vs);                 // CHECK: @llvm.ppc.altivec.vmaxsh
+  res_vs  = vec_vmaxsh(vbs, vs);                // CHECK: @llvm.ppc.altivec.vmaxsh
+  res_vs  = vec_vmaxsh(vs, vbs);                // CHECK: @llvm.ppc.altivec.vmaxsh
   res_vus = vec_vmaxuh(vus, vus);               // CHECK: @llvm.ppc.altivec.vmaxuh
+  res_vus = vec_vmaxuh(vbs, vus);               // CHECK: @llvm.ppc.altivec.vmaxuh
+  res_vus = vec_vmaxuh(vus, vbs);               // CHECK: @llvm.ppc.altivec.vmaxuh
   res_vi  = vec_vmaxsw(vi, vi);                 // CHECK: @llvm.ppc.altivec.vmaxsw
+  res_vi  = vec_vmaxsw(vbi, vi);                // CHECK: @llvm.ppc.altivec.vmaxsw
+  res_vi  = vec_vmaxsw(vi, vbi);                // CHECK: @llvm.ppc.altivec.vmaxsw
   res_vui = vec_vmaxuw(vui, vui);               // CHECK: @llvm.ppc.altivec.vmaxuw
+  res_vui = vec_vmaxuw(vbi, vui);               // CHECK: @llvm.ppc.altivec.vmaxuw
+  res_vui = vec_vmaxuw(vui, vbi);               // CHECK: @llvm.ppc.altivec.vmaxuw
   res_vf  = vec_vmaxfp(vf, vf);                 // CHECK: @llvm.ppc.altivec.vmaxfp
 
   /* vec_mergeh */
@@ -601,18 +641,42 @@
 
   /* vec_min */
   res_vsc = vec_min(vsc, vsc);                  // CHECK: @llvm.ppc.altivec.vminsb
+  res_vsc = vec_min(vbc, vsc);                  // CHECK: @llvm.ppc.altivec.vminsb
+  res_vsc = vec_min(vsc, vbc);                  // CHECK: @llvm.ppc.altivec.vminsb
   res_vuc = vec_min(vuc, vuc);                  // CHECK: @llvm.ppc.altivec.vminub
+  res_vuc = vec_min(vbc, vuc);                  // CHECK: @llvm.ppc.altivec.vminub
+  res_vuc = vec_min(vuc, vbc);                  // CHECK: @llvm.ppc.altivec.vminub
   res_vs  = vec_min(vs, vs);                    // CHECK: @llvm.ppc.altivec.vminsh
+  res_vs  = vec_min(vbs, vs);                   // CHECK: @llvm.ppc.altivec.vminsh
+  res_vs  = vec_min(vs, vbs);                   // CHECK: @llvm.ppc.altivec.vminsh
   res_vus = vec_min(vus, vus);                  // CHECK: @llvm.ppc.altivec.vminuh
+  res_vus = vec_min(vbs, vus);                  // CHECK: @llvm.ppc.altivec.vminuh
+  res_vus = vec_min(vus, vbs);                  // CHECK: @llvm.ppc.altivec.vminuh
   res_vi  = vec_min(vi, vi);                    // CHECK: @llvm.ppc.altivec.vminsw
+  res_vi  = vec_min(vbi, vi);                   // CHECK: @llvm.ppc.altivec.vminsw
+  res_vi  = vec_min(vi, vbi);                   // CHECK: @llvm.ppc.altivec.vminsw
   res_vui = vec_min(vui, vui);                  // CHECK: @llvm.ppc.altivec.vminuw
+  res_vui = vec_min(vbi, vui);                  // CHECK: @llvm.ppc.altivec.vminuw
+  res_vui = vec_min(vui, vbi);                  // CHECK: @llvm.ppc.altivec.vminuw
   res_vf  = vec_min(vf, vf);                    // CHECK: @llvm.ppc.altivec.vminfp
   res_vsc = vec_vminsb(vsc, vsc);               // CHECK: @llvm.ppc.altivec.vminsb
+  res_vsc = vec_vminsb(vbc, vsc);               // CHECK: @llvm.ppc.altivec.vminsb
+  res_vsc = vec_vminsb(vsc, vbc);               // CHECK: @llvm.ppc.altivec.vminsb
   res_vuc = vec_vminub(vuc, vuc);               // CHECK: @llvm.ppc.altivec.vminub
+  res_vuc = vec_vminub(vbc, vuc);               // CHECK: @llvm.ppc.altivec.vminub
+  res_vuc = vec_vminub(vuc, vbc);               // CHECK: @llvm.ppc.altivec.vminub
   res_vs  = vec_vminsh(vs, vs);                 // CHECK: @llvm.ppc.altivec.vminsh
+  res_vs  = vec_vminsh(vbs, vs);                // CHECK: @llvm.ppc.altivec.vminsh
+  res_vs  = vec_vminsh(vs, vbs);                // CHECK: @llvm.ppc.altivec.vminsh
   res_vus = vec_vminuh(vus, vus);               // CHECK: @llvm.ppc.altivec.vminuh
+  res_vus = vec_vminuh(vbs, vus);               // CHECK: @llvm.ppc.altivec.vminuh
+  res_vus = vec_vminuh(vus, vbs);               // CHECK: @llvm.ppc.altivec.vminuh
   res_vi  = vec_vminsw(vi, vi);                 // CHECK: @llvm.ppc.altivec.vminsw
+  res_vi  = vec_vminsw(vbi, vi);                // CHECK: @llvm.ppc.altivec.vminsw
+  res_vi  = vec_vminsw(vi, vbi);                // CHECK: @llvm.ppc.altivec.vminsw
   res_vui = vec_vminuw(vui, vui);               // CHECK: @llvm.ppc.altivec.vminuw
+  res_vui = vec_vminuw(vbi, vui);               // CHECK: @llvm.ppc.altivec.vminuw
+  res_vui = vec_vminuw(vui, vbi);               // CHECK: @llvm.ppc.altivec.vminuw
   res_vf  = vec_vminfp(vf, vf);                 // CHECK: @llvm.ppc.altivec.vminfp
 
   /* vec_mladd */
@@ -650,6 +714,15 @@
 
   /* vec_mtvscr */
   vec_mtvscr(vsc);                              // CHECK: @llvm.ppc.altivec.mtvscr
+  vec_mtvscr(vuc);                              // CHECK: @llvm.ppc.altivec.mtvscr
+  vec_mtvscr(vbc);                              // CHECK: @llvm.ppc.altivec.mtvscr
+  vec_mtvscr(vs);                               // CHECK: @llvm.ppc.altivec.mtvscr
+  vec_mtvscr(vus);                              // CHECK: @llvm.ppc.altivec.mtvscr
+  vec_mtvscr(vbs);                              // CHECK: @llvm.ppc.altivec.mtvscr
+  vec_mtvscr(vp);                               // CHECK: @llvm.ppc.altivec.mtvscr
+  vec_mtvscr(vi);                               // CHECK: @llvm.ppc.altivec.mtvscr
+  vec_mtvscr(vui);                              // CHECK: @llvm.ppc.altivec.mtvscr
+  vec_mtvscr(vbi);                              // CHECK: @llvm.ppc.altivec.mtvscr
 
   /* vec_mule */
   res_vs  = vec_mule(vsc, vsc);                 // CHECK: @llvm.ppc.altivec.vmulesb
@@ -682,18 +755,27 @@
   res_vuc = vec_nor(vuc, vuc);                  // CHECK: or <16 x i8>
                                                 // CHECK: xor <16 x i8>
 
+  res_vuc = vec_nor(vbc, vbc);                  // CHECK: or <16 x i8>
+                                                // CHECK: xor <16 x i8>
+
   res_vs  = vec_nor(vs, vs);                    // CHECK: or <8 x i16>
                                                 // CHECK: xor <8 x i16>
 
   res_vus = vec_nor(vus, vus);                  // CHECK: or <8 x i16>
                                                 // CHECK: xor <8 x i16>
 
+  res_vus = vec_nor(vbs, vbs);                  // CHECK: or <8 x i16>
+                                                // CHECK: xor <8 x i16>
+
   res_vi  = vec_nor(vi, vi);                    // CHECK: or <4 x i32>
                                                 // CHECK: xor <4 x i32>
 
   res_vui = vec_nor(vui, vui);                  // CHECK: or <4 x i32>
                                                 // CHECK: xor <4 x i32>
 
+  res_vui = vec_nor(vbi, vbi);                  // CHECK: or <4 x i32>
+                                                // CHECK: xor <4 x i32>
+
   res_vf  = vec_nor(vf, vf);                    // CHECK: or <4 x i32>
                                                 // CHECK: xor <4 x i32>
 
@@ -703,36 +785,79 @@
   res_vuc = vec_vnor(vuc, vuc);                 // CHECK: or <16 x i8>
                                                 // CHECK: xor <16 x i8>
 
+  res_vuc = vec_vnor(vbc, vbc);                 // CHECK: or <16 x i8>
+                                                // CHECK: xor <16 x i8>
+
   res_vs  = vec_vnor(vs, vs);                   // CHECK: or <8 x i16>
                                                 // CHECK: xor <8 x i16>
 
   res_vus = vec_vnor(vus, vus);                 // CHECK: or <8 x i16>
                                                 // CHECK: xor <8 x i16>
 
+  res_vus = vec_vnor(vbs, vbs);                 // CHECK: or <8 x i16>
+                                                // CHECK: xor <8 x i16>
+
   res_vi  = vec_vnor(vi, vi);                   // CHECK: or <4 x i32>
                                                 // CHECK: xor <4 x i32>
 
   res_vui = vec_vnor(vui, vui);                 // CHECK: or <4 x i32>
                                                 // CHECK: xor <4 x i32>
 
+  res_vui = vec_vnor(vbi, vbi);                 // CHECK: or <4 x i32>
+                                                // CHECK: xor <4 x i32>
+
   res_vf  = vec_vnor(vf, vf);                   // CHECK: or <4 x i32>
                                                 // CHECK: xor <4 x i32>
 
   /* vec_or */
   res_vsc = vec_or(vsc, vsc);                   // CHECK: or <16 x i8>
+  res_vsc = vec_or(vbc, vsc);                   // CHECK: or <16 x i8>
+  res_vsc = vec_or(vsc, vbc);                   // CHECK: or <16 x i8>
   res_vuc = vec_or(vuc, vuc);                   // CHECK: or <16 x i8>
+  res_vuc = vec_or(vbc, vuc);                   // CHECK: or <16 x i8>
+  res_vuc = vec_or(vuc, vbc);                   // CHECK: or <16 x i8>
+  res_vbc = vec_or(vbc, vbc);                   // CHECK: or <16 x i8>
   res_vs  = vec_or(vs, vs);                     // CHECK: or <8 x i16>
+  res_vs  = vec_or(vbs, vs);                    // CHECK: or <8 x i16>
+  res_vs  = vec_or(vs, vbs);                    // CHECK: or <8 x i16>
   res_vus = vec_or(vus, vus);                   // CHECK: or <8 x i16>
+  res_vus = vec_or(vbs, vus);                   // CHECK: or <8 x i16>
+  res_vus = vec_or(vus, vbs);                   // CHECK: or <8 x i16>
+  res_vbs = vec_or(vbs, vbs);                   // CHECK: or <8 x i16>
   res_vi  = vec_or(vi, vi);                     // CHECK: or <4 x i32>
+  res_vi  = vec_or(vbi, vi);                    // CHECK: or <4 x i32>
+  res_vi  = vec_or(vi, vbi);                    // CHECK: or <4 x i32>
   res_vui = vec_or(vui, vui);                   // CHECK: or <4 x i32>
+  res_vui = vec_or(vbi, vui);                   // CHECK: or <4 x i32>
+  res_vui = vec_or(vui, vbi);                   // CHECK: or <4 x i32>
+  res_vbi = vec_or(vbi, vbi);                   // CHECK: or <4 x i32>
   res_vf  = vec_or(vf, vf);                     // CHECK: or <4 x i32>
+  res_vf  = vec_or(vbi, vf);                    // CHECK: or <4 x i32>
+  res_vf  = vec_or(vf, vbi);                    // CHECK: or <4 x i32>
   res_vsc = vec_vor(vsc, vsc);                  // CHECK: or <16 x i8>
+  res_vsc = vec_vor(vbc, vsc);                  // CHECK: or <16 x i8>
+  res_vsc = vec_vor(vsc, vbc);                  // CHECK: or <16 x i8>
   res_vuc = vec_vor(vuc, vuc);                  // CHECK: or <16 x i8>
+  res_vuc = vec_vor(vbc, vuc);                  // CHECK: or <16 x i8>
+  res_vuc = vec_vor(vuc, vbc);                  // CHECK: or <16 x i8>
+  res_vbc = vec_vor(vbc, vbc);                  // CHECK: or <16 x i8>
   res_vs  = vec_vor(vs, vs);                    // CHECK: or <8 x i16>
+  res_vs  = vec_vor(vbs, vs);                   // CHECK: or <8 x i16>
+  res_vs  = vec_vor(vs, vbs);                   // CHECK: or <8 x i16>
   res_vus = vec_vor(vus, vus);                  // CHECK: or <8 x i16>
+  res_vus = vec_vor(vbs, vus);                  // CHECK: or <8 x i16>
+  res_vus = vec_vor(vus, vbs);                  // CHECK: or <8 x i16>
+  res_vbs = vec_vor(vbs, vbs);                  // CHECK: or <8 x i16>
   res_vi  = vec_vor(vi, vi);                    // CHECK: or <4 x i32>
+  res_vi  = vec_vor(vbi, vi);                   // CHECK: or <4 x i32>
+  res_vi  = vec_vor(vi, vbi);                   // CHECK: or <4 x i32>
   res_vui = vec_vor(vui, vui);                  // CHECK: or <4 x i32>
+  res_vui = vec_vor(vbi, vui);                  // CHECK: or <4 x i32>
+  res_vui = vec_vor(vui, vbi);                  // CHECK: or <4 x i32>
+  res_vbi = vec_vor(vbi, vbi);                  // CHECK: or <4 x i32>
   res_vf  = vec_vor(vf, vf);                    // CHECK: or <4 x i32>
+  res_vf  = vec_vor(vbi, vf);                   // CHECK: or <4 x i32>
+  res_vf  = vec_vor(vf, vbi);                   // CHECK: or <4 x i32>
 
   /* vec_pack */
   res_vsc = vec_pack(vs, vs);                   // CHECK: @llvm.ppc.altivec.vperm
@@ -828,77 +953,200 @@
                                                 // CHECK: and <16 x i8>
                                                 // CHECK: or <16 x i8>
 
+  res_vsc = vec_sel(vsc, vsc, vbc);             // CHECK: xor <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: or <16 x i8>
+
   res_vuc = vec_sel(vuc, vuc, vuc);             // CHECK: xor <16 x i8>
                                                 // CHECK: and <16 x i8>
                                                 // CHECK: and <16 x i8>
                                                 // CHECK: or <16 x i8>
 
+  res_vuc = vec_sel(vuc, vuc, vbc);             // CHECK: xor <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: or <16 x i8>
+
+  res_vbc = vec_sel(vbc, vbc, vuc);             // CHECK: xor <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: or <16 x i8>
+
+  res_vbc = vec_sel(vbc, vbc, vbc);             // CHECK: xor <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: or <16 x i8>
+
   res_vs  = vec_sel(vs, vs, vus);               // CHECK: xor <8 x i16>
                                                 // CHECK: and <8 x i16>
                                                 // CHECK: and <8 x i16>
                                                 // CHECK: or <8 x i16>
 
+  res_vs  = vec_sel(vs, vs, vbs);               // CHECK: xor <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: or <8 x i16>
 
   res_vus = vec_sel(vus, vus, vus);             // CHECK: xor <8 x i16>
                                                 // CHECK: and <8 x i16>
                                                 // CHECK: and <8 x i16>
                                                 // CHECK: or <8 x i16>
 
+  res_vus = vec_sel(vus, vus, vbs);             // CHECK: xor <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: or <8 x i16>
+
+  res_vbs = vec_sel(vbs, vbs, vus);             // CHECK: xor <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: or <8 x i16>
+
+  res_vbs = vec_sel(vbs, vbs, vbs);             // CHECK: xor <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: or <8 x i16>
+
   res_vi  = vec_sel(vi, vi, vui);               // CHECK: xor <4 x i32>
                                                 // CHECK: and <4 x i32>
                                                 // CHECK: and <4 x i32>
                                                 // CHECK: or <4 x i32>
 
+  res_vi  = vec_sel(vi, vi, vbi);               // CHECK: xor <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: or <4 x i32>
 
   res_vui = vec_sel(vui, vui, vui);             // CHECK: xor <4 x i32>
                                                 // CHECK: and <4 x i32>
                                                 // CHECK: and <4 x i32>
                                                 // CHECK: or <4 x i32>
 
+  res_vui = vec_sel(vui, vui, vbi);             // CHECK: xor <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: or <4 x i32>
+
+  res_vbi = vec_sel(vbi, vbi, vui);             // CHECK: xor <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: or <4 x i32>
+
+  res_vbi = vec_sel(vbi, vbi, vbi);             // CHECK: xor <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: or <4 x i32>
 
   res_vf  = vec_sel(vf, vf, vui);               // CHECK: xor <4 x i32>
                                                 // CHECK: and <4 x i32>
                                                 // CHECK: and <4 x i32>
                                                 // CHECK: or <4 x i32>
 
+  res_vf  = vec_sel(vf, vf, vbi);               // CHECK: xor <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: or <4 x i32>
+
   res_vsc = vec_vsel(vsc, vsc, vuc);            // CHECK: xor <16 x i8>
                                                 // CHECK: and <16 x i8>
                                                 // CHECK: and <16 x i8>
                                                 // CHECK: or <16 x i8>
 
+  res_vsc = vec_vsel(vsc, vsc, vbc);            // CHECK: xor <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: or <16 x i8>
+
   res_vuc = vec_vsel(vuc, vuc, vuc);            // CHECK: xor <16 x i8>
                                                 // CHECK: and <16 x i8>
                                                 // CHECK: and <16 x i8>
                                                 // CHECK: or <16 x i8>
 
+  res_vuc = vec_vsel(vuc, vuc, vbc);            // CHECK: xor <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: or <16 x i8>
+
+  res_vbc = vec_vsel(vbc, vbc, vuc);            // CHECK: xor <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: or <16 x i8>
+
+  res_vbc = vec_vsel(vbc, vbc, vbc);            // CHECK: xor <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: and <16 x i8>
+                                                // CHECK: or <16 x i8>
+
   res_vs  = vec_vsel(vs, vs, vus);              // CHECK: xor <8 x i16>
                                                 // CHECK: and <8 x i16>
                                                 // CHECK: and <8 x i16>
                                                 // CHECK: or <8 x i16>
 
+  res_vs  = vec_vsel(vs, vs, vbs);              // CHECK: xor <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: or <8 x i16>
 
   res_vus = vec_vsel(vus, vus, vus);            // CHECK: xor <8 x i16>
                                                 // CHECK: and <8 x i16>
                                                 // CHECK: and <8 x i16>
                                                 // CHECK: or <8 x i16>
 
+  res_vus = vec_vsel(vus, vus, vbs);            // CHECK: xor <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: or <8 x i16>
+
+  res_vbs = vec_vsel(vbs, vbs, vus);            // CHECK: xor <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: or <8 x i16>
+
+  res_vbs = vec_vsel(vbs, vbs, vbs);            // CHECK: xor <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: and <8 x i16>
+                                                // CHECK: or <8 x i16>
+
   res_vi  = vec_vsel(vi, vi, vui);              // CHECK: xor <4 x i32>
                                                 // CHECK: and <4 x i32>
                                                 // CHECK: and <4 x i32>
                                                 // CHECK: or <4 x i32>
 
+  res_vi  = vec_vsel(vi, vi, vbi);              // CHECK: xor <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: or <4 x i32>
 
   res_vui = vec_vsel(vui, vui, vui);            // CHECK: xor <4 x i32>
                                                 // CHECK: and <4 x i32>
                                                 // CHECK: and <4 x i32>
                                                 // CHECK: or <4 x i32>
 
+  res_vui = vec_vsel(vui, vui, vbi);            // CHECK: xor <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: or <4 x i32>
+
+  res_vbi = vec_vsel(vbi, vbi, vui);            // CHECK: xor <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: or <4 x i32>
+
+  res_vbi = vec_vsel(vbi, vbi, vbi);            // CHECK: xor <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: or <4 x i32>
 
   res_vf  = vec_vsel(vf, vf, vui);              // CHECK: xor <4 x i32>
                                                 // CHECK: and <4 x i32>
                                                 // CHECK: and <4 x i32>
                                                 // CHECK: or <4 x i32>
 
+  res_vf  = vec_vsel(vf, vf, vbi);              // CHECK: xor <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: and <4 x i32>
+                                                // CHECK: or <4 x i32>
 
   /* vec_sl */
   res_vsc = vec_sl(vsc, vuc);                   // CHECK: shl <16 x i8>
@@ -939,36 +1187,60 @@
   res_vuc = vec_sll(vuc, vuc);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vuc = vec_sll(vuc, vus);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vuc = vec_sll(vuc, vui);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbc = vec_sll(vbc, vuc);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbc = vec_sll(vbc, vus);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbc = vec_sll(vbc, vui);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vs  = vec_sll(vs, vuc);                   // CHECK: @llvm.ppc.altivec.vsl
   res_vs  = vec_sll(vs, vus);                   // CHECK: @llvm.ppc.altivec.vsl
   res_vs  = vec_sll(vs, vui);                   // CHECK: @llvm.ppc.altivec.vsl
   res_vus = vec_sll(vus, vuc);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vus = vec_sll(vus, vus);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vus = vec_sll(vus, vui);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbs = vec_sll(vbs, vuc);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbs = vec_sll(vbs, vus);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbs = vec_sll(vbs, vui);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vp  = vec_sll(vp, vuc);                   // CHECK: @llvm.ppc.altivec.vsl
+  res_vp  = vec_sll(vp, vus);                   // CHECK: @llvm.ppc.altivec.vsl
+  res_vp  = vec_sll(vp, vui);                   // CHECK: @llvm.ppc.altivec.vsl
   res_vi  = vec_sll(vi, vuc);                   // CHECK: @llvm.ppc.altivec.vsl
   res_vi  = vec_sll(vi, vus);                   // CHECK: @llvm.ppc.altivec.vsl
   res_vi  = vec_sll(vi, vui);                   // CHECK: @llvm.ppc.altivec.vsl
   res_vui = vec_sll(vui, vuc);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vui = vec_sll(vui, vus);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vui = vec_sll(vui, vui);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbi = vec_sll(vbi, vuc);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbi = vec_sll(vbi, vus);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbi = vec_sll(vbi, vui);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vsc = vec_vsl(vsc, vuc);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vsc = vec_vsl(vsc, vus);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vsc = vec_vsl(vsc, vui);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vuc = vec_vsl(vuc, vuc);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vuc = vec_vsl(vuc, vus);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vuc = vec_vsl(vuc, vui);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbc = vec_vsl(vbc, vuc);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbc = vec_vsl(vbc, vus);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbc = vec_vsl(vbc, vui);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vs  = vec_vsl(vs, vuc);                   // CHECK: @llvm.ppc.altivec.vsl
   res_vs  = vec_vsl(vs, vus);                   // CHECK: @llvm.ppc.altivec.vsl
   res_vs  = vec_vsl(vs, vui);                   // CHECK: @llvm.ppc.altivec.vsl
   res_vus = vec_vsl(vus, vuc);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vus = vec_vsl(vus, vus);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vus = vec_vsl(vus, vui);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbs = vec_vsl(vbs, vuc);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbs = vec_vsl(vbs, vus);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbs = vec_vsl(vbs, vui);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vp  = vec_vsl(vp, vuc);                   // CHECK: @llvm.ppc.altivec.vsl
+  res_vp  = vec_vsl(vp, vus);                   // CHECK: @llvm.ppc.altivec.vsl
+  res_vp  = vec_vsl(vp, vui);                   // CHECK: @llvm.ppc.altivec.vsl
   res_vi  = vec_vsl(vi, vuc);                   // CHECK: @llvm.ppc.altivec.vsl
   res_vi  = vec_vsl(vi, vus);                   // CHECK: @llvm.ppc.altivec.vsl
   res_vi  = vec_vsl(vi, vui);                   // CHECK: @llvm.ppc.altivec.vsl
   res_vui = vec_vsl(vui, vuc);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vui = vec_vsl(vui, vus);                  // CHECK: @llvm.ppc.altivec.vsl
   res_vui = vec_vsl(vui, vui);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbi = vec_vsl(vbi, vuc);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbi = vec_vsl(vbi, vus);                  // CHECK: @llvm.ppc.altivec.vsl
+  res_vbi = vec_vsl(vbi, vui);                  // CHECK: @llvm.ppc.altivec.vsl
 
   /* vec_slo */
   res_vsc = vec_slo(vsc, vsc);                  // CHECK: @llvm.ppc.altivec.vslo
@@ -979,6 +1251,8 @@
   res_vs  = vec_slo(vs, vuc);                   // CHECK: @llvm.ppc.altivec.vslo
   res_vus = vec_slo(vus, vsc);                  // CHECK: @llvm.ppc.altivec.vslo
   res_vus = vec_slo(vus, vuc);                  // CHECK: @llvm.ppc.altivec.vslo
+  res_vp  = vec_slo(vp, vsc);                   // CHECK: @llvm.ppc.altivec.vslo
+  res_vp  = vec_slo(vp, vuc);                   // CHECK: @llvm.ppc.altivec.vslo
   res_vi  = vec_slo(vi, vsc);                   // CHECK: @llvm.ppc.altivec.vslo
   res_vi  = vec_slo(vi, vuc);                   // CHECK: @llvm.ppc.altivec.vslo
   res_vui = vec_slo(vui, vsc);                  // CHECK: @llvm.ppc.altivec.vslo
@@ -993,6 +1267,8 @@
   res_vs  = vec_vslo(vs, vuc);                  // CHECK: @llvm.ppc.altivec.vslo
   res_vus = vec_vslo(vus, vsc);                 // CHECK: @llvm.ppc.altivec.vslo
   res_vus = vec_vslo(vus, vuc);                 // CHECK: @llvm.ppc.altivec.vslo
+  res_vp  = vec_vslo(vp, vsc);                  // CHECK: @llvm.ppc.altivec.vslo
+  res_vp  = vec_vslo(vp, vuc);                  // CHECK: @llvm.ppc.altivec.vslo
   res_vi  = vec_vslo(vi, vsc);                  // CHECK: @llvm.ppc.altivec.vslo
   res_vi  = vec_vslo(vi, vuc);                  // CHECK: @llvm.ppc.altivec.vslo
   res_vui = vec_vslo(vui, vsc);                 // CHECK: @llvm.ppc.altivec.vslo
@@ -1080,36 +1356,60 @@
   res_vuc = vec_srl(vuc, vuc);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vuc = vec_srl(vuc, vus);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vuc = vec_srl(vuc, vui);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbc = vec_srl(vbc, vuc);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbc = vec_srl(vbc, vus);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbc = vec_srl(vbc, vui);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vs  = vec_srl(vs, vuc);                   // CHECK: @llvm.ppc.altivec.vsr
   res_vs  = vec_srl(vs, vus);                   // CHECK: @llvm.ppc.altivec.vsr
   res_vs  = vec_srl(vs, vui);                   // CHECK: @llvm.ppc.altivec.vsr
   res_vus = vec_srl(vus, vuc);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vus = vec_srl(vus, vus);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vus = vec_srl(vus, vui);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbs = vec_srl(vbs, vuc);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbs = vec_srl(vbs, vus);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbs = vec_srl(vbs, vui);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vp  = vec_srl(vp, vuc);                   // CHECK: @llvm.ppc.altivec.vsr
+  res_vp  = vec_srl(vp, vus);                   // CHECK: @llvm.ppc.altivec.vsr
+  res_vp  = vec_srl(vp, vui);                   // CHECK: @llvm.ppc.altivec.vsr
   res_vi  = vec_srl(vi, vuc);                   // CHECK: @llvm.ppc.altivec.vsr
   res_vi  = vec_srl(vi, vus);                   // CHECK: @llvm.ppc.altivec.vsr
   res_vi  = vec_srl(vi, vui);                   // CHECK: @llvm.ppc.altivec.vsr
   res_vui = vec_srl(vui, vuc);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vui = vec_srl(vui, vus);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vui = vec_srl(vui, vui);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbi = vec_srl(vbi, vuc);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbi = vec_srl(vbi, vus);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbi = vec_srl(vbi, vui);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vsc = vec_vsr(vsc, vuc);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vsc = vec_vsr(vsc, vus);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vsc = vec_vsr(vsc, vui);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vuc = vec_vsr(vuc, vuc);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vuc = vec_vsr(vuc, vus);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vuc = vec_vsr(vuc, vui);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbc = vec_vsr(vbc, vuc);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbc = vec_vsr(vbc, vus);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbc = vec_vsr(vbc, vui);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vs  = vec_vsr(vs, vuc);                   // CHECK: @llvm.ppc.altivec.vsr
   res_vs  = vec_vsr(vs, vus);                   // CHECK: @llvm.ppc.altivec.vsr
   res_vs  = vec_vsr(vs, vui);                   // CHECK: @llvm.ppc.altivec.vsr
   res_vus = vec_vsr(vus, vuc);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vus = vec_vsr(vus, vus);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vus = vec_vsr(vus, vui);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbs = vec_vsr(vbs, vuc);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbs = vec_vsr(vbs, vus);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbs = vec_vsr(vbs, vui);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vp  = vec_vsr(vp, vuc);                   // CHECK: @llvm.ppc.altivec.vsr
+  res_vp  = vec_vsr(vp, vus);                   // CHECK: @llvm.ppc.altivec.vsr
+  res_vp  = vec_vsr(vp, vui);                   // CHECK: @llvm.ppc.altivec.vsr
   res_vi  = vec_vsr(vi, vuc);                   // CHECK: @llvm.ppc.altivec.vsr
   res_vi  = vec_vsr(vi, vus);                   // CHECK: @llvm.ppc.altivec.vsr
   res_vi  = vec_vsr(vi, vui);                   // CHECK: @llvm.ppc.altivec.vsr
   res_vui = vec_vsr(vui, vuc);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vui = vec_vsr(vui, vus);                  // CHECK: @llvm.ppc.altivec.vsr
   res_vui = vec_vsr(vui, vui);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbi = vec_vsr(vbi, vuc);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbi = vec_vsr(vbi, vus);                  // CHECK: @llvm.ppc.altivec.vsr
+  res_vbi = vec_vsr(vbi, vui);                  // CHECK: @llvm.ppc.altivec.vsr
 
   /* vec_sro */
   res_vsc = vec_sro(vsc, vsc);                  // CHECK: @llvm.ppc.altivec.vsro
@@ -1120,6 +1420,8 @@
   res_vs  = vec_sro(vs, vuc);                   // CHECK: @llvm.ppc.altivec.vsro
   res_vus = vec_sro(vus, vsc);                  // CHECK: @llvm.ppc.altivec.vsro
   res_vus = vec_sro(vus, vuc);                  // CHECK: @llvm.ppc.altivec.vsro
+  res_vp  = vec_sro(vp, vsc);                   // CHECK: @llvm.ppc.altivec.vsro
+  res_vp  = vec_sro(vp, vuc);                   // CHECK: @llvm.ppc.altivec.vsro
   res_vi  = vec_sro(vi, vsc);                   // CHECK: @llvm.ppc.altivec.vsro
   res_vi  = vec_sro(vi, vuc);                   // CHECK: @llvm.ppc.altivec.vsro
   res_vui = vec_sro(vui, vsc);                  // CHECK: @llvm.ppc.altivec.vsro
@@ -1134,6 +1436,8 @@
   res_vs  = vec_vsro(vs, vuc);                  // CHECK: @llvm.ppc.altivec.vsro
   res_vus = vec_vsro(vus, vsc);                 // CHECK: @llvm.ppc.altivec.vsro
   res_vus = vec_vsro(vus, vuc);                 // CHECK: @llvm.ppc.altivec.vsro
+  res_vp  = vec_vsro(vp, vsc);                  // CHECK: @llvm.ppc.altivec.vsro
+  res_vp  = vec_vsro(vp, vuc);                  // CHECK: @llvm.ppc.altivec.vsro
   res_vi  = vec_vsro(vi, vsc);                  // CHECK: @llvm.ppc.altivec.vsro
   res_vi  = vec_vsro(vi, vuc);                  // CHECK: @llvm.ppc.altivec.vsro
   res_vui = vec_vsro(vui, vsc);                 // CHECK: @llvm.ppc.altivec.vsro
@@ -1146,45 +1450,85 @@
   vec_st(vsc, 0, &param_sc);                   // CHECK: @llvm.ppc.altivec.stvx
   vec_st(vuc, 0, &vuc);                        // CHECK: @llvm.ppc.altivec.stvx
   vec_st(vuc, 0, &param_uc);                   // CHECK: @llvm.ppc.altivec.stvx
+  vec_st(vbc, 0, &param_uc);                   // CHECK: @llvm.ppc.altivec.stvx
+  vec_st(vbc, 0, &param_uc);                   // CHECK: @llvm.ppc.altivec.stvx
+  vec_st(vbc, 0, &vbc);                        // CHECK: @llvm.ppc.altivec.stvx
   vec_st(vs, 0, &vs);                          // CHECK: @llvm.ppc.altivec.stvx
   vec_st(vs, 0, &param_s);                     // CHECK: @llvm.ppc.altivec.stvx
   vec_st(vus, 0, &vus);                        // CHECK: @llvm.ppc.altivec.stvx
   vec_st(vus, 0, &param_us);                   // CHECK: @llvm.ppc.altivec.stvx
+  vec_st(vbs, 0, &param_s);                    // CHECK: @llvm.ppc.altivec.stvx
+  vec_st(vbs, 0, &param_us);                   // CHECK: @llvm.ppc.altivec.stvx
+  vec_st(vbs, 0, &vbs);                        // CHECK: @llvm.ppc.altivec.stvx
+  vec_st(vp, 0, &param_s);                     // CHECK: @llvm.ppc.altivec.stvx
+  vec_st(vp, 0, &param_us);                    // CHECK: @llvm.ppc.altivec.stvx
+  vec_st(vp, 0, &vp);                          // CHECK: @llvm.ppc.altivec.stvx
   vec_st(vi, 0, &vi);                          // CHECK: @llvm.ppc.altivec.stvx
   vec_st(vi, 0, &param_i);                     // CHECK: @llvm.ppc.altivec.stvx
   vec_st(vui, 0, &vui);                        // CHECK: @llvm.ppc.altivec.stvx
   vec_st(vui, 0, &param_ui);                   // CHECK: @llvm.ppc.altivec.stvx
+  vec_st(vbi, 0, &param_i);                    // CHECK: @llvm.ppc.altivec.stvx
+  vec_st(vbi, 0, &param_ui);                   // CHECK: @llvm.ppc.altivec.stvx
+  vec_st(vbi, 0, &vbi);                        // CHECK: @llvm.ppc.altivec.stvx
   vec_st(vf, 0, &vf);                          // CHECK: @llvm.ppc.altivec.stvx
   vec_st(vf, 0, &param_f);                     // CHECK: @llvm.ppc.altivec.stvx
   vec_stvx(vsc, 0, &vsc);                      // CHECK: @llvm.ppc.altivec.stvx
   vec_stvx(vsc, 0, &param_sc);                 // CHECK: @llvm.ppc.altivec.stvx
   vec_stvx(vuc, 0, &vuc);                      // CHECK: @llvm.ppc.altivec.stvx
   vec_stvx(vuc, 0, &param_uc);                 // CHECK: @llvm.ppc.altivec.stvx
+  vec_stvx(vbc, 0, &param_uc);                 // CHECK: @llvm.ppc.altivec.stvx
+  vec_stvx(vbc, 0, &param_uc);                 // CHECK: @llvm.ppc.altivec.stvx
+  vec_stvx(vbc, 0, &vbc);                      // CHECK: @llvm.ppc.altivec.stvx
   vec_stvx(vs, 0, &vs);                        // CHECK: @llvm.ppc.altivec.stvx
   vec_stvx(vs, 0, &param_s);                   // CHECK: @llvm.ppc.altivec.stvx
   vec_stvx(vus, 0, &vus);                      // CHECK: @llvm.ppc.altivec.stvx
   vec_stvx(vus, 0, &param_us);                 // CHECK: @llvm.ppc.altivec.stvx
+  vec_stvx(vbs, 0, &param_s);                  // CHECK: @llvm.ppc.altivec.stvx
+  vec_stvx(vbs, 0, &param_us);                 // CHECK: @llvm.ppc.altivec.stvx
+  vec_stvx(vbs, 0, &vbs);                      // CHECK: @llvm.ppc.altivec.stvx
+  vec_stvx(vp, 0, &param_s);                   // CHECK: @llvm.ppc.altivec.stvx
+  vec_stvx(vp, 0, &param_us);                  // CHECK: @llvm.ppc.altivec.stvx
+  vec_stvx(vp, 0, &vp);                        // CHECK: @llvm.ppc.altivec.stvx
   vec_stvx(vi, 0, &vi);                        // CHECK: @llvm.ppc.altivec.stvx
   vec_stvx(vi, 0, &param_i);                   // CHECK: @llvm.ppc.altivec.stvx
   vec_stvx(vui, 0, &vui);                      // CHECK: @llvm.ppc.altivec.stvx
   vec_stvx(vui, 0, &param_ui);                 // CHECK: @llvm.ppc.altivec.stvx
+  vec_stvx(vbi, 0, &param_i);                  // CHECK: @llvm.ppc.altivec.stvx
+  vec_stvx(vbi, 0, &param_ui);                 // CHECK: @llvm.ppc.altivec.stvx
+  vec_stvx(vbi, 0, &vbi);                      // CHECK: @llvm.ppc.altivec.stvx
   vec_stvx(vf, 0, &vf);                        // CHECK: @llvm.ppc.altivec.stvx
   vec_stvx(vf, 0, &param_f);                   // CHECK: @llvm.ppc.altivec.stvx
 
   /* vec_ste */
   vec_ste(vsc, 0, &param_sc);                  // CHECK: @llvm.ppc.altivec.stvebx
   vec_ste(vuc, 0, &param_uc);                  // CHECK: @llvm.ppc.altivec.stvebx
+  vec_ste(vbc, 0, &param_sc);                  // CHECK: @llvm.ppc.altivec.stvebx
+  vec_ste(vbc, 0, &param_uc);                  // CHECK: @llvm.ppc.altivec.stvebx
   vec_ste(vs, 0, &param_s);                    // CHECK: @llvm.ppc.altivec.stvehx
   vec_ste(vus, 0, &param_us);                  // CHECK: @llvm.ppc.altivec.stvehx
+  vec_ste(vbs, 0, &param_s);                   // CHECK: @llvm.ppc.altivec.stvehx
+  vec_ste(vbs, 0, &param_us);                  // CHECK: @llvm.ppc.altivec.stvehx
+  vec_ste(vp, 0, &param_s);                    // CHECK: @llvm.ppc.altivec.stvehx
+  vec_ste(vp, 0, &param_us);                   // CHECK: @llvm.ppc.altivec.stvehx
   vec_ste(vi, 0, &param_i);                    // CHECK: @llvm.ppc.altivec.stvewx
   vec_ste(vui, 0, &param_ui);                  // CHECK: @llvm.ppc.altivec.stvewx
+  vec_ste(vbi, 0, &param_i);                   // CHECK: @llvm.ppc.altivec.stvewx
+  vec_ste(vbi, 0, &param_ui);                  // CHECK: @llvm.ppc.altivec.stvewx
   vec_ste(vf, 0, &param_f);                    // CHECK: @llvm.ppc.altivec.stvewx
   vec_stvebx(vsc, 0, &param_sc);               // CHECK: @llvm.ppc.altivec.stvebx
   vec_stvebx(vuc, 0, &param_uc);               // CHECK: @llvm.ppc.altivec.stvebx
+  vec_stvebx(vbc, 0, &param_sc);               // CHECK: @llvm.ppc.altivec.stvebx
+  vec_stvebx(vbc, 0, &param_uc);               // CHECK: @llvm.ppc.altivec.stvebx
   vec_stvehx(vs, 0, &param_s);                 // CHECK: @llvm.ppc.altivec.stvehx
   vec_stvehx(vus, 0, &param_us);               // CHECK: @llvm.ppc.altivec.stvehx
+  vec_stvehx(vbs, 0, &param_s);                // CHECK: @llvm.ppc.altivec.stvehx
+  vec_stvehx(vbs, 0, &param_us);               // CHECK: @llvm.ppc.altivec.stvehx
+  vec_stvehx(vp, 0, &param_s);                 // CHECK: @llvm.ppc.altivec.stvehx
+  vec_stvehx(vp, 0, &param_us);                // CHECK: @llvm.ppc.altivec.stvehx
   vec_stvewx(vi, 0, &param_i);                 // CHECK: @llvm.ppc.altivec.stvewx
   vec_stvewx(vui, 0, &param_ui);               // CHECK: @llvm.ppc.altivec.stvewx
+  vec_stvewx(vbi, 0, &param_i);                // CHECK: @llvm.ppc.altivec.stvewx
+  vec_stvewx(vbi, 0, &param_ui);               // CHECK: @llvm.ppc.altivec.stvewx
   vec_stvewx(vf, 0, &param_f);                 // CHECK: @llvm.ppc.altivec.stvewx
 
   /* vec_stl */
@@ -1192,45 +1536,93 @@
   vec_stl(vsc, 0, &param_sc);                   // CHECK: @llvm.ppc.altivec.stvxl
   vec_stl(vuc, 0, &vuc);                        // CHECK: @llvm.ppc.altivec.stvxl
   vec_stl(vuc, 0, &param_uc);                   // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stl(vbc, 0, &param_sc);                   // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stl(vbc, 0, &param_uc);                   // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stl(vbc, 0, &vbc);                        // CHECK: @llvm.ppc.altivec.stvxl
   vec_stl(vs, 0, &vs);                          // CHECK: @llvm.ppc.altivec.stvxl
   vec_stl(vs, 0, &param_s);                     // CHECK: @llvm.ppc.altivec.stvxl
   vec_stl(vus, 0, &vus);                        // CHECK: @llvm.ppc.altivec.stvxl
   vec_stl(vus, 0, &param_us);                   // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stl(vbs, 0, &param_s);                    // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stl(vbs, 0, &param_us);                   // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stl(vbs, 0, &vbs);                        // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stl(vp, 0, &param_s);                     // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stl(vp, 0, &param_us);                    // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stl(vp, 0, &vp);                          // CHECK: @llvm.ppc.altivec.stvxl
   vec_stl(vi, 0, &vi);                          // CHECK: @llvm.ppc.altivec.stvxl
   vec_stl(vi, 0, &param_i);                     // CHECK: @llvm.ppc.altivec.stvxl
   vec_stl(vui, 0, &vui);                        // CHECK: @llvm.ppc.altivec.stvxl
   vec_stl(vui, 0, &param_ui);                   // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stl(vbi, 0, &param_i);                    // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stl(vbi, 0, &param_ui);                   // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stl(vbi, 0, &vbi);                        // CHECK: @llvm.ppc.altivec.stvxl
   vec_stl(vf, 0, &vf);                          // CHECK: @llvm.ppc.altivec.stvxl
   vec_stl(vf, 0, &param_f);                     // CHECK: @llvm.ppc.altivec.stvxl
   vec_stvxl(vsc, 0, &vsc);                      // CHECK: @llvm.ppc.altivec.stvxl
   vec_stvxl(vsc, 0, &param_sc);                 // CHECK: @llvm.ppc.altivec.stvxl
   vec_stvxl(vuc, 0, &vuc);                      // CHECK: @llvm.ppc.altivec.stvxl
   vec_stvxl(vuc, 0, &param_uc);                 // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stvxl(vbc, 0, &param_sc);                 // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stvxl(vbc, 0, &param_uc);                 // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stvxl(vbc, 0, &vbc);                      // CHECK: @llvm.ppc.altivec.stvxl
   vec_stvxl(vs, 0, &vs);                        // CHECK: @llvm.ppc.altivec.stvxl
   vec_stvxl(vs, 0, &param_s);                   // CHECK: @llvm.ppc.altivec.stvxl
   vec_stvxl(vus, 0, &vus);                      // CHECK: @llvm.ppc.altivec.stvxl
   vec_stvxl(vus, 0, &param_us);                 // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stvxl(vbs, 0, &param_s);                  // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stvxl(vbs, 0, &param_us);                 // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stvxl(vbs, 0, &vbs);                      // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stvxl(vp, 0, &param_s);                  // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stvxl(vp, 0, &param_us);                 // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stvxl(vp, 0, &vp);                      // CHECK: @llvm.ppc.altivec.stvxl
   vec_stvxl(vi, 0, &vi);                        // CHECK: @llvm.ppc.altivec.stvxl
   vec_stvxl(vi, 0, &param_i);                   // CHECK: @llvm.ppc.altivec.stvxl
   vec_stvxl(vui, 0, &vui);                      // CHECK: @llvm.ppc.altivec.stvxl
   vec_stvxl(vui, 0, &param_ui);                 // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stvxl(vbi, 0, &param_i);                  // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stvxl(vbi, 0, &param_ui);                 // CHECK: @llvm.ppc.altivec.stvxl
+  vec_stvxl(vbi, 0, &vbi);                      // CHECK: @llvm.ppc.altivec.stvxl
   vec_stvxl(vf, 0, &vf);                        // CHECK: @llvm.ppc.altivec.stvxl
   vec_stvxl(vf, 0, &param_f);                   // CHECK: @llvm.ppc.altivec.stvxl
 
   /* vec_sub */
   res_vsc = vec_sub(vsc, vsc);                  // CHECK: sub nsw <16 x i8>
+  res_vsc = vec_sub(vbc, vsc);                  // CHECK: sub nsw <16 x i8>
+  res_vsc = vec_sub(vsc, vbc);                  // CHECK: sub nsw <16 x i8>
   res_vuc = vec_sub(vuc, vuc);                  // CHECK: sub <16 x i8>
+  res_vuc = vec_sub(vbc, vuc);                  // CHECK: sub <16 x i8>
+  res_vuc = vec_sub(vuc, vbc);                  // CHECK: sub <16 x i8>
   res_vs  = vec_sub(vs, vs);                    // CHECK: sub nsw <8 x i16>
+  res_vs  = vec_sub(vbs, vs);                   // CHECK: sub nsw <8 x i16>
+  res_vs  = vec_sub(vs, vbs);                   // CHECK: sub nsw <8 x i16>
   res_vus = vec_sub(vus, vus);                  // CHECK: sub <8 x i16>
+  res_vus = vec_sub(vbs, vus);                  // CHECK: sub <8 x i16>
+  res_vus = vec_sub(vus, vbs);                  // CHECK: sub <8 x i16>
   res_vi  = vec_sub(vi, vi);                    // CHECK: sub nsw <4 x i32>
+  res_vi  = vec_sub(vbi, vi);                   // CHECK: sub nsw <4 x i32>
+  res_vi  = vec_sub(vi, vbi);                   // CHECK: sub nsw <4 x i32>
   res_vui = vec_sub(vui, vui);                  // CHECK: sub <4 x i32>
+  res_vui = vec_sub(vbi, vui);                  // CHECK: sub <4 x i32>
+  res_vui = vec_sub(vui, vbi);                  // CHECK: sub <4 x i32>
   res_vf  = vec_sub(vf, vf);                    // CHECK: fsub <4 x float>
   res_vsc = vec_vsububm(vsc, vsc);              // CHECK: sub nsw <16 x i8>
+  res_vsc = vec_vsububm(vbc, vsc);              // CHECK: sub nsw <16 x i8>
+  res_vsc = vec_vsububm(vsc, vbc);              // CHECK: sub nsw <16 x i8>
   res_vuc = vec_vsububm(vuc, vuc);              // CHECK: sub <16 x i8>
+  res_vuc = vec_vsububm(vbc, vuc);              // CHECK: sub <16 x i8>
+  res_vuc = vec_vsububm(vuc, vbc);              // CHECK: sub <16 x i8>
   res_vs  = vec_vsubuhm(vs, vs);                // CHECK: sub nsw <8 x i16>
+  res_vs  = vec_vsubuhm(vbs, vus);              // CHECK: sub <8 x i16>
+  res_vs  = vec_vsubuhm(vus, vbs);              // CHECK: sub <8 x i16>
   res_vus = vec_vsubuhm(vus, vus);              // CHECK: sub <8 x i16>
+  res_vus = vec_vsubuhm(vbs, vus);              // CHECK: sub <8 x i16>
+  res_vus = vec_vsubuhm(vus, vbs);              // CHECK: sub <8 x i16>
   res_vi  = vec_vsubuwm(vi, vi);                // CHECK: sub nsw <4 x i32>
+  res_vi  = vec_vsubuwm(vbi, vi);               // CHECK: sub nsw <4 x i32>
+  res_vi  = vec_vsubuwm(vi, vbi);               // CHECK: sub nsw <4 x i32>
   res_vui = vec_vsubuwm(vui, vui);              // CHECK: sub <4 x i32>
+  res_vui = vec_vsubuwm(vbi, vui);              // CHECK: sub <4 x i32>
+  res_vui = vec_vsubuwm(vui, vbi);              // CHECK: sub <4 x i32>
   res_vf  = vec_vsubfp(vf, vf);                 // CHECK: fsub <4 x float>
 
   /* vec_subc */
@@ -1239,17 +1631,41 @@
 
   /* vec_subs */
   res_vsc = vec_subs(vsc, vsc);                 // CHECK: @llvm.ppc.altivec.vsubsbs
+  res_vsc = vec_subs(vbc, vsc);                 // CHECK: @llvm.ppc.altivec.vsubsbs
+  res_vsc = vec_subs(vsc, vbc);                 // CHECK: @llvm.ppc.altivec.vsubsbs
   res_vuc = vec_subs(vuc, vuc);                 // CHECK: @llvm.ppc.altivec.vsububs
+  res_vuc = vec_subs(vbc, vuc);                 // CHECK: @llvm.ppc.altivec.vsububs
+  res_vuc = vec_subs(vuc, vbc);                 // CHECK: @llvm.ppc.altivec.vsububs
   res_vs  = vec_subs(vs, vs);                   // CHECK: @llvm.ppc.altivec.vsubshs
+  res_vs  = vec_subs(vbs, vs);                  // CHECK: @llvm.ppc.altivec.vsubshs
+  res_vs  = vec_subs(vs, vbs);                  // CHECK: @llvm.ppc.altivec.vsubshs
   res_vus = vec_subs(vus, vus);                 // CHECK: @llvm.ppc.altivec.vsubuhs
+  res_vus = vec_subs(vbs, vus);                 // CHECK: @llvm.ppc.altivec.vsubuhs
+  res_vus = vec_subs(vus, vbs);                 // CHECK: @llvm.ppc.altivec.vsubuhs
   res_vi  = vec_subs(vi, vi);                   // CHECK: @llvm.ppc.altivec.vsubsws
+  res_vi  = vec_subs(vbi, vi);                  // CHECK: @llvm.ppc.altivec.vsubsws
+  res_vi  = vec_subs(vi, vbi);                  // CHECK: @llvm.ppc.altivec.vsubsws
   res_vui = vec_subs(vui, vui);                 // CHECK: @llvm.ppc.altivec.vsubuws
+  res_vui = vec_subs(vbi, vui);                 // CHECK: @llvm.ppc.altivec.vsubuws
+  res_vui = vec_subs(vui, vbi);                 // CHECK: @llvm.ppc.altivec.vsubuws
   res_vsc = vec_vsubsbs(vsc, vsc);              // CHECK: @llvm.ppc.altivec.vsubsbs
+  res_vsc = vec_vsubsbs(vbc, vsc);              // CHECK: @llvm.ppc.altivec.vsubsbs
+  res_vsc = vec_vsubsbs(vsc, vbc);              // CHECK: @llvm.ppc.altivec.vsubsbs
   res_vuc = vec_vsububs(vuc, vuc);              // CHECK: @llvm.ppc.altivec.vsububs
+  res_vuc = vec_vsububs(vbc, vuc);              // CHECK: @llvm.ppc.altivec.vsububs
+  res_vuc = vec_vsububs(vuc, vbc);              // CHECK: @llvm.ppc.altivec.vsububs
   res_vs  = vec_vsubshs(vs, vs);                // CHECK: @llvm.ppc.altivec.vsubshs
+  res_vs  = vec_vsubshs(vbs, vs);               // CHECK: @llvm.ppc.altivec.vsubshs
+  res_vs  = vec_vsubshs(vs, vbs);               // CHECK: @llvm.ppc.altivec.vsubshs
   res_vus = vec_vsubuhs(vus, vus);              // CHECK: @llvm.ppc.altivec.vsubuhs
+  res_vus = vec_vsubuhs(vbs, vus);              // CHECK: @llvm.ppc.altivec.vsubuhs
+  res_vus = vec_vsubuhs(vus, vbs);              // CHECK: @llvm.ppc.altivec.vsubuhs
   res_vi  = vec_vsubsws(vi, vi);                // CHECK: @llvm.ppc.altivec.vsubsws
+  res_vi  = vec_vsubsws(vbi, vi);               // CHECK: @llvm.ppc.altivec.vsubsws
+  res_vi  = vec_vsubsws(vi, vbi);               // CHECK: @llvm.ppc.altivec.vsubsws
   res_vui = vec_vsubuws(vui, vui);              // CHECK: @llvm.ppc.altivec.vsubuws
+  res_vui = vec_vsubuws(vbi, vui);              // CHECK: @llvm.ppc.altivec.vsubuws
+  res_vui = vec_vsubuws(vui, vbi);              // CHECK: @llvm.ppc.altivec.vsubuws
 
   /* vec_sum4s */
   res_vi  = vec_sum4s(vsc, vi);                 // CHECK: @llvm.ppc.altivec.vsum4sbs
@@ -1272,32 +1688,78 @@
   res_vf = vec_vrfiz(vf);                       // CHECK: @llvm.ppc.altivec.vrfiz
 
   /* vec_unpackh */
-  res_vs = vec_unpackh(vsc);                    // CHECK: @llvm.ppc.altivec.vupkhsb
-  res_vi = vec_unpackh(vs);                     // CHECK: @llvm.ppc.altivec.vupkhsh
-  res_vs = vec_vupkhsb(vsc);                    // CHECK: @llvm.ppc.altivec.vupkhsb
-  res_vi = vec_vupkhsh(vs);                     // CHECK: @llvm.ppc.altivec.vupkhsh
+  res_vs  = vec_unpackh(vsc);                   // CHECK: @llvm.ppc.altivec.vupkhsb
+  res_vbs = vec_unpackh(vbc);                   // CHECK: @llvm.ppc.altivec.vupkhsb
+  res_vi  = vec_unpackh(vs);                    // CHECK: @llvm.ppc.altivec.vupkhsh
+  res_vbi = vec_unpackh(vbs);                   // CHECK: @llvm.ppc.altivec.vupkhsh
+  res_vui = vec_unpackh(vp);                    // CHECK: @llvm.ppc.altivec.vupkhsh
+  res_vs  = vec_vupkhsb(vsc);                   // CHECK: @llvm.ppc.altivec.vupkhsb
+  res_vbs = vec_vupkhsb(vbc);                   // CHECK: @llvm.ppc.altivec.vupkhsb
+  res_vi  = vec_vupkhsh(vs);                    // CHECK: @llvm.ppc.altivec.vupkhsh
+  res_vbi = vec_vupkhsh(vbs);                   // CHECK: @llvm.ppc.altivec.vupkhsh
+  res_vui = vec_vupkhsh(vp);                    // CHECK: @llvm.ppc.altivec.vupkhsh
 
   /* vec_unpackl */
-  res_vs = vec_unpackl(vsc);                    // CHECK: @llvm.ppc.altivec.vupklsb
-  res_vi = vec_vupklsh(vs);                     // CHECK: @llvm.ppc.altivec.vupklsh
-  res_vs = vec_vupklsb(vsc);                    // CHECK: @llvm.ppc.altivec.vupklsb
-  res_vi = vec_vupklsh(vs);                     // CHECK: @llvm.ppc.altivec.vupklsh
+  res_vs  = vec_unpackl(vsc);                   // CHECK: @llvm.ppc.altivec.vupklsb
+  res_vbs = vec_unpackl(vbc);                   // CHECK: @llvm.ppc.altivec.vupklsb
+  res_vi  = vec_unpackl(vs);                    // CHECK: @llvm.ppc.altivec.vupklsh
+  res_vbi = vec_unpackl(vbs);                   // CHECK: @llvm.ppc.altivec.vupklsh
+  res_vui = vec_unpackl(vp);                    // CHECK: @llvm.ppc.altivec.vupklsh
+  res_vs  = vec_vupklsb(vsc);                   // CHECK: @llvm.ppc.altivec.vupklsb
+  res_vbs = vec_vupklsb(vbc);                   // CHECK: @llvm.ppc.altivec.vupklsb
+  res_vi  = vec_vupklsh(vs);                    // CHECK: @llvm.ppc.altivec.vupklsh
+  res_vbi = vec_vupklsh(vbs);                   // CHECK: @llvm.ppc.altivec.vupklsh
+  res_vui = vec_vupklsh(vp);                    // CHECK: @llvm.ppc.altivec.vupklsh
 
   /* vec_xor */
   res_vsc = vec_xor(vsc, vsc);                  // CHECK: xor <16 x i8>
+  res_vsc = vec_xor(vbc, vsc);                  // CHECK: xor <16 x i8>
+  res_vsc = vec_xor(vsc, vbc);                  // CHECK: xor <16 x i8>
   res_vuc = vec_xor(vuc, vuc);                  // CHECK: xor <16 x i8>
+  res_vuc = vec_xor(vbc, vuc);                  // CHECK: xor <16 x i8>
+  res_vuc = vec_xor(vuc, vbc);                  // CHECK: xor <16 x i8>
+  res_vbc = vec_xor(vbc, vbc);                  // CHECK: xor <16 x i8>
   res_vs  = vec_xor(vs, vs);                    // CHECK: xor <8 x i16>
+  res_vs  = vec_xor(vbs, vs);                   // CHECK: xor <8 x i16>
+  res_vs  = vec_xor(vs, vbs);                   // CHECK: xor <8 x i16>
   res_vus = vec_xor(vus, vus);                  // CHECK: xor <8 x i16>
+  res_vus = vec_xor(vbs, vus);                  // CHECK: xor <8 x i16>
+  res_vus = vec_xor(vus, vbs);                  // CHECK: xor <8 x i16>
+  res_vbs = vec_xor(vbs, vbs);                  // CHECK: xor <8 x i16>
   res_vi  = vec_xor(vi, vi);                    // CHECK: xor <4 x i32>
+  res_vi  = vec_xor(vbi, vi);                   // CHECK: xor <4 x i32>
+  res_vi  = vec_xor(vi, vbi);                   // CHECK: xor <4 x i32>
   res_vui = vec_xor(vui, vui);                  // CHECK: xor <4 x i32>
+  res_vui = vec_xor(vbi, vui);                  // CHECK: xor <4 x i32>
+  res_vui = vec_xor(vui, vbi);                  // CHECK: xor <4 x i32>
+  res_vbi = vec_xor(vbi, vbi);                  // CHECK: xor <4 x i32>
   res_vf  = vec_xor(vf, vf);                    // CHECK: xor <4 x i32>
+  res_vf  = vec_xor(vbi, vf);                   // CHECK: xor <4 x i32>
+  res_vf  = vec_xor(vf, vbi);                   // CHECK: xor <4 x i32>
   res_vsc = vec_vxor(vsc, vsc);                 // CHECK: xor <16 x i8>
+  res_vsc = vec_vxor(vbc, vsc);                 // CHECK: xor <16 x i8>
+  res_vsc = vec_vxor(vsc, vbc);                 // CHECK: xor <16 x i8>
   res_vuc = vec_vxor(vuc, vuc);                 // CHECK: xor <16 x i8>
+  res_vuc = vec_vxor(vbc, vuc);                 // CHECK: xor <16 x i8>
+  res_vuc = vec_vxor(vuc, vbc);                 // CHECK: xor <16 x i8>
+  res_vbc = vec_vxor(vbc, vbc);                 // CHECK: xor <16 x i8>
   res_vs  = vec_vxor(vs, vs);                   // CHECK: xor <8 x i16>
+  res_vs  = vec_vxor(vbs, vs);                  // CHECK: xor <8 x i16>
+  res_vs  = vec_vxor(vs, vbs);                  // CHECK: xor <8 x i16>
   res_vus = vec_vxor(vus, vus);                 // CHECK: xor <8 x i16>
+  res_vus = vec_vxor(vbs, vus);                 // CHECK: xor <8 x i16>
+  res_vus = vec_vxor(vus, vbs);                 // CHECK: xor <8 x i16>
+  res_vbs = vec_vxor(vbs, vbs);                 // CHECK: xor <8 x i16>
   res_vi  = vec_vxor(vi, vi);                   // CHECK: xor <4 x i32>
+  res_vi  = vec_vxor(vbi, vi);                  // CHECK: xor <4 x i32>
+  res_vi  = vec_vxor(vi, vbi);                  // CHECK: xor <4 x i32>
   res_vui = vec_vxor(vui, vui);                 // CHECK: xor <4 x i32>
+  res_vui = vec_vxor(vbi, vui);                 // CHECK: xor <4 x i32>
+  res_vui = vec_vxor(vui, vbi);                 // CHECK: xor <4 x i32>
+  res_vbi = vec_vxor(vbi, vbi);                 // CHECK: xor <4 x i32>
   res_vf  = vec_vxor(vf, vf);                   // CHECK: xor <4 x i32>
+  res_vf  = vec_vxor(vbi, vf);                  // CHECK: xor <4 x i32>
+  res_vf  = vec_vxor(vf, vbi);                  // CHECK: xor <4 x i32>
 
   /* ------------------------------ predicates -------------------------------------- */
 
@@ -1441,6 +1903,4 @@
 
   /* vec_any_out */
   res_i = vec_any_out(vf, vf);                  // CHECK: @llvm.ppc.altivec.vcmpbfp.p
-
-  return 0;
 }