You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[PowerPC] Emit error for Altivec vector initializations when -faltivec-src-compat=gcc is specified
Under the -faltivec-src-compat=gcc option, AltiVec vector initialization should
be treated as if they were compiled with gcc - which is, to emit an error when
the vectors are initialized in the parenthesized or non-parenthesized manner.
This patch implements this behaviour.
Differential Revision: https://reviews.llvm.org/D106410
// MIXED-ERR: error: invalid conversion between vector type '__vector __bool unsigned char'
53
+
// GCC-ERR: error: invalid conversion between vector type '__vector __bool unsigned char' (vector of 16 'unsigned char' values) and integer type 'int' of different size
// MIXED-ERR: error: invalid conversion between vector type '__vector __bool unsigned char'
58
+
// GCC-ERR: error: invalid conversion between vector type '__vector __bool unsigned char' (vector of 16 'unsigned char' values) and integer type 'char' of different size
47
59
// XL: [[INS_ELT:%.*]] = insertelement <16 x i8>
48
60
// XL: [[SHUFF:%.*]] = shufflevector <16 x i8> [[INS_ELT]], <16 x i8> poison, <16 x i32> zeroinitializer
49
61
// XL: store <16 x i8> [[SHUFF]]
50
62
51
63
// vector bool short initialization
52
64
vbi16_1= (vectorbool short)5;
53
65
// MIXED-ERR: error: invalid conversion between vector type '__vector __bool unsigned short'
66
+
// GCC-ERR: error: invalid conversion between vector type '__vector __bool unsigned short' (vector of 8 'unsigned short' values) and integer type 'int' of different size
// MIXED-ERR: error: invalid conversion between vector type '__vector __bool unsigned short'
71
+
// GCC-ERR: error: invalid conversion between vector type '__vector __bool unsigned short' (vector of 8 'unsigned short' values) and integer type 'short' of different size
58
72
// XL: [[INS_ELT:%.*]] = insertelement <8 x i16>
59
73
// XL: [[SHUFF:%.*]] = shufflevector <8 x i16> [[INS_ELT]], <8 x i16> poison, <8 x i32> zeroinitializer
60
74
// XL: store <8 x i16> [[SHUFF]]
61
75
62
76
// vector bool int initialization
63
77
vbi32_1= (vectorboolint)9;
64
78
// MIXED-ERR: error: invalid conversion between vector type '__vector __bool unsigned int'
79
+
// GCC-ERR: error: invalid conversion between vector type '__vector __bool unsigned int' (vector of 4 'unsigned int' values) and integer type 'int' of different size
65
80
// XL: <i32 9, i32 9, i32 9, i32 9>
66
81
intsi32=99;
67
82
vbi32_2= (vectorboolint)si32;
68
83
// MIXED-ERR: error: invalid conversion between vector type '__vector __bool unsigned int'
84
+
// GCC-ERR: error: invalid conversion between vector type '__vector __bool unsigned int' (vector of 4 'unsigned int' values) and integer type 'int' of different size
69
85
// XL: [[INS_ELT:%.*]] = insertelement <4 x i32>
70
86
// XL: [[SHUFF:%.*]] = shufflevector <4 x i32> [[INS_ELT]], <4 x i32> poison, <4 x i32> zeroinitializer
71
87
// XL: store <4 x i32> [[SHUFF]]
72
88
73
89
// vector bool long long initialization
74
90
vbi64_1= (vectorbool long long)13;
75
91
// MIXED-ERR: error: invalid conversion between vector type '__vector __bool unsigned long long'
92
+
// GCC-ERR: error: invalid conversion between vector type '__vector __bool unsigned long long' (vector of 2 'unsigned long long' values) and integer type 'int' of different size
76
93
// XL: <i64 13, i64 13>
77
94
long longsi64=1313;
78
95
vbi64_2= (vectorbool long long)si64;
79
96
// MIXED-ERR: error: invalid conversion between vector type '__vector __bool unsigned long long'
97
+
// GCC-ERR: error: invalid conversion between vector type '__vector __bool unsigned long long' (vector of 2 'unsigned long long' values) and integer type 'long long' of different size
80
98
// XL: [[INS_ELT:%.*]] = insertelement <2 x i64>
81
99
// XL: [[SHUFF:%.*]] = shufflevector <2 x i64> [[INS_ELT]], <2 x i64> poison, <2 x i32> zeroinitializer
82
100
// XL: store <2 x i64> [[SHUFF]]
83
101
84
102
// vector pixel initialization
85
103
p1= (vectorpixel)1;
86
104
// MIXED-ERR: error: invalid conversion between vector type '__vector __pixel '
105
+
// GCC-ERR: error: invalid conversion between vector type '__vector __pixel ' (vector of 8 'unsigned short' values) and integer type 'int' of different size
// GCC: error: invalid conversion between vector type '__vector __bool unsigned char' (vector of 16 'unsigned char' values) and integer type 'unsigned char' of different size
44
55
charc='c';
45
56
vbi8_2= (vectorboolchar)(c);
46
57
// MIXED: [[INS:%.*]] = insertelement <16 x i8>
47
58
// MIXED: store <16 x i8> [[INS:%.*]]
48
59
// XL: [[INS_ELT:%.*]] = insertelement <16 x i8>
49
60
// XL: [[SHUFF:%.*]] = shufflevector <16 x i8> [[INS_ELT]], <16 x i8> poison, <16 x i32> zeroinitializer
50
61
// XL: store <16 x i8> [[SHUFF]]
62
+
// GCC: error: invalid conversion between vector type '__vector __bool unsigned char' (vector of 16 'unsigned char' values) and integer type 'unsigned char' of different size
// GCC: error: invalid conversion between vector type '__vector __bool unsigned short' (vector of 8 'unsigned short' values) and integer type 'unsigned short' of different size
56
69
shortsi16=55;
57
70
vbi16_2= (vectorbool short)(si16);
58
71
// MIXED: [[INS:%.*]] = insertelement <8 x i16>
59
72
// MIXED: store <8 x i16> [[INS:%.*]]
60
73
// XL: [[INS_ELT:%.*]] = insertelement <8 x i16>
61
74
// XL: [[SHUFF:%.*]] = shufflevector <8 x i16> [[INS_ELT]], <8 x i16> poison, <8 x i32> zeroinitializer
62
75
// XL: store <8 x i16> [[SHUFF]]
76
+
// GCC: error: invalid conversion between vector type '__vector __bool unsigned short' (vector of 8 'unsigned short' values) and integer type 'unsigned short' of different size
63
77
64
78
// vector bool int initialization
65
79
vbi32_1= (vectorboolint)(9);
66
80
// MIXED: <i32 9, i32 0, i32 0, i32 0>
67
81
// XL: <i32 9, i32 9, i32 9, i32 9>
82
+
// GCC: error: invalid conversion between vector type '__vector __bool unsigned int' (vector of 4 'unsigned int' values) and integer type 'unsigned int' of different size
68
83
intsi32=99;
69
84
vbi32_2= (vectorboolint)(si32);
70
85
// MIXED: [[INS:%.*]] = insertelement <4 x i32>
71
86
// MIXED: store <4 x i32> [[INS:%.*]]
72
87
// XL: [[INS_ELT:%.*]] = insertelement <4 x i32>
73
88
// XL: [[SHUFF:%.*]] = shufflevector <4 x i32> [[INS_ELT]], <4 x i32> poison, <4 x i32> zeroinitializer
74
89
// XL: store <4 x i32> [[SHUFF]]
90
+
// GCC: error: invalid conversion between vector type '__vector __bool unsigned int' (vector of 4 'unsigned int' values) and integer type 'unsigned int' of different size
75
91
76
92
// vector bool long long initialization
77
93
vbi64_1= (vectorbool long long)(13);
78
94
// MIXED: <i64 13, i64 0>
79
95
// XL: <i64 13, i64 13>
96
+
// GCC: error: invalid conversion between vector type '__vector __bool unsigned long long' (vector of 2 'unsigned long long' values) and integer type 'unsigned long long' of different size
80
97
long longsi64=1313;
81
98
vbi64_2= (vectorbool long long)(si64);
82
99
// MIXED: [[INS:%.*]] = insertelement <2 x i64>
83
100
// MIXED: store <2 x i64> [[INS:%.*]]
84
101
// XL: [[INS_ELT:%.*]] = insertelement <2 x i64>
85
102
// XL: [[SHUFF:%.*]] = shufflevector <2 x i64> [[INS_ELT]], <2 x i64> poison, <2 x i32> zeroinitializer
86
103
// XL: store <2 x i64> [[SHUFF]]
104
+
// GCC: error: invalid conversion between vector type '__vector __bool unsigned long long' (vector of 2 'unsigned long long' values) and integer type 'unsigned long long' of different size
// GCC: error: invalid conversion between vector type '__vector __pixel ' (vector of 8 'unsigned short' values) and integer type 'unsigned short' of different size
0 commit comments