1 ; Tests malformed insertelement and extractelement vector instructions.
3 ; RUN: %if --need=allow_dump --command \
4 ; RUN: %p2i --expect-fail -i %s --allow-pnacl-reader-error-recovery \
5 ; RUN: --filetype=obj -o /dev/null --args -notranslate \
6 ; RUN: | %if --need=allow_dump --command FileCheck %s
8 ; RUN: %if --need=no_dump --command \
9 ; RUN: %p2i --expect-fail -i %s --allow-pnacl-reader-error-recovery \
10 ; RUN: --filetype=obj -o /dev/null --args -notranslate \
11 ; RUN: | %if --need=no_dump --command FileCheck %s --check-prefix=MIN
13 define void @ExtractV4xi1(<4 x i1> %v, i32 %i) {
14 %e0 = extractelement <4 x i1> %v, i32 %i
15 ; CHECK: Error{{.*}} not {{.*}} constant
16 ; MIN: Error{{.*}} Invalid function record: <6 4 3>
17 %e1 = extractelement <4 x i1> %v, i32 4
18 ; CHECK: Error{{.*}} not in range
19 ; MIN: Error{{.*}} Invalid function record: <6 5 3>
20 %e2 = extractelement <4 x i1> %v, i32 9
21 ; CHECK: Error{{.*}} not in range
22 ; MIN: Error{{.*}} Invalid function record: <6 6 3>
26 define void @ExtractV8xi1(<8 x i1> %v, i32 %i) {
27 %e0 = extractelement <8 x i1> %v, i32 %i
28 ; CHECK: Error{{.*}} not {{.*}} constant
29 ; MIN: Error{{.*}} Invalid function record: <6 4 3>
30 %e1 = extractelement <8 x i1> %v, i32 8;
31 ; CHECK: Error{{.*}} not in range
32 ; MIN: Error{{.*}} Invalid function record: <6 5 3>
33 %e2 = extractelement <8 x i1> %v, i32 9;
34 ; CHECK: Error{{.*}} not in range
35 ; MIN: Error{{.*}} Invalid function record: <6 6 3>
39 define void @ExtractV16xi1(<16 x i1> %v, i32 %i) {
40 %e0 = extractelement <16 x i1> %v, i32 %i
41 ; CHECK: Error{{.*}} not {{.*}} constant
42 ; MIN: Error{{.*}} Invalid function record: <6 4 3>
43 %e1 = extractelement <16 x i1> %v, i32 16
44 ; CHECK: Error{{.*}} not in range
45 ; MIN: Error{{.*}} Invalid function record: <6 5 3>
46 %e2 = extractelement <16 x i1> %v, i32 24
47 ; CHECK: Error{{.*}} not in range
48 ; MIN: Error{{.*}} Invalid function record: <6 6 3>
52 define void @ExtractV16xi8(<16 x i8> %v, i32 %i) {
53 %e0 = extractelement <16 x i8> %v, i32 %i
54 ; CHECK: Error{{.*}} not {{.*}} constant
55 ; MIN: Error{{.*}} Invalid function record: <6 4 3>
56 %e1 = extractelement <16 x i8> %v, i32 16
57 ; CHECK: Error{{.*}} not in range
58 ; MIN: Error{{.*}} Invalid function record: <6 5 3>
59 %e2 = extractelement <16 x i8> %v, i32 71
60 ; CHECK: Error{{.*}} not in range
61 ; MIN: Error{{.*}} Invalid function record: <6 6 3>
65 define void @ExtractV8xi16(<8 x i16> %v, i32 %i) {
66 %e0 = extractelement <8 x i16> %v, i32 %i
67 ; CHECK: Error{{.*}} not {{.*}} constant
68 ; MIN: Error{{.*}} Invalid function record: <6 4 3>
69 %e1 = extractelement <8 x i16> %v, i32 8
70 ; CHECK: Error{{.*}} not in range
71 ; MIN: Error{{.*}} Invalid function record: <6 5 3>
72 %e2 = extractelement <8 x i16> %v, i32 15
73 ; CHECK: Error{{.*}} not in range
74 ; MIN: Error{{.*}} Invalid function record: <6 6 3>
78 define i32 @ExtractV4xi32(<4 x i32> %v, i32 %i) {
79 %e0 = extractelement <4 x i32> %v, i32 %i
80 ; CHECK: Error{{.*}} not {{.*}} constant
81 ; MIN: Error{{.*}} Invalid function record: <6 4 3>
82 %e1 = extractelement <4 x i32> %v, i32 4
83 ; CHECK: Error{{.*}} not in range
84 ; MIN: Error{{.*}} Invalid function record: <6 5 3>
85 %e2 = extractelement <4 x i32> %v, i32 17
86 ; CHECK: Error{{.*}} not in range
87 ; MIN: Error{{.*}} Invalid function record: <6 6 3>
91 define float @ExtractV4xfloat(<4 x float> %v, i32 %i) {
92 %e0 = extractelement <4 x float> %v, i32 %i
93 ; CHECK: Error{{.*}} not {{.*}} constant
94 ; MIN: Error{{.*}} Invalid function record: <6 3 2>
95 %e1 = extractelement <4 x float> %v, i32 4
96 ; CHECK: Error{{.*}} not in range
97 ; MIN: Error{{.*}} Invalid function record: <6 4 2>
98 %e2 = extractelement <4 x float> %v, i32 4
99 ; CHECK: Error{{.*}} not in range
100 ; MIN: Error{{.*}} Invalid function record: <6 5 3>
104 define <4 x i1> @InsertV4xi1(<4 x i1> %v, i32 %i) {
105 %r0 = insertelement <4 x i1> %v, i1 1, i32 %i
106 ; CHECK: Error{{.*}} not {{.*}} constant
107 ; MIN: Error{{.*}} Invalid function record: <7 5 1 4>
108 %r1 = insertelement <4 x i1> %v, i1 1, i32 4
109 ; CHECK: Error{{.*}} not in range
110 ; MIN: Error{{.*}} Invalid function record: <7 6 2 4>
111 %r2 = insertelement <4 x i1> %v, i1 1, i32 7
112 ; CHECK: Error{{.*}} not in range
113 ; MIN: Error{{.*}} Invalid function record: <7 7 3 4>
117 define <8 x i1> @InsertV8xi1(<8 x i1> %v, i32 %i) {
118 %r0 = insertelement <8 x i1> %v, i1 0, i32 %i
119 ; CHECK: Error{{.*}} not {{.*}} constant
120 ; MIN: Error{{.*}} Invalid function record: <7 5 1 4>
121 %r1 = insertelement <8 x i1> %v, i1 0, i32 8
122 ; CHECK: Error{{.*}} not in range
123 ; MIN: Error{{.*}} Invalid function record: <7 6 2 4>
124 %r2 = insertelement <8 x i1> %v, i1 0, i32 88
125 ; CHECK: Error{{.*}} not in range
126 ; MIN: Error{{.*}} Invalid function record: <7 7 3 4>
130 define <16 x i1> @InsertV16xi1(<16 x i1> %v, i32 %i) {
131 %r = insertelement <16 x i1> %v, i1 1, i32 %i
132 ; CHECK: Error{{.*}} not {{.*}} constant
133 ; MIN: Error{{.*}} Invalid function record: <7 5 1 4>
135 %r1 = insertelement <16 x i1> %v, i1 1, i32 16
136 ; CHECK: Error{{.*}} not in range
137 ; MIN: Error{{.*}} Invalid function record: <7 6 2 4>
138 %r2 = insertelement <16 x i1> %v, i1 1, i32 31
139 ; CHECK: Error{{.*}} not in range
140 ; MIN: Error{{.*}} Invalid function record: <7 7 3 4>
144 define <16 x i8> @InsertV16xi8(<16 x i8> %v, i32 %i) {
145 %r0 = insertelement <16 x i8> %v, i8 34, i32 %i
146 ; CHECK: Error{{.*}} not {{.*}} constant
147 ; MIN: Error{{.*}} Invalid function record: <7 5 1 4>
148 %r1 = insertelement <16 x i8> %v, i8 34, i32 16
149 ; CHECK: Error{{.*}} not in range
150 ; MIN: Error{{.*}} Invalid function record: <7 6 2 4>
151 %r2 = insertelement <16 x i8> %v, i8 34, i32 19
152 ; CHECK: Error{{.*}} not in range
153 ; MIN: Error{{.*}} Invalid function record: <7 7 3 4>
157 define <8 x i16> @InsertV8xi16(<8 x i16> %v, i32 %i) {
158 %r0 = insertelement <8 x i16> %v, i16 289, i32 %i
159 ; CHECK: Error{{.*}} not {{.*}} constant
160 ; MIN: Error{{.*}} Invalid function record: <7 5 1 4>
161 %r1 = insertelement <8 x i16> %v, i16 289, i32 8
162 ; CHECK: Error{{.*}} not in range
163 ; MIN: Error{{.*}} Invalid function record: <7 6 2 4>
164 %r2 = insertelement <8 x i16> %v, i16 289, i32 19
165 ; CHECK: Error{{.*}} not in range
166 ; MIN: Error{{.*}} Invalid function record: <7 7 3 4>
170 define <4 x i32> @InsertV4xi32(<4 x i32> %v, i32 %i) {
171 %r0 = insertelement <4 x i32> %v, i32 54545454, i32 %i
172 ; CHECK: Error{{.*}} not {{.*}} constant
173 ; MIN: Error{{.*}} Invalid function record: <7 5 3 4>
174 %r1 = insertelement <4 x i32> %v, i32 54545454, i32 4
175 ; CHECK: Error{{.*}} not in range
176 ; MIN: Error{{.*}} Invalid function record: <7 6 4 3>
177 %r2 = insertelement <4 x i32> %v, i32 54545454, i32 9
178 ; CHECK: Error{{.*}} not in range
179 ; MIN: Error{{.*}} Invalid function record: <7 7 5 3>
183 define <4 x float> @InsertV4xfloat(<4 x float> %v, i32 %i) {
184 %r0 = insertelement <4 x float> %v, float 3.0, i32 %i
185 ; CHECK: Error{{.*}} not {{.*}} constant
186 ; MIN: Error{{.*}} Invalid function record: <7 5 1 4>
187 %r1 = insertelement <4 x float> %v, float 3.0, i32 4
188 ; CHECK: Error{{.*}} not in range
189 ; MIN: Error{{.*}} Invalid function record: <7 6 2 4>
190 %r2 = insertelement <4 x float> %v, float 3.0, i32 44
191 ; CHECK: Error{{.*}} not in range
192 ; MIN: Error{{.*}} Invalid function record: <7 7 3 4>