brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.5 KiB · cd0fafd Raw
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