brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.1 KiB · 8a44037 Raw
223 lines · c
1// RUN: %clang_cc1 -triple s390x-linux-gnu -fzvector -target-cpu z14 \2// RUN:  -flax-vector-conversions=none -W -Wall -Wconversion \3// RUN:  -Werror -fsyntax-only -verify %s4 5vector signed char sc, sc2;6vector unsigned char uc, uc2;7vector bool char bc, bc2;8 9vector signed short ss, ss2;10vector unsigned short us, us2;11vector bool short bs, bs2;12 13vector signed int si, si2;14vector unsigned int ui, ui2;15vector bool int bi, bi2;16 17vector signed long long sl, sl2;18vector unsigned long long ul, ul2;19vector bool long long bl, bl2;20 21vector double fd, fd2;22 23vector float ff, ff2;24 25// Verify that __vector is also recognized26__vector float ff3;27 28// With z14 we support vector float, but still no vector _Complex float.29vector float _Complex cf; // expected-error {{cannot use '_Complex' with '__vector'}}30__vector float _Complex cf3; // expected-error {{cannot use '_Complex' with '__vector'}}31 32// Verify operation of vec_step33int res_ff[vec_step(ff) == 4 ? 1 : -1];34 35 36void foo(void)37{38  // -------------------------------------------------------------------------39  // Test assignment.40  // -------------------------------------------------------------------------41 42  ff = ff2;43 44  sc = ff2; // expected-error {{incompatible type}}45  ff = sc2; // expected-error {{incompatible type}}46 47  uc = ff2; // expected-error {{incompatible type}}48  ff = uc2; // expected-error {{incompatible type}}49 50  bc = ff2; // expected-error {{incompatible type}}51  ff = bc2; // expected-error {{incompatible type}}52 53  fd = ff2; // expected-error {{incompatible type}}54  ff = fd2; // expected-error {{incompatible type}}55 56  // -------------------------------------------------------------------------57  // Test casts to same element width.58  // -------------------------------------------------------------------------59 60  ui = (vector unsigned int)ff2;61  ff = (vector float)si2;62 63  // -------------------------------------------------------------------------64  // Test casts to different element width.65  // -------------------------------------------------------------------------66 67  uc = (vector unsigned char)ff2;68  us = (vector unsigned short)ff2;69  ul = (vector unsigned long long)ff2;70 71  ff = (vector float)sc2;72  ff = (vector float)ss2;73  ff = (vector float)sl2;74 75  // -------------------------------------------------------------------------76  // Test unary operators.77  // -------------------------------------------------------------------------78 79  ++ff2;80  ff++;81 82  --ff2;83  ff--;84 85  ff = +ff2;86 87  ff = -ff2;88 89  ff = ~ff2; // expected-error {{invalid argument}}90 91  // -------------------------------------------------------------------------92  // Test binary arithmetic operators.93  // -------------------------------------------------------------------------94 95  ff = ff + ff2;96  ff = ff + ui2; // expected-error {{cannot convert}}97  ff = si + ff2; // expected-error {{cannot convert}}98  ff = fd + ff2; // expected-error {{cannot convert}}99  ff += ff2;100  ff += fd2; // expected-error {{cannot convert}}101  sc += ff2; // expected-error {{cannot convert}}102 103  ff = ff - ff2;104  ff = ff - ui2; // expected-error {{cannot convert}}105  ff = si - ff2; // expected-error {{cannot convert}}106  ff = fd - ff2; // expected-error {{cannot convert}}107  ff -= ff2;108  ff -= fd2; // expected-error {{cannot convert}}109  sc -= ff2; // expected-error {{cannot convert}}110 111  ff = ff * ff2;112  ff = ff * ui2; // expected-error {{cannot convert}}113  ff = si * ff2; // expected-error {{cannot convert}}114  ff = fd * ff2; // expected-error {{cannot convert}}115  ff *= ff2;116  ff *= fd2; // expected-error {{cannot convert}}117  sc *= ff2; // expected-error {{cannot convert}}118 119  ff = ff / ff2;120  ff = ff / ui2; // expected-error {{cannot convert}}121  ff = si / ff2; // expected-error {{cannot convert}}122  ff = fd / ff2; // expected-error {{cannot convert}}123  ff /= ff2;124  ff /= fd2; // expected-error {{cannot convert}}125  sc /= ff2; // expected-error {{cannot convert}}126 127  ff = ff % ff2; // expected-error {{invalid operands}}128  ff = ff % ui2; // expected-error {{invalid operands}}129  ff = si % ff2; // expected-error {{invalid operands}}130  ff = fd % ff2; // expected-error {{invalid operands}}131  ff %= ff2; // expected-error {{invalid operands}}132  ff %= fd2; // expected-error {{invalid operands}}133  sc %= ff2; // expected-error {{invalid operands}}134 135  // -------------------------------------------------------------------------136  // Test bitwise binary operators.137  // -------------------------------------------------------------------------138 139  ff = ff & ff2; // expected-error {{invalid operands}}140  ff = bi & ff2; // expected-error {{invalid operands}}141  ff = fd & ff2; // expected-error {{invalid operands}}142  ff = ff & bi2; // expected-error {{invalid operands}}143  ff = ff & si2; // expected-error {{invalid operands}}144  ff = ff & ui2; // expected-error {{invalid operands}}145  sc &= ff2; // expected-error {{invalid operands}}146  ff &= bc2; // expected-error {{invalid operands}}147  ff &= fd2; // expected-error {{invalid operands}}148 149  ff = ff | ff2; // expected-error {{invalid operands}}150  ff = bi | ff2; // expected-error {{invalid operands}}151  ff = fd | ff2; // expected-error {{invalid operands}}152  ff = ff | bi2; // expected-error {{invalid operands}}153  ff = ff | si2; // expected-error {{invalid operands}}154  ff = ff | ui2; // expected-error {{invalid operands}}155  sc |= ff2; // expected-error {{invalid operands}}156  ff |= bc2; // expected-error {{invalid operands}}157  ff |= fd2; // expected-error {{invalid operands}}158 159  ff = ff ^ ff2; // expected-error {{invalid operands}}160  ff = bi ^ ff2; // expected-error {{invalid operands}}161  ff = fd ^ ff2; // expected-error {{invalid operands}}162  ff = ff ^ bi2; // expected-error {{invalid operands}}163  ff = ff ^ si2; // expected-error {{invalid operands}}164  ff = ff ^ ui2; // expected-error {{invalid operands}}165  sc ^= ff2; // expected-error {{invalid operands}}166  ff ^= bc2; // expected-error {{invalid operands}}167  ff ^= fd2; // expected-error {{invalid operands}}168 169  // -------------------------------------------------------------------------170  // Test shift operators.171  // -------------------------------------------------------------------------172 173  ff = ff << ff2; // expected-error {{integer is required}}174  ff = ff << fd2; // expected-error {{integer is required}}175  ff = ff << ui2; // expected-error {{integer is required}}176  ff = sl << ff2; // expected-error {{integer is required}}177  sc <<= ff2; // expected-error {{integer is required}}178  ff <<= ff2; // expected-error {{integer is required}}179  fd <<= ff2; // expected-error {{integer is required}}180 181  ff = ff >> ff2; // expected-error {{integer is required}}182  ff = ff >> fd2; // expected-error {{integer is required}}183  ff = ff >> ui2; // expected-error {{integer is required}}184  ff = sl >> ff2; // expected-error {{integer is required}}185  sc >>= ff2; // expected-error {{integer is required}}186  ff >>= ff2; // expected-error {{integer is required}}187  fd >>= ff2; // expected-error {{integer is required}}188 189  // -------------------------------------------------------------------------190  // Test comparison operators.191  // -------------------------------------------------------------------------192 193  (void)(ff == ff2);194  (void)(ff == fd2); // expected-error {{cannot convert}}195  (void)(ff == ui2); // expected-error {{cannot convert}}196  (void)(ui == ff2); // expected-error {{cannot convert}}197 198  (void)(ff != ff2);199  (void)(ff != fd2); // expected-error {{cannot convert}}200  (void)(ff != ui2); // expected-error {{cannot convert}}201  (void)(ui != ff2); // expected-error {{cannot convert}}202 203  (void)(ff <= ff2);204  (void)(ff <= fd2); // expected-error {{cannot convert}}205  (void)(ff <= ui2); // expected-error {{cannot convert}}206  (void)(ui <= ff2); // expected-error {{cannot convert}}207 208  (void)(ff >= ff2);209  (void)(ff >= fd2); // expected-error {{cannot convert}}210  (void)(ff >= ui2); // expected-error {{cannot convert}}211  (void)(ui >= ff2); // expected-error {{cannot convert}}212 213  (void)(ff < ff2);214  (void)(ff < fd2); // expected-error {{cannot convert}}215  (void)(ff < ui2); // expected-error {{cannot convert}}216  (void)(ui < ff2); // expected-error {{cannot convert}}217 218  (void)(ff > ff2);219  (void)(ff > fd2); // expected-error {{cannot convert}}220  (void)(ff > ui2); // expected-error {{cannot convert}}221  (void)(ui > ff2); // expected-error {{cannot convert}}222}223