2017-04-16 16:02:28 +00:00
// RUN: %clang_cc1 -triple=powerpc-apple-darwin8 -target-feature +altivec -fsyntax-only -verify %s
// RUN: %clang_cc1 -triple=powerpc64-unknown-linux-gnu -target-feature +altivec -fsyntax-only -verify %s
// RUN: %clang_cc1 -triple=powerpc64le-unknown-linux-gnu -target-feature +altivec -fsyntax-only -verify %s
2010-02-16 09:31:36 +00:00
__vector char vv_c ;
__vector signed char vv_sc ;
__vector unsigned char vv_uc ;
__vector short vv_s ;
__vector signed short vv_ss ;
__vector unsigned short vv_us ;
__vector short int vv_si ;
__vector signed short int vv_ssi ;
__vector unsigned short int vv_usi ;
__vector int vv_i ;
__vector signed int vv_sint ;
__vector unsigned int vv_ui ;
__vector float vv_f ;
2010-07-13 17:21:42 +00:00
__vector bool char vv_bc ;
__vector bool short vv_bs ;
__vector bool int vv_bi ;
2015-01-18 16:23:48 +00:00
__vector __bool char vv___bc ;
__vector __bool short vv___bs ;
2015-05-27 18:47:56 +00:00
__vector __bool int vv___bi ;
2010-02-16 09:31:36 +00:00
__vector __pixel vv_p ;
__vector pixel vv__p ;
__vector int vf__r ( ) ;
void vf__a ( __vector int a ) ;
void vf__a2 ( int b , __vector int a ) ;
vector char v_c ;
vector signed char v_sc ;
vector unsigned char v_uc ;
vector short v_s ;
vector signed short v_ss ;
vector unsigned short v_us ;
vector short int v_si ;
vector signed short int v_ssi ;
vector unsigned short int v_usi ;
vector int v_i ;
vector signed int v_sint ;
vector unsigned int v_ui ;
vector float v_f ;
2010-07-13 17:21:42 +00:00
vector bool char v_bc ;
vector bool short v_bs ;
vector bool int v_bi ;
2015-01-18 16:23:48 +00:00
vector __bool char v___bc ;
vector __bool short v___bs ;
vector __bool int v___bi ;
2010-02-16 09:31:36 +00:00
vector __pixel v_p ;
vector pixel v__p ;
vector int f__r ( ) ;
void f_a ( vector int a ) ;
void f_a2 ( int b , vector int a ) ;
2010-05-04 16:12:48 +00:00
vector int v = ( vector int ) ( - 1 ) ;
2010-02-16 09:31:36 +00:00
// These should have warnings.
2010-03-10 17:45:58 +00:00
__vector long vv_l ; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
__vector signed long vv_sl ; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
__vector unsigned long vv_ul ; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
__vector long int vv_li ; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
__vector signed long int vv_sli ; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
__vector unsigned long int vv_uli ; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
vector long v_l ; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
vector signed long v_sl ; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
vector unsigned long v_ul ; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
vector long int v_li ; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
vector signed long int v_sli ; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
vector unsigned long int v_uli ; // expected-warning {{Use of 'long' with '__vector' is deprecated}}
2015-01-18 16:23:48 +00:00
__vector long double vv_ld ; // expected-error {{cannot use 'long double' with '__vector'}}
vector long double v_ld ; // expected-error {{cannot use 'long double' with '__vector'}}
2010-07-13 17:21:42 +00:00
vector bool v_b ; // expected-warning {{type specifier missing, defaults to 'int'}}
2015-01-18 16:23:48 +00:00
vector __bool v___b ; // expected-warning {{type specifier missing, defaults to 'int'}}
2010-02-16 09:31:36 +00:00
// These should have errors.
2015-05-27 18:47:56 +00:00
__vector double vv_d1 ; // expected-error {{use of 'double' with '__vector' requires VSX support to be enabled (available on POWER7 or later)}}
vector double v_d2 ; // expected-error {{use of 'double' with '__vector' requires VSX support to be enabled (available on POWER7 or later)}}
__vector bool long long v_bll1 ; // expected-error {{use of 'long long' with '__vector bool' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled}}
__vector __bool long long v_bll2 ; // expected-error {{use of 'long long' with '__vector bool' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled}}
vector bool long long v_bll3 ; // expected-error {{use of 'long long' with '__vector bool' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled}}
vector __bool long long v_bll4 ; // expected-error {{use of 'long long' with '__vector bool' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled}}
2015-01-18 16:23:48 +00:00
__vector long double vv_ld3 ; // expected-error {{cannot use 'long double' with '__vector'}}
vector long double v_ld4 ; // expected-error {{cannot use 'long double' with '__vector'}}
2010-07-13 17:21:42 +00:00
vector bool float v_bf ; // expected-error {{cannot use 'float' with '__vector bool'}}
vector bool double v_bd ; // expected-error {{cannot use 'double' with '__vector bool'}}
vector bool pixel v_bp ; // expected-error {{cannot use '__pixel' with '__vector bool'}}
vector bool signed char v_bsc ; // expected-error {{cannot use 'signed' with '__vector bool'}}
vector bool unsigned int v_bsc2 ; // expected-error {{cannot use 'unsigned' with '__vector bool'}}
vector bool long v_bl ; // expected-error {{cannot use 'long' with '__vector bool'}}
2015-01-18 16:23:48 +00:00
vector __bool float v___bf ; // expected-error {{cannot use 'float' with '__vector bool'}}
vector __bool double v___bd ; // expected-error {{cannot use 'double' with '__vector bool'}}
vector __bool pixel v___bp ; // expected-error {{cannot use '__pixel' with '__vector bool'}}
vector __bool signed char v___bsc ; // expected-error {{cannot use 'signed' with '__vector bool'}}
vector __bool unsigned int v___bsc2 ; // expected-error {{cannot use 'unsigned' with '__vector bool'}}
vector __bool long v___bl ; // expected-error {{cannot use 'long' with '__vector bool'}}
// vector long is deprecated, but vector long long is not.
vector long long v_ll ;
vector signed long long v_sll ;
vector unsigned long long v_ull ;
2010-02-16 09:31:36 +00:00
2012-08-15 20:02:54 +00:00
typedef char i8 ;
typedef short i16 ;
typedef int i32 ;
struct S {
// i8, i16, i32 here are field names, not type names.
vector bool i8 ; // expected-error {{requires a specifier or qualifier}}
vector pixel i16 ;
vector long i32 ; // expected-warning {{deprecated}}
} ;
2010-02-16 09:31:36 +00:00
void f ( ) {
__vector unsigned int v = { 0 , 0 , 0 , 0 } ;
__vector int v__cast = ( __vector int ) v ;
__vector int v_cast = ( vector int ) v ;
__vector char vb_cast = ( vector char ) v ;
// Check some casting between gcc and altivec vectors.
# define gccvector __attribute__((vector_size(16)))
gccvector unsigned int gccv = { 0 , 0 , 0 , 0 } ;
gccvector unsigned int gccv1 = gccv ;
gccvector int gccv2 = ( gccvector int ) gccv ;
gccvector unsigned int gccv3 = v ;
__vector unsigned int av = gccv ;
__vector int avi = ( __vector int ) gccv ;
gccvector unsigned int gv = v ;
gccvector int gvi = ( gccvector int ) v ;
__attribute__ ( ( vector_size ( 8 ) ) ) unsigned int gv8 ;
2014-11-24 09:15:30 +00:00
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)}}
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)}}
2010-02-16 09:31:36 +00:00
v = gccv ;
__vector unsigned int tv = gccv ;
gccv = v ;
gccvector unsigned int tgv = v ;
2011-02-20 13:06:31 +00:00
int res_i ;
// bug 7553 - Problem with '==' and vectors
res_i = ( vv_sc = = vv_sc ) ;
res_i = ( vv_uc ! = vv_uc ) ;
res_i = ( vv_s > vv_s ) ;
res_i = ( vv_us > = vv_us ) ;
res_i = ( vv_i < vv_i ) ;
res_i = ( vv_ui < = vv_ui ) ;
res_i = ( vv_f < = vv_f ) ;
2010-02-16 09:31:36 +00:00
}
2010-07-13 17:21:42 +00:00
// bug 6895 - Vectorl literal casting confusion.
2011-05-02 19:39:53 +00:00
vector char v1 = ( vector char ) ( ( vector int ) ( 1 , 2 , 3 , 4 ) ) ;
vector char v2 = ( vector char ) ( ( vector float ) ( 1.0f , 2.0f , 3.0f , 4.0f ) ) ;
vector char v3 = ( vector char ) ( ( vector int ) ( ' a ' , ' b ' , ' c ' , ' d ' ) ) ;
vector int v4 = ( vector int ) ( 1 , 2 , 3 , 4 ) ;
2010-07-13 17:21:42 +00:00
vector float v5 = ( vector float ) ( 1.0f , 2.0f , 3.0f , 4.0f ) ;
vector char v6 = ( vector char ) ( ( vector int ) ( 1 + 2 , - 2 , ( int ) ( 2.0 * 3 ) , - ( 5 - 3 ) ) ) ;