OLD | NEW |
1 //===- subzero/crosstest/test_icmp_main.cpp - Driver for tests. -----------===// | 1 //===- subzero/crosstest/test_icmp_main.cpp - Driver for tests. -----------===// |
2 // | 2 // |
3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // Driver for cross testing the icmp bitcode instruction | 10 // Driver for cross testing the icmp bitcode instruction |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 ++TotalTests; | 74 ++TotalTests; |
75 bool ResultSz = Funcs[f].FuncSz(Value1, Value2); | 75 bool ResultSz = Funcs[f].FuncSz(Value1, Value2); |
76 bool ResultLlc = Funcs[f].FuncLlc(Value1, Value2); | 76 bool ResultLlc = Funcs[f].FuncLlc(Value1, Value2); |
77 if (ResultSz == ResultLlc) { | 77 if (ResultSz == ResultLlc) { |
78 ++Passes; | 78 ++Passes; |
79 } else { | 79 } else { |
80 ++Failures; | 80 ++Failures; |
81 std::cout << "icmp" << Funcs[f].Name | 81 std::cout << "icmp" << Funcs[f].Name |
82 << (CHAR_BIT * sizeof(TypeUnsigned)) << "(" << Value1 | 82 << (CHAR_BIT * sizeof(TypeUnsigned)) << "(" << Value1 |
83 << ", " << Value2 << "): sz=" << ResultSz | 83 << ", " << Value2 << "): sz=" << ResultSz |
84 << " llc=" << ResultLlc << std::endl; | 84 << " llc=" << ResultLlc << "\n"; |
85 } | 85 } |
86 } | 86 } |
87 } | 87 } |
88 } | 88 } |
89 } else { | 89 } else { |
90 // This is the 64-bit version. Test values are synthesized from | 90 // This is the 64-bit version. Test values are synthesized from |
91 // the 32-bit values in Values[]. | 91 // the 32-bit values in Values[]. |
92 for (size_t f = 0; f < NumFuncs; ++f) { | 92 for (size_t f = 0; f < NumFuncs; ++f) { |
93 for (size_t iLo = 0; iLo < NumValues; ++iLo) { | 93 for (size_t iLo = 0; iLo < NumValues; ++iLo) { |
94 for (size_t iHi = 0; iHi < NumValues; ++iHi) { | 94 for (size_t iHi = 0; iHi < NumValues; ++iHi) { |
95 for (size_t jLo = 0; jLo < NumValues; ++jLo) { | 95 for (size_t jLo = 0; jLo < NumValues; ++jLo) { |
96 for (size_t jHi = 0; jHi < NumValues; ++jHi) { | 96 for (size_t jHi = 0; jHi < NumValues; ++jHi) { |
97 TypeUnsigned Value1 = | 97 TypeUnsigned Value1 = |
98 (((TypeUnsigned)Values[iHi]) << 32) + Values[iLo]; | 98 (((TypeUnsigned)Values[iHi]) << 32) + Values[iLo]; |
99 TypeUnsigned Value2 = | 99 TypeUnsigned Value2 = |
100 (((TypeUnsigned)Values[jHi]) << 32) + Values[jLo]; | 100 (((TypeUnsigned)Values[jHi]) << 32) + Values[jLo]; |
101 ++TotalTests; | 101 ++TotalTests; |
102 bool ResultSz = Funcs[f].FuncSz(Value1, Value2); | 102 bool ResultSz = Funcs[f].FuncSz(Value1, Value2); |
103 bool ResultLlc = Funcs[f].FuncLlc(Value1, Value2); | 103 bool ResultLlc = Funcs[f].FuncLlc(Value1, Value2); |
104 if (ResultSz == ResultLlc) { | 104 if (ResultSz == ResultLlc) { |
105 ++Passes; | 105 ++Passes; |
106 } else { | 106 } else { |
107 ++Failures; | 107 ++Failures; |
108 std::cout << "icmp" << Funcs[f].Name | 108 std::cout << "icmp" << Funcs[f].Name |
109 << (CHAR_BIT * sizeof(TypeUnsigned)) << "(" << Value1 | 109 << (CHAR_BIT * sizeof(TypeUnsigned)) << "(" << Value1 |
110 << ", " << Value2 << "): sz=" << ResultSz | 110 << ", " << Value2 << "): sz=" << ResultSz |
111 << " llc=" << ResultLlc << std::endl; | 111 << " llc=" << ResultLlc << "\n"; |
112 } | 112 } |
113 } | 113 } |
114 } | 114 } |
115 } | 115 } |
116 } | 116 } |
117 } | 117 } |
118 } | 118 } |
119 } | 119 } |
120 | 120 |
121 const static size_t MaxTestsPerFunc = 100000; | 121 const static size_t MaxTestsPerFunc = 100000; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 if (!memcmp(&ResultSz, &ResultLlc, sizeof(ResultSz))) { | 167 if (!memcmp(&ResultSz, &ResultLlc, sizeof(ResultSz))) { |
168 ++Passes; | 168 ++Passes; |
169 } else { | 169 } else { |
170 ++Failures; | 170 ++Failures; |
171 std::cout << "test" << Funcs[f].Name | 171 std::cout << "test" << Funcs[f].Name |
172 << Vectors<TypeUnsignedLabel>::TypeName << "(" | 172 << Vectors<TypeUnsignedLabel>::TypeName << "(" |
173 << vectAsString<TypeUnsignedLabel>(Value1) << "," | 173 << vectAsString<TypeUnsignedLabel>(Value1) << "," |
174 << vectAsString<TypeUnsignedLabel>(Value2) | 174 << vectAsString<TypeUnsignedLabel>(Value2) |
175 << "): sz=" << vectAsString<TypeUnsignedLabel>(ResultSz) | 175 << "): sz=" << vectAsString<TypeUnsignedLabel>(ResultSz) |
176 << " llc=" << vectAsString<TypeUnsignedLabel>(ResultLlc) | 176 << " llc=" << vectAsString<TypeUnsignedLabel>(ResultLlc) |
177 << std::endl; | 177 << "\n"; |
178 } | 178 } |
179 } | 179 } |
180 } | 180 } |
181 } | 181 } |
182 | 182 |
183 // Return true on wraparound | 183 // Return true on wraparound |
184 template <typename T> bool incrementI1Vector(typename Vectors<T>::Ty &Vect) { | 184 template <typename T> bool incrementI1Vector(typename Vectors<T>::Ty &Vect) { |
185 size_t Pos = 0; | 185 size_t Pos = 0; |
186 const static size_t NumElements = Vectors<T>::NumElements; | 186 const static size_t NumElements = Vectors<T>::NumElements; |
187 for (Pos = 0; Pos < NumElements; ++Pos) { | 187 for (Pos = 0; Pos < NumElements; ++Pos) { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 Ty ResultLlc = Funcs[f].FuncLlc(Value1, Value2); | 227 Ty ResultLlc = Funcs[f].FuncLlc(Value1, Value2); |
228 ++TotalTests; | 228 ++TotalTests; |
229 if (!memcmp(&ResultSz, &ResultLlc, sizeof(ResultSz))) { | 229 if (!memcmp(&ResultSz, &ResultLlc, sizeof(ResultSz))) { |
230 ++Passes; | 230 ++Passes; |
231 } else { | 231 } else { |
232 ++Failures; | 232 ++Failures; |
233 std::cout << "test" << Funcs[f].Name << Vectors<T>::TypeName << "(" | 233 std::cout << "test" << Funcs[f].Name << Vectors<T>::TypeName << "(" |
234 << vectAsString<T>(Value1) << "," | 234 << vectAsString<T>(Value1) << "," |
235 << vectAsString<T>(Value2) | 235 << vectAsString<T>(Value2) |
236 << "): sz=" << vectAsString<T>(ResultSz) | 236 << "): sz=" << vectAsString<T>(ResultSz) |
237 << " llc=" << vectAsString<T>(ResultLlc) << std::endl; | 237 << " llc=" << vectAsString<T>(ResultLlc) << "\n"; |
238 } | 238 } |
239 } | 239 } |
240 } | 240 } |
241 } | 241 } |
242 } else { | 242 } else { |
243 for (size_t f = 0; f < NumFuncs; ++f) { | 243 for (size_t f = 0; f < NumFuncs; ++f) { |
244 PRNG Index; | 244 PRNG Index; |
245 for (size_t i = 0; i < MaxTestsPerFunc; ++i) { | 245 for (size_t i = 0; i < MaxTestsPerFunc; ++i) { |
246 Ty Value1, Value2; | 246 Ty Value1, Value2; |
247 // Initialize the test vectors. | 247 // Initialize the test vectors. |
248 for (size_t j = 0; j < NumElements; ++j) { | 248 for (size_t j = 0; j < NumElements; ++j) { |
249 Value1[j] = Index() % 2; | 249 Value1[j] = Index() % 2; |
250 Value2[j] = Index() % 2; | 250 Value2[j] = Index() % 2; |
251 } | 251 } |
252 // Perform the test. | 252 // Perform the test. |
253 Ty ResultSz = Funcs[f].FuncSz(Value1, Value2); | 253 Ty ResultSz = Funcs[f].FuncSz(Value1, Value2); |
254 Ty ResultLlc = Funcs[f].FuncLlc(Value1, Value2); | 254 Ty ResultLlc = Funcs[f].FuncLlc(Value1, Value2); |
255 ++TotalTests; | 255 ++TotalTests; |
256 if (!memcmp(&ResultSz, &ResultLlc, sizeof(ResultSz))) { | 256 if (!memcmp(&ResultSz, &ResultLlc, sizeof(ResultSz))) { |
257 ++Passes; | 257 ++Passes; |
258 } else { | 258 } else { |
259 ++Failures; | 259 ++Failures; |
260 std::cout << "test" << Funcs[f].Name << Vectors<T>::TypeName << "(" | 260 std::cout << "test" << Funcs[f].Name << Vectors<T>::TypeName << "(" |
261 << vectAsString<T>(Value1) << "," << vectAsString<T>(Value2) | 261 << vectAsString<T>(Value1) << "," << vectAsString<T>(Value2) |
262 << "): sz=" << vectAsString<T>(ResultSz) | 262 << "): sz=" << vectAsString<T>(ResultSz) |
263 << " llc=" << vectAsString<T>(ResultLlc) << std::endl; | 263 << " llc=" << vectAsString<T>(ResultLlc) << "\n"; |
264 } | 264 } |
265 } | 265 } |
266 } | 266 } |
267 } | 267 } |
268 } | 268 } |
269 | 269 |
270 int main(int argc, char **argv) { | 270 int main(int argc, char **argv) { |
271 size_t TotalTests = 0; | 271 size_t TotalTests = 0; |
272 size_t Passes = 0; | 272 size_t Passes = 0; |
273 size_t Failures = 0; | 273 size_t Failures = 0; |
274 | 274 |
275 testsInt<uint8_t, int8_t>(TotalTests, Passes, Failures); | 275 testsInt<uint8_t, myint8_t>(TotalTests, Passes, Failures); |
276 testsInt<uint16_t, int16_t>(TotalTests, Passes, Failures); | 276 testsInt<uint16_t, int16_t>(TotalTests, Passes, Failures); |
277 testsInt<uint32_t, int32_t>(TotalTests, Passes, Failures); | 277 testsInt<uint32_t, int32_t>(TotalTests, Passes, Failures); |
278 testsInt<uint64_t, int64_t>(TotalTests, Passes, Failures); | 278 testsInt<uint64_t, int64_t>(TotalTests, Passes, Failures); |
279 testsVecInt<v4ui32, v4si32>(TotalTests, Passes, Failures); | 279 testsVecInt<v4ui32, v4si32>(TotalTests, Passes, Failures); |
280 testsVecInt<v8ui16, v8si16>(TotalTests, Passes, Failures); | 280 testsVecInt<v8ui16, v8si16>(TotalTests, Passes, Failures); |
281 testsVecInt<v16ui8, v16si8>(TotalTests, Passes, Failures); | 281 testsVecInt<v16ui8, v16si8>(TotalTests, Passes, Failures); |
282 testsVecI1<v4i1>(TotalTests, Passes, Failures); | 282 testsVecI1<v4i1>(TotalTests, Passes, Failures); |
283 testsVecI1<v8i1>(TotalTests, Passes, Failures); | 283 testsVecI1<v8i1>(TotalTests, Passes, Failures); |
284 testsVecI1<v16i1>(TotalTests, Passes, Failures); | 284 testsVecI1<v16i1>(TotalTests, Passes, Failures); |
285 | 285 |
286 std::cout << "TotalTests=" << TotalTests << " Passes=" << Passes | 286 std::cout << "TotalTests=" << TotalTests << " Passes=" << Passes |
287 << " Failures=" << Failures << "\n"; | 287 << " Failures=" << Failures << "\n"; |
288 return Failures; | 288 return Failures; |
289 } | 289 } |
OLD | NEW |