296 lines · c
1// REQUIRES: powerpc-registered-target2// RUN: %clang_cc1 -flax-vector-conversions=none -target-feature +altivec \3// RUN: -target-feature +power8-vector -triple powerpc-unknown-unknown -emit-llvm %s -o - | FileCheck %s4 5#include <altivec.h>6vector signed long long vsll1, vsll2, vsll3;7vector unsigned long long vull1, vull2, vull3;8vector signed char vsc;9vector unsigned char vuc;10vector bool long long vbll;11 12void dummy();13void test() {14 vec_abs(vsll1);15// CHECK: call <2 x i64> @llvm.ppc.altivec.vmaxsd16 dummy();17// CHECK-NEXT: call void @dummy()18 vec_add(vsll1, vsll2);19// CHECK: add <2 x i64>20 dummy();21// CHECK: call void @dummy()22 vec_and(vsll1, vsll2);23// CHECK: and <2 x i64>24 dummy();25// CHECK: call void @dummy()26 vec_vand(vsll1, vsll2);27// CHECK: and <2 x i64>28 dummy();29// CHECK: call void @dummy()30 vec_andc(vsll1, vsll2);31// CHECK: xor <2 x i64>32// CHECK: and <2 x i64>33 dummy();34// CHECK: call void @dummy()35 vec_vandc(vsll1, vsll2);36// CHECK: xor <2 x i64>37// CHECK: and <2 x i64>38 dummy();39// CHECK: call void @dummy()40 vec_cmpeq(vsll1, vsll2);41// CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpequd42 dummy();43// CHECK: call void @dummy()44 vec_cmpne(vsll1, vsll2);45// CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpequd46// CHECK: xor <2 x i64>47 dummy();48// CHECK: call void @dummy()49 vec_cmpgt(vsll1, vsll2);50// CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpgtsd51 dummy();52// CHECK: call void @dummy()53 vec_cmpge(vsll1, vsll2);54// CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpgtsd55// CHECK: xor <2 x i64>56 dummy();57// CHECK: call void @dummy()58 vec_cmple(vsll1, vsll2);59// CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpgtsd60// CHECK: xor <2 x i64>61 dummy();62// CHECK: call void @dummy()63 vec_cmplt(vsll1, vsll2);64// CHECK: call <2 x i64> @llvm.ppc.altivec.vcmpgtsd65 dummy();66// CHECK: call void @dummy()67 vec_popcnt(vsll1);68// CHECK: call <2 x i64> @llvm.ctpop.v2i6469 dummy();70// CHECK: call void @dummy()71 vec_cntlz(vsll1);72// CHECK: call <2 x i64> @llvm.ctlz.v2i6473 dummy();74// CHECK: call void @dummy()75 vec_float2(vsll1, vsll2);76// CHECK: sitofp i64 %{{.*}} to float77 dummy();78// CHECK: call void @dummy()79 vec_floate(vsll1);80// CHECK: call <4 x float> @llvm.ppc.vsx.xvcvsxdsp81 dummy();82// CHECK: call void @dummy()83 vec_floato(vsll1);84// CHECK: call <4 x float> @llvm.ppc.vsx.xvcvsxdsp85 dummy();86// CHECK: call void @dummy()87 vec_double(vsll1);88// CHECK: sitofp <2 x i64> %{{.*}} to <2 x double>89 dummy();90// CHECK: call void @dummy()91 vec_div(vsll1, vsll2);92// CHECK: sdiv <2 x i64>93 dummy();94// CHECK: call void @dummy()95 vec_eqv(vsll1, vsll2);96// CHECK: call <4 x i32> @llvm.ppc.vsx.xxleqv97 dummy();98// CHECK: call void @dummy()99 vec_max(vsll1, vsll2);100// CHECK: call <2 x i64> @llvm.ppc.altivec.vmaxsd101 dummy();102// CHECK: call void @dummy()103 vec_mergeh(vsll1, vsll2);104// CHECK: call <4 x i32> @llvm.ppc.altivec.vperm105 dummy();106// CHECK: call void @dummy()107 vec_mergel(vsll1, vsll2);108// CHECK: call <4 x i32> @llvm.ppc.altivec.vperm109 dummy();110// CHECK: call void @dummy()111 vec_mergee(vsll1, vsll2);112// CHECK: call <4 x i32> @llvm.ppc.altivec.vperm113 dummy();114// CHECK: call void @dummy()115 vec_mergeo(vsll1, vsll2);116// CHECK: call <4 x i32> @llvm.ppc.altivec.vperm117 dummy();118// CHECK: call void @dummy()119 vec_min(vsll1, vsll2);120// CHECK: call <2 x i64> @llvm.ppc.altivec.vminsd121 dummy();122// CHECK: call void @dummy()123 vec_mul(vsll1, vsll2);124// CHECK: mul <2 x i64>125 dummy();126// CHECK: call void @dummy()127 vec_nand(vsll1, vsll2);128// CHECK: and <2 x i64>129// CHECK: xor <2 x i64>130 dummy();131// CHECK: call void @dummy()132 vec_nor(vsll1, vsll2);133// CHECK: or <2 x i64>134// CHECK: xor <2 x i64>135 dummy();136// CHECK: call void @dummy()137 vec_or(vsll1, vsll2);138// CHECK: or <2 x i64>139 dummy();140// CHECK: call void @dummy()141 vec_orc(vsll1, vsll2);142// CHECK: xor <2 x i64>143// CHECK: or <2 x i64>144 dummy();145// CHECK: call void @dummy()146 vec_vor(vsll1, vsll2);147// CHECK: or <2 x i64>148 dummy();149// CHECK: call void @dummy()150 vec_pack(vsll1, vsll2);151// CHECK: call <4 x i32> @llvm.ppc.altivec.vperm152 dummy();153// CHECK: call void @dummy()154 vec_vpkudum(vsll1, vsll2);155// CHECK: call <4 x i32> @llvm.ppc.altivec.vperm156 dummy();157// CHECK: call void @dummy()158 vec_packs(vsll1, vsll2);159// CHECK: call <4 x i32> @llvm.ppc.altivec.vpksdss160 dummy();161// CHECK: call void @dummy()162 vec_vpkudus(vull1, vull2);163// CHECK: call <4 x i32> @llvm.ppc.altivec.vpkudus164 dummy();165// CHECK: call void @dummy()166 vec_packsu(vsll1, vsll2);167// CHECK: call <4 x i32> @llvm.ppc.altivec.vpksdus168 dummy();169// CHECK: call void @dummy()170 vec_rl(vull1, vull2);171// CHECK: call <2 x i64> @llvm.ppc.altivec.vrld172 dummy();173// CHECK: call void @dummy()174 vec_sel(vsll1, vsll2, vbll);175// CHECK: xor <2 x i64>176// CHECK: and <2 x i64>177// CHECK: and <2 x i64>178// CHECK: or <2 x i64>179 dummy();180// CHECK: call void @dummy()181 vec_sl(vull1, vull2);182// CHECK: shl <2 x i64>183 dummy();184// CHECK: call void @dummy()185 vec_sld(vsll1, vsll2, 2);186// CHECK: call <4 x i32> @llvm.ppc.altivec.vperm187 dummy();188// CHECK: call void @dummy()189 vec_sldw(vsll1, vsll2, 2);190// CHECK: call <4 x i32> @llvm.ppc.altivec.vperm191 dummy();192// CHECK: call void @dummy()193 vec_sll(vsll1, vuc);194// CHECK: call <4 x i32> @llvm.ppc.altivec.vsl195 dummy();196// CHECK: call void @dummy()197 vec_slo(vsll1, vsc);198// CHECK: call <4 x i32> @llvm.ppc.altivec.vslo199 dummy();200// CHECK: call void @dummy()201 vec_splat(vsll1, 2);202// CHECK: call <4 x i32> @llvm.ppc.altivec.vperm203 dummy();204// CHECK: call void @dummy()205 vec_sr(vull1, vull2);206// CHECK: lshr <2 x i64>207 dummy();208// CHECK: call void @dummy()209 vec_sra(vsll1, vull2);210// CHECK: ashr <2 x i64>211 dummy();212// CHECK: call void @dummy()213 vec_srl(vsll1, vuc);214// CHECK: call <4 x i32> @llvm.ppc.altivec.vsr215 dummy();216// CHECK: call void @dummy()217 vec_sro(vsll1, vsc);218// CHECK: call <4 x i32> @llvm.ppc.altivec.vsro219 dummy();220// CHECK: call void @dummy()221 vec_sub(vsll1, vsll2);222// CHECK: sub <2 x i64>223 dummy();224// CHECK: call void @dummy()225 vec_xor(vsll1, vsll2);226// CHECK: xor <2 x i64>227 dummy();228// CHECK: call void @dummy()229 vec_vxor(vsll1, vsll2);230// CHECK: xor <2 x i64>231 dummy();232// CHECK: call void @dummy()233 vec_extract(vsll1, 2);234// CHECK: extractelement <2 x i64>235 dummy();236// CHECK: call void @dummy()237 vec_all_eq(vsll1, vsll2);238// CHECK: call i32 @llvm.ppc.altivec.vcmpequd.p239 dummy();240// CHECK: call void @dummy()241 vec_all_ge(vsll1, vsll2);242// CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p243 dummy();244// CHECK: call void @dummy()245 vec_all_gt(vsll1, vsll2);246// CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p247 dummy();248// CHECK: call void @dummy()249 vec_all_le(vsll1, vsll2);250// CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p251 dummy();252// CHECK: call void @dummy()253 vec_all_lt(vsll1, vsll2);254// CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p255 dummy();256// CHECK: call void @dummy()257 vec_all_ne(vsll1, vsll2);258// CHECK: call i32 @llvm.ppc.altivec.vcmpequd.p259 dummy();260// CHECK: call void @dummy()261 vec_any_eq(vsll1, vsll2);262// CHECK: call i32 @llvm.ppc.altivec.vcmpequd.p263 dummy();264// CHECK: call void @dummy()265 vec_any_ge(vsll1, vsll2);266// CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p267 dummy();268// CHECK: call void @dummy()269 vec_any_gt(vsll1, vsll2);270// CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p271 dummy();272// CHECK: call void @dummy()273 vec_any_le(vsll1, vsll2);274// CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p275 dummy();276// CHECK: call void @dummy()277 vec_any_lt(vsll1, vsll2);278// CHECK: call i32 @llvm.ppc.altivec.vcmpgtsd.p279 dummy();280// CHECK: call void @dummy()281 vec_any_ne(vsll1, vsll2);282// CHECK: call i32 @llvm.ppc.altivec.vcmpequd.p283 dummy();284// CHECK: call void @dummy()285 vec_gbb(vsll1);286// CHECK: call <16 x i8> @llvm.ppc.altivec.vgbbd287 dummy();288// CHECK: call void @dummy()289 vec_reve(vsll1);290// CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> <i32 1, i32 0>291 dummy();292// CHECK: call void @dummy()293 vec_revb(vsll1);294// CHECK: call <4 x i32> @llvm.ppc.altivec.vperm295}296