430 lines · c
1// REQUIRES: systemz-registered-target2// RUN: %clang_cc1 -target-cpu z17 -triple s390x-linux-gnu \3// RUN: -O2 -fzvector -flax-vector-conversions=none \4// RUN: -Wall -Wno-unused -Werror -emit-llvm %s -o - | FileCheck %s5// RUN: %clang_cc1 -target-cpu z17 -triple s390x-linux-gnu \6// RUN: -O2 -fzvector -flax-vector-conversions=none \7// RUN: -Wall -Wno-unused -Werror -S %s -o - | FileCheck %s --check-prefix=CHECK-ASM8 9#include <vecintrin.h>10 11volatile vector signed char vsc;12volatile vector signed short vss;13volatile vector signed int vsi;14volatile vector signed long long vsl;15volatile vector signed __int128 vslll;16volatile vector unsigned char vuc;17volatile vector unsigned short vus;18volatile vector unsigned int vui;19volatile vector unsigned long long vul;20volatile vector unsigned __int128 vulll;21volatile vector bool char vbc;22volatile vector bool short vbs;23volatile vector bool int vbi;24volatile vector bool long long vbl;25volatile vector bool __int128 vblll;26volatile vector float vf;27volatile vector double vd;28 29volatile int idx;30int cc;31 32void test_core(void) {33 // CHECK-ASM-LABEL: test_core34 35 vuc = vec_gen_element_masks_8(vus);36 // CHECK: call <16 x i8> @llvm.s390.vgemb(<8 x i16> %{{.*}})37 // CHECK-ASM: vgemb38 vus = vec_gen_element_masks_16(vuc);39 // CHECK: call <8 x i16> @llvm.s390.vgemh(<16 x i8> %{{.*}})40 // CHECK-ASM: vgemh41 vui = vec_gen_element_masks_32(vuc);42 // CHECK: call <4 x i32> @llvm.s390.vgemf(<16 x i8> %{{.*}})43 // CHECK-ASM: vgemf44 vul = vec_gen_element_masks_64(vuc);45 // CHECK: call <2 x i64> @llvm.s390.vgemg(<16 x i8> %{{.*}})46 // CHECK-ASM: vgemg47 vulll = vec_gen_element_masks_128(vuc);48 // CHECK: call i128 @llvm.s390.vgemq(<16 x i8> %{{.*}})49 // CHECK-ASM: vgemq50 51 vsc = vec_blend(vsc, vsc, vsc);52 // CHECK-ASM: vblendb53 vbc = vec_blend(vbc, vbc, vsc);54 // CHECK-ASM: vblendb55 vuc = vec_blend(vuc, vuc, vsc);56 // CHECK-ASM: vblendb57 vss = vec_blend(vss, vss, vss);58 // CHECK-ASM: vblendh59 vbs = vec_blend(vbs, vbs, vss);60 // CHECK-ASM: vblendh61 vus = vec_blend(vus, vus, vss);62 // CHECK-ASM: vblendh63 vsi = vec_blend(vsi, vsi, vsi);64 // CHECK-ASM: vblendf65 vbi = vec_blend(vbi, vbi, vsi);66 // CHECK-ASM: vblendf67 vui = vec_blend(vui, vui, vsi);68 // CHECK-ASM: vblendf69 vsl = vec_blend(vsl, vsl, vsl);70 // CHECK-ASM: vblendg71 vul = vec_blend(vul, vul, vsl);72 // CHECK-ASM: vblendg73 vbl = vec_blend(vbl, vbl, vsl);74 // CHECK-ASM: vblendg75 vslll = vec_blend(vslll, vslll, vslll);76 // CHECK-ASM: vblendq77 vblll = vec_blend(vblll, vblll, vslll);78 // CHECK-ASM: vblendq79 vulll = vec_blend(vulll, vulll, vslll);80 // CHECK-ASM: vblendq81 vf = vec_blend(vf, vf, vsi);82 // CHECK-ASM: vblendf83 vd = vec_blend(vd, vd, vsl);84 // CHECK-ASM: vblendg85 86 vslll = vec_unpackh(vsl);87 // CHECK: call i128 @llvm.s390.vuphg(<2 x i64> %{{.*}})88 // CHECK-ASM: vuphg89 vulll = vec_unpackh(vul);90 // CHECK: call i128 @llvm.s390.vuplhg(<2 x i64> %{{.*}})91 // CHECK-ASM: vuplhg92 vslll = vec_unpackl(vsl);93 // CHECK: call i128 @llvm.s390.vuplg(<2 x i64> %{{.*}})94 // CHECK-ASM: vuplg95 vulll = vec_unpackl(vul);96 // CHECK: call i128 @llvm.s390.vupllg(<2 x i64> %{{.*}})97 // CHECK-ASM: vupllg98}99 100void test_compare(void) {101 // CHECK-ASM-LABEL: test_compare102 103 vblll = vec_cmpeq(vslll, vslll);104 // CHECK: icmp eq <1 x i128> %{{.*}}, %{{.*}}105 // CHECK-ASM: vceqq106 vblll = vec_cmpeq(vulll, vulll);107 // CHECK: icmp eq <1 x i128> %{{.*}}, %{{.*}}108 // CHECK-ASM: vceqq109 vblll = vec_cmpeq(vblll, vblll);110 // CHECK: icmp eq <1 x i128> %{{.*}}, %{{.*}}111 // CHECK-ASM: vceqq112 113 vblll = vec_cmpge(vslll, vslll);114 // CHECK: icmp sge <1 x i128> %{{.*}}, %{{.*}}115 // CHECK-ASM: vchq116 vblll = vec_cmpge(vulll, vulll);117 // CHECK: icmp uge <1 x i128> %{{.*}}, %{{.*}}118 // CHECK-ASM: vchlq119 120 vblll = vec_cmpgt(vslll, vslll);121 // CHECK: icmp sgt <1 x i128> %{{.*}}, %{{.*}}122 // CHECK-ASM: vchq123 vblll = vec_cmpgt(vulll, vulll);124 // CHECK: icmp ugt <1 x i128> %{{.*}}, %{{.*}}125 // CHECK-ASM: vchlq126 127 vblll = vec_cmple(vslll, vslll);128 // CHECK: icmp sle <1 x i128> %{{.*}}, %{{.*}}129 // CHECK-ASM: vchq130 vblll = vec_cmple(vulll, vulll);131 // CHECK: icmp ule <1 x i128> %{{.*}}, %{{.*}}132 // CHECK-ASM: vchlq133 134 vblll = vec_cmplt(vslll, vslll);135 // CHECK: icmp slt <1 x i128> %{{.*}}, %{{.*}}136 // CHECK-ASM: vchq137 vblll = vec_cmplt(vulll, vulll);138 // CHECK: icmp ult <1 x i128> %{{.*}}, %{{.*}}139 // CHECK-ASM: vchlq140 141 idx = vec_all_eq(vslll, vslll);142 // CHECK: call { i128, i32 } @llvm.s390.vceqqs(i128 %{{.*}}, i128 %{{.*}})143 // CHECK-ASM: vceqqs144 idx = vec_all_eq(vulll, vulll);145 // CHECK: call { i128, i32 } @llvm.s390.vceqqs(i128 %{{.*}}, i128 %{{.*}})146 // CHECK-ASM: vceqqs147 idx = vec_all_eq(vblll, vblll);148 // CHECK: call { i128, i32 } @llvm.s390.vceqqs(i128 %{{.*}}, i128 %{{.*}})149 // CHECK-ASM: vceqqs150 151 idx = vec_all_ne(vslll, vslll);152 // CHECK: call { i128, i32 } @llvm.s390.vceqqs(i128 %{{.*}}, i128 %{{.*}})153 // CHECK-ASM: vceqqs154 idx = vec_all_ne(vulll, vulll);155 // CHECK: call { i128, i32 } @llvm.s390.vceqqs(i128 %{{.*}}, i128 %{{.*}})156 // CHECK-ASM: vceqqs157 idx = vec_all_ne(vblll, vblll);158 // CHECK: call { i128, i32 } @llvm.s390.vceqqs(i128 %{{.*}}, i128 %{{.*}})159 // CHECK-ASM: vceqqs160 161 idx = vec_all_ge(vslll, vslll);162 // CHECK: call { i128, i32 } @llvm.s390.vchqs(i128 %{{.*}}, i128 %{{.*}})163 // CHECK-ASM: vchqs164 idx = vec_all_ge(vulll, vulll);165 // CHECK: call { i128, i32 } @llvm.s390.vchlqs(i128 %{{.*}}, i128 %{{.*}})166 // CHECK-ASM: vchlqs167 168 idx = vec_all_gt(vslll, vslll);169 // CHECK: call { i128, i32 } @llvm.s390.vchqs(i128 %{{.*}}, i128 %{{.*}})170 // CHECK-ASM: vchqs171 idx = vec_all_gt(vulll, vulll);172 // CHECK: call { i128, i32 } @llvm.s390.vchlqs(i128 %{{.*}}, i128 %{{.*}})173 // CHECK-ASM: vchlqs174 175 idx = vec_all_le(vslll, vslll);176 // CHECK: call { i128, i32 } @llvm.s390.vchqs(i128 %{{.*}}, i128 %{{.*}})177 // CHECK-ASM: vchqs178 idx = vec_all_le(vulll, vulll);179 // CHECK: call { i128, i32 } @llvm.s390.vchlqs(i128 %{{.*}}, i128 %{{.*}})180 // CHECK-ASM: vchlqs181 182 idx = vec_all_lt(vslll, vslll);183 // CHECK: call { i128, i32 } @llvm.s390.vchqs(i128 %{{.*}}, i128 %{{.*}})184 // CHECK-ASM: vchqs185 idx = vec_all_lt(vulll, vulll);186 // CHECK: call { i128, i32 } @llvm.s390.vchlqs(i128 %{{.*}}, i128 %{{.*}})187 // CHECK-ASM: vchlqs188 189 idx = vec_any_eq(vslll, vslll);190 // CHECK: call { i128, i32 } @llvm.s390.vceqqs(i128 %{{.*}}, i128 %{{.*}})191 // CHECK-ASM: vceqqs192 idx = vec_any_eq(vulll, vulll);193 // CHECK: call { i128, i32 } @llvm.s390.vceqqs(i128 %{{.*}}, i128 %{{.*}})194 // CHECK-ASM: vceqqs195 idx = vec_any_eq(vblll, vblll);196 // CHECK: call { i128, i32 } @llvm.s390.vceqqs(i128 %{{.*}}, i128 %{{.*}})197 // CHECK-ASM: vceqqs198 199 idx = vec_any_ne(vslll, vslll);200 // CHECK: call { i128, i32 } @llvm.s390.vceqqs(i128 %{{.*}}, i128 %{{.*}})201 // CHECK-ASM: vceqqs202 idx = vec_any_ne(vulll, vulll);203 // CHECK: call { i128, i32 } @llvm.s390.vceqqs(i128 %{{.*}}, i128 %{{.*}})204 // CHECK-ASM: vceqqs205 idx = vec_any_ne(vblll, vblll);206 // CHECK: call { i128, i32 } @llvm.s390.vceqqs(i128 %{{.*}}, i128 %{{.*}})207 // CHECK-ASM: vceqqs208 209 idx = vec_any_ge(vslll, vslll);210 // CHECK: call { i128, i32 } @llvm.s390.vchqs(i128 %{{.*}}, i128 %{{.*}})211 // CHECK-ASM: vchqs212 idx = vec_any_ge(vulll, vulll);213 // CHECK: call { i128, i32 } @llvm.s390.vchlqs(i128 %{{.*}}, i128 %{{.*}})214 // CHECK-ASM: vchlqs215 216 idx = vec_any_gt(vslll, vslll);217 // CHECK: call { i128, i32 } @llvm.s390.vchqs(i128 %{{.*}}, i128 %{{.*}})218 // CHECK-ASM: vchqs219 idx = vec_any_gt(vulll, vulll);220 // CHECK: call { i128, i32 } @llvm.s390.vchlqs(i128 %{{.*}}, i128 %{{.*}})221 // CHECK-ASM: vchlqs222 223 idx = vec_any_le(vslll, vslll);224 // CHECK: call { i128, i32 } @llvm.s390.vchqs(i128 %{{.*}}, i128 %{{.*}})225 // CHECK-ASM: vchqs226 idx = vec_any_le(vulll, vulll);227 // CHECK: call { i128, i32 } @llvm.s390.vchlqs(i128 %{{.*}}, i128 %{{.*}})228 // CHECK-ASM: vchlqs229 230 idx = vec_any_lt(vslll, vslll);231 // CHECK: call { i128, i32 } @llvm.s390.vchqs(i128 %{{.*}}, i128 %{{.*}})232 // CHECK-ASM: vchqs233 idx = vec_any_lt(vulll, vulll);234 // CHECK: call { i128, i32 } @llvm.s390.vchlqs(i128 %{{.*}}, i128 %{{.*}})235 // CHECK-ASM: vchlqs236}237 238void test_integer(void) {239 // CHECK-ASM-LABEL: test_integer240 241 vulll = vec_cntlz(vulll);242 // CHECK: call range(i128 0, 129) i128 @llvm.ctlz.i128(i128 %{{.*}}, i1 false)243 // CHECK-ASM: vclzq244 vulll = vec_cnttz(vulll);245 // CHECK: call range(i128 0, 129) i128 @llvm.cttz.i128(i128 %{{.*}}, i1 false)246 // CHECK-ASM: vctzq247 248 vslll = vec_abs(vslll);249 // CHECK-ASM: vlpq250 251 vslll = vec_avg(vslll, vslll);252 // CHECK: call i128 @llvm.s390.vavgq(i128 %{{.*}}, i128 %{{.*}})253 // CHECK-ASM: vavgq254 vulll = vec_avg(vulll, vulll);255 // CHECK: call i128 @llvm.s390.vavglq(i128 %{{.*}}, i128 %{{.*}})256 // CHECK-ASM: vavglq257 258 vsc = vec_evaluate(vsc, vsc, vsc, 0);259 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)260 // CHECK-ASM: veval261 vsc = vec_evaluate(vsc, vsc, vsc, 255);262 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)263 // CHECK-ASM: veval264 vuc = vec_evaluate(vuc, vuc, vuc, 0);265 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)266 // CHECK-ASM: veval267 vuc = vec_evaluate(vuc, vuc, vuc, 255);268 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)269 // CHECK-ASM: veval270 vbc = vec_evaluate(vbc, vbc, vbc, 0);271 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)272 // CHECK-ASM: veval273 vbc = vec_evaluate(vbc, vbc, vbc, 255);274 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)275 // CHECK-ASM: veval276 vss = vec_evaluate(vss, vss, vss, 0);277 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)278 // CHECK-ASM: veval279 vss = vec_evaluate(vss, vss, vss, 255);280 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)281 // CHECK-ASM: veval282 vus = vec_evaluate(vus, vus, vus, 0);283 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)284 // CHECK-ASM: veval285 vus = vec_evaluate(vus, vus, vus, 255);286 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)287 // CHECK-ASM: veval288 vbs = vec_evaluate(vbs, vbs, vbs, 0);289 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)290 // CHECK-ASM: veval291 vbs = vec_evaluate(vbs, vbs, vbs, 255);292 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)293 // CHECK-ASM: veval294 vsi = vec_evaluate(vsi, vsi, vsi, 0);295 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)296 // CHECK-ASM: veval297 vsi = vec_evaluate(vsi, vsi, vsi, 255);298 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)299 // CHECK-ASM: veval300 vui = vec_evaluate(vui, vui, vui, 0);301 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)302 // CHECK-ASM: veval303 vui = vec_evaluate(vui, vui, vui, 255);304 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)305 // CHECK-ASM: veval306 vbi = vec_evaluate(vbi, vbi, vbi, 0);307 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)308 // CHECK-ASM: veval309 vbi = vec_evaluate(vbi, vbi, vbi, 255);310 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)311 // CHECK-ASM: veval312 vsl = vec_evaluate(vsl, vsl, vsl, 0);313 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)314 // CHECK-ASM: veval315 vsl = vec_evaluate(vsl, vsl, vsl, 255);316 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)317 // CHECK-ASM: veval318 vul = vec_evaluate(vul, vul, vul, 0);319 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)320 // CHECK-ASM: veval321 vul = vec_evaluate(vul, vul, vul, 255);322 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)323 // CHECK-ASM: veval324 vbl = vec_evaluate(vbl, vbl, vbl, 0);325 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)326 // CHECK-ASM: veval327 vbl = vec_evaluate(vbl, vbl, vbl, 255);328 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)329 // CHECK-ASM: veval330 vslll = vec_evaluate(vslll, vslll, vslll, 0);331 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)332 // CHECK-ASM: veval333 vslll = vec_evaluate(vslll, vslll, vslll, 255);334 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)335 // CHECK-ASM: veval336 vulll = vec_evaluate(vulll, vulll, vulll, 0);337 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)338 // CHECK-ASM: veval339 vulll = vec_evaluate(vulll, vulll, vulll, 255);340 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)341 // CHECK-ASM: veval342 vblll = vec_evaluate(vblll, vblll, vblll, 0);343 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 0)344 // CHECK-ASM: veval345 vblll = vec_evaluate(vblll, vblll, vblll, 255);346 // CHECK: call <16 x i8> @llvm.s390.veval(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, i32 255)347 // CHECK-ASM: veval348 349 vslll = vec_max(vslll, vslll);350 // CHECK-ASM: vmxq351 vulll = vec_max(vulll, vulll);352 // CHECK-ASM: vmxlq353 vslll = vec_min(vslll, vslll);354 // CHECK-ASM: vmnq355 vulll = vec_min(vulll, vulll);356 // CHECK-ASM: vmnlq357 358 vsl = vec_mladd(vsl, vsl, vsl);359 // CHECK-ASM: vmalg360 vsl = vec_mladd(vul, vsl, vsl);361 // CHECK-ASM: vmalg362 vsl = vec_mladd(vsl, vul, vul);363 // CHECK-ASM: vmalg364 vul = vec_mladd(vul, vul, vul);365 // CHECK-ASM: vmalg366 vslll = vec_mladd(vslll, vslll, vslll);367 // CHECK-ASM: vmalq368 vslll = vec_mladd(vulll, vslll, vslll);369 // CHECK-ASM: vmalq370 vslll = vec_mladd(vslll, vulll, vulll);371 // CHECK-ASM: vmalq372 vulll = vec_mladd(vulll, vulll, vulll);373 // CHECK-ASM: vmalq374 375 vsl = vec_mhadd(vsl, vsl, vsl);376 // CHECK: call <2 x i64> @llvm.s390.vmahg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})377 // CHECK-ASM: vmahg378 vul = vec_mhadd(vul, vul, vul);379 // CHECK: call <2 x i64> @llvm.s390.vmalhg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}})380 // CHECK-ASM: vmalhg381 vslll = vec_mhadd(vslll, vslll, vslll);382 // CHECK: call i128 @llvm.s390.vmahq(i128 %{{.*}}, i128 %{{.*}}, i128 %{{.*}})383 // CHECK-ASM: vmahq384 vulll = vec_mhadd(vulll, vulll, vulll);385 // CHECK: call i128 @llvm.s390.vmalhq(i128 %{{.*}}, i128 %{{.*}}, i128 %{{.*}})386 // CHECK-ASM: vmalhq387 388 vslll = vec_meadd(vsl, vsl, vslll);389 // CHECK: call i128 @llvm.s390.vmaeg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}})390 // CHECK-ASM: vmaeg391 vulll = vec_meadd(vul, vul, vulll);392 // CHECK: call i128 @llvm.s390.vmaleg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}})393 // CHECK-ASM: vmaleg394 395 vslll = vec_moadd(vsl, vsl, vslll);396 // CHECK: call i128 @llvm.s390.vmaog(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}})397 // CHECK-ASM: vmaog398 vulll = vec_moadd(vul, vul, vulll);399 // CHECK: call i128 @llvm.s390.vmalog(<2 x i64> %{{.*}}, <2 x i64> %{{.*}}, i128 %{{.*}})400 // CHECK-ASM: vmalog401 402 vsl = vec_mulh(vsl, vsl);403 // CHECK: call <2 x i64> @llvm.s390.vmhg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})404 // CHECK-ASM: vmhg405 vul = vec_mulh(vul, vul);406 // CHECK: call <2 x i64> @llvm.s390.vmlhg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})407 // CHECK-ASM: vmlhg408 vslll = vec_mulh(vslll, vslll);409 // CHECK: call i128 @llvm.s390.vmhq(i128 %{{.*}}, i128 %{{.*}})410 // CHECK-ASM: vmhq411 vulll = vec_mulh(vulll, vulll);412 // CHECK: call i128 @llvm.s390.vmlhq(i128 %{{.*}}, i128 %{{.*}})413 // CHECK-ASM: vmlhq414 415 vslll = vec_mule(vsl, vsl);416 // CHECK: call i128 @llvm.s390.vmeg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})417 // CHECK-ASM: vmeg418 vulll = vec_mule(vul, vul);419 // CHECK: call i128 @llvm.s390.vmleg(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})420 // CHECK-ASM: vmleg421 422 vslll = vec_mulo(vsl, vsl);423 // CHECK: call i128 @llvm.s390.vmog(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})424 // CHECK-ASM: vmog425 vulll = vec_mulo(vul, vul);426 // CHECK: call i128 @llvm.s390.vmlog(<2 x i64> %{{.*}}, <2 x i64> %{{.*}})427 // CHECK-ASM: vmlog428}429 430