OSDN Git Service

Subzero: Replace global pointers to allocation functions
[android-x86/external-swiftshader.git] / tests_lit / parse_errs / insertextract-err.ll
1 ; Tests malformed insertelement and extractelement vector instructions.
2
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
7
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
12
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>
23   ret void
24 }
25
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>
36   ret void
37 }
38
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>
49   ret void
50 }
51
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>
62   ret void
63 }
64
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>
75   ret void
76 }
77
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>
88   ret i32 %e0
89 }
90
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>
101   ret float %e2
102 }
103
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>
114   ret <4 x i1> %r2
115 }
116
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>
127   ret <8 x i1> %r2
128 }
129
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>
134   ret <16 x i1> %r
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>
141   ret <16 x i1> %r2
142 }
143
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>
154   ret <16 x i8> %r0
155 }
156
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>
167   ret <8 x i16> %r1
168 }
169
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>
180   ret <4 x i32> %r2
181 }
182
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>
193   ret <4 x float> %r2
194 }