brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.3 KiB · 9291b9b Raw
197 lines · c
1// RUN: %clang_cc1 -triple=powerpc64-unknown-linux-gnu -target-feature +altivec -target-feature +vsx -fsyntax-only -verify=expected,nonaix %s2// RUN: %clang_cc1 -triple=powerpc64le-unknown-linux-gnu -target-feature +altivec -target-feature -vsx -fsyntax-only -verify=expected,novsx %s3// RUN: %clang_cc1 -triple=powerpc-ibm-aix -target-feature +altivec -fsyntax-only -verify=expected,aix %s4// fRUN: %clang_cc1 -triple=powerpc64-ibm-aix -target-feature +altivec -target-feature -vsx -fsyntax-only -verify=expected,aix %s5 6__vector char vv_c;7__vector signed char vv_sc;8__vector unsigned char vv_uc;9__vector short vv_s;10__vector signed  short vv_ss;11__vector unsigned  short vv_us;12__vector short int vv_si;13__vector signed short int vv_ssi;14__vector unsigned short int vv_usi;15__vector int vv_i;16__vector signed int vv_sint;17__vector unsigned int vv_ui;18__vector float vv_f;19__vector bool char vv_bc;20__vector bool short vv_bs;21__vector bool int vv_bi;22__vector __bool char vv___bc;23__vector __bool short vv___bs;24__vector __bool int vv___bi;25__vector __pixel vv_p;26__vector pixel vv__p;27__vector int vf__r(void);28void vf__a(__vector int a);29void vf__a2(int b, __vector int a);30 31vector char v_c;32vector signed char v_sc;33vector unsigned char v_uc;34vector short v_s;35vector signed  short v_ss;36vector unsigned  short v_us;37vector short int v_si;38vector signed short int v_ssi;39vector unsigned short int v_usi;40vector int v_i;41vector signed int v_sint;42vector unsigned int v_ui;43vector float v_f;44vector bool char v_bc;45vector bool short v_bs;46vector bool int v_bi;47vector __bool char v___bc;48vector __bool short v___bs;49vector __bool int v___bi;50vector __pixel v_p;51vector pixel v__p;52vector int f__r(void);53void f_a(vector int a);54void f_a2(int b, vector int a);55 56vector int v = (vector int)(-1);57 58// These should have errors on AIX and warnings otherwise.59__vector long vv_l;                 // nonaix-warning {{use of 'long' with '__vector' is deprecated}}60                                    // aix-error@-1 {{cannot use 'long' with '__vector'}}61                                    // novsx-error@-2 {{cannot use 'long' with '__vector'}}62__vector signed long vv_sl;         // nonaix-warning {{use of 'long' with '__vector' is deprecated}}63                                    // aix-error@-1 {{cannot use 'long' with '__vector'}}64                                    // novsx-error@-2 {{cannot use 'long' with '__vector'}}65__vector unsigned long vv_ul;       // nonaix-warning {{use of 'long' with '__vector' is deprecated}}66                                    // aix-error@-1 {{cannot use 'long' with '__vector'}}67                                    // novsx-error@-2 {{cannot use 'long' with '__vector'}}68__vector long int vv_li;            // nonaix-warning {{use of 'long' with '__vector' is deprecated}}69                                    // aix-error@-1 {{cannot use 'long' with '__vector'}}70                                    // novsx-error@-2 {{cannot use 'long' with '__vector'}}71__vector signed long int vv_sli;    // nonaix-warning {{use of 'long' with '__vector' is deprecated}}72                                    // aix-error@-1 {{cannot use 'long' with '__vector'}}73                                    // novsx-error@-2 {{cannot use 'long' with '__vector'}}74__vector unsigned long int vv_uli;  // nonaix-warning {{use of 'long' with '__vector' is deprecated}}75                                    // aix-error@-1 {{cannot use 'long' with '__vector'}}76                                    // novsx-error@-2 {{cannot use 'long' with '__vector'}}77vector long v_l;                    // nonaix-warning {{use of 'long' with '__vector' is deprecated}}78                                    // aix-error@-1 {{cannot use 'long' with '__vector'}}79                                    // novsx-error@-2 {{cannot use 'long' with '__vector'}}80vector signed long v_sl;            // nonaix-warning {{use of 'long' with '__vector' is deprecated}}81                                    // aix-error@-1 {{cannot use 'long' with '__vector'}}82                                    // novsx-error@-2 {{cannot use 'long' with '__vector'}}83vector unsigned long v_ul;          // nonaix-warning {{use of 'long' with '__vector' is deprecated}}84                                    // aix-error@-1 {{cannot use 'long' with '__vector'}}85                                    // novsx-error@-2 {{cannot use 'long' with '__vector'}}86vector long int v_li;               // nonaix-warning {{use of 'long' with '__vector' is deprecated}}87                                    // aix-error@-1 {{cannot use 'long' with '__vector'}}88                                    // novsx-error@-2 {{cannot use 'long' with '__vector'}}89vector signed long int v_sli;       // nonaix-warning {{use of 'long' with '__vector' is deprecated}}90                                    // aix-error@-1 {{cannot use 'long' with '__vector'}}91                                    // novsx-error@-2 {{cannot use 'long' with '__vector'}}92vector unsigned long int v_uli;     // nonaix-warning {{use of 'long' with '__vector' is deprecated}}93                                    // aix-error@-1 {{cannot use 'long' with '__vector'}}94                                    // novsx-error@-2 {{cannot use 'long' with '__vector'}}95 96// These should have warnings.97__vector long double  vv_ld;        // expected-error {{cannot use 'long double' with '__vector'}}98vector long double  v_ld;           // expected-error {{cannot use 'long double' with '__vector'}}99vector bool v_b;                    // expected-error {{type specifier missing, defaults to 'int'}}100vector __bool v___b;                // expected-error {{type specifier missing, defaults to 'int'}}101 102// These should have errors.103#ifndef __VSX__104__vector double vv_d1;               // expected-error {{use of 'double' with '__vector' requires VSX support to be enabled (available on POWER7 or later)}}105vector double v_d2;                  // expected-error {{use of 'double' with '__vector' requires VSX support to be enabled (available on POWER7 or later)}}106__vector bool long long v_bll1;      // expected-error {{use of 'long long' with '__vector' requires VSX support (available on POWER7 or later) to be enabled}}107__vector __bool long long v_bll2;    // expected-error {{use of 'long long' with '__vector' requires VSX support (available on POWER7 or later) to be enabled}}108vector bool long long v_bll3;        // expected-error {{use of 'long long' with '__vector' requires VSX support (available on POWER7 or later) to be enabled}}109vector __bool long long v_bll4;      // expected-error {{use of 'long long' with '__vector' requires VSX support (available on POWER7 or later) to be enabled}}110#endif111__vector long double  vv_ld3;        // expected-error {{cannot use 'long double' with '__vector'}}112vector long double  v_ld4;           // expected-error {{cannot use 'long double' with '__vector'}}113vector float _Complex v_cf;          // expected-error {{cannot use '_Complex' with '__vector'}}114vector double _Complex v_cd;         // expected-error {{cannot use '_Complex' with '__vector'}}115vector long double _Complex v_cld;   // expected-error {{cannot use '_Complex' with '__vector'}}116__vector float _Complex v_cf2;       // expected-error {{cannot use '_Complex' with '__vector'}}117__vector double _Complex v_cd2;      // expected-error {{cannot use '_Complex' with '__vector'}}118__vector long double _Complex v_cld2;// expected-error {{cannot use '_Complex' with '__vector'}}119vector bool float v_bf;              // expected-error {{cannot use 'float' with '__vector bool'}}120vector bool double v_bd;             // expected-error {{cannot use 'double' with '__vector bool'}}121vector bool pixel v_bp;              // expected-error {{cannot use '__pixel' with '__vector bool'}}122vector bool signed char v_bsc;       // expected-error {{cannot use 'signed' with '__vector bool'}}123vector bool unsigned int v_bsc2;     // expected-error {{cannot use 'unsigned' with '__vector bool'}}124vector bool long v_bl;               // expected-error {{cannot use 'long' with '__vector bool'}}125vector __bool float v___bf;          // expected-error {{cannot use 'float' with '__vector bool'}}126vector __bool double v___bd;         // expected-error {{cannot use 'double' with '__vector bool'}}127vector __bool pixel v___bp;          // expected-error {{cannot use '__pixel' with '__vector bool'}}128vector __bool signed char v___bsc;   // expected-error {{cannot use 'signed' with '__vector bool'}}129vector __bool unsigned int v___bsc2; // expected-error {{cannot use 'unsigned' with '__vector bool'}}130vector __bool long v___bl;           // expected-error {{cannot use 'long' with '__vector bool'}}131 132#ifdef __VSX__133// vector long is deprecated, but vector long long is not.134vector long long v_ll;135vector signed long long v_sll;136vector unsigned long long v_ull;137#else138// vector long long is not supported without vsx.139vector long long v_ll;              //  expected-error {{use of 'long long' with '__vector' requires VSX support (available on POWER7 or later) to be enabled}}140vector signed long long v_sll;      //  expected-error {{use of 'long long' with '__vector' requires VSX support (available on POWER7 or later) to be enabled}}141vector unsigned long long v_ull;    //  expected-error {{use of 'long long' with '__vector' requires VSX support (available on POWER7 or later) to be enabled}}142#endif143 144typedef char i8;145typedef short i16;146typedef int i32;147struct S {148  // i8, i16, i32 here are field names, not type names.149  vector bool i8;                    // expected-error {{requires a specifier or qualifier}}150  vector pixel i16;151  vector short i32;152};153 154void f(void) {155  __vector unsigned int v = {0,0,0,0};156  __vector int v__cast = (__vector int)v;157  __vector int v_cast = (vector int)v;158  __vector char vb_cast = (vector char)v;159 160  // Check some casting between gcc and altivec vectors.161  #define gccvector __attribute__((vector_size(16)))162  gccvector unsigned int gccv = {0,0,0,0};163  gccvector unsigned int gccv1 = gccv;164  gccvector int gccv2 = (gccvector int)gccv;165  gccvector unsigned int gccv3 = v;166  __vector unsigned int av = gccv;167  __vector int avi = (__vector int)gccv;168  gccvector unsigned int gv = v;169  gccvector int gvi = (gccvector int)v;170  __attribute__((vector_size(8))) unsigned int gv8;171  gv8 = gccv;     // expected-error {{assigning to '__attribute__((__vector_size__(2 * sizeof(unsigned int)))) unsigned int' (vector of 2 'unsigned int' values) from incompatible type '__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int' (vector of 4 'unsigned int' values)}}172  av = gv8;       // expected-error {{assigning to '__vector unsigned int' (vector of 4 'unsigned int' values) from incompatible type '__attribute__((__vector_size__(2 * sizeof(unsigned int)))) unsigned int' (vector of 2 'unsigned int' values)}}173 174  v = gccv;175  __vector unsigned int tv = gccv;176  gccv = v;177  gccvector unsigned int tgv = v;178 179  int res_i;180  // bug 7553 - Problem with '==' and vectors181  res_i = (vv_sc == vv_sc);182  res_i = (vv_uc != vv_uc);183  res_i = (vv_s > vv_s);184  res_i = (vv_us >= vv_us);185  res_i = (vv_i < vv_i);186  res_i = (vv_ui <= vv_ui);187  res_i = (vv_f <= vv_f);188}189 190// bug 6895 - Vectorl literal casting confusion.191vector char v1 = (vector char)((vector int)(1, 2, 3, 4));192vector char v2 = (vector char)((vector float)(1.0f, 2.0f, 3.0f, 4.0f));193vector char v3 = (vector char)((vector int)('a', 'b', 'c', 'd'));194vector int v4 = (vector int)(1, 2, 3, 4);195vector float v5 = (vector float)(1.0f, 2.0f, 3.0f, 4.0f);196vector char v6 = (vector char)((vector int)(1+2, -2, (int)(2.0 * 3), -(5-3)));197