OLD | NEW |
1 //===- subzero/crosstest/test_select_main.cpp - Driver for tests ----------===// | 1 //===- subzero/crosstest/test_select_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 crosstesting the select bitcode instruction | 10 // Driver for crosstesting the select bitcode instruction |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "test_select.h" | 25 #include "test_select.h" |
26 } | 26 } |
27 | 27 |
28 static const size_t MaxTestsPerFunc = 100000; | 28 static const size_t MaxTestsPerFunc = 100000; |
29 | 29 |
30 template <typename T, typename TI1> | 30 template <typename T, typename TI1> |
31 void testSelect(size_t &TotalTests, size_t &Passes, size_t &Failures) { | 31 void testSelect(size_t &TotalTests, size_t &Passes, size_t &Failures) { |
32 typedef typename Vectors<T>::Ty Ty; | 32 typedef typename Vectors<T>::Ty Ty; |
33 typedef typename Vectors<TI1>::Ty TyI1; | 33 typedef typename Vectors<TI1>::Ty TyI1; |
34 volatile unsigned Values[] = { | 34 volatile unsigned Values[] = { |
35 0x0, 0x1, 0x7ffffffe, 0x7fffffff, | 35 0x0, 0x1, 0x7ffffffe, 0x7fffffff, 0x80000000, 0x80000001, |
36 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff, | 36 0xfffffffe, 0xffffffff, 0x7e, 0x7f, 0x80, 0x81, |
37 0x7e, 0x7f, 0x80, 0x81, | 37 0xfe, 0xff, 0x100, 0x101, 0x7ffe, 0x7fff, |
38 0xfe, 0xff, 0x100, 0x101, | 38 0x8000, 0x8001, 0xfffe, 0xffff, 0x10000, 0x10001}; |
39 0x7ffe, 0x7fff, 0x8000, 0x8001, | |
40 0xfffe, 0xffff, 0x10000, 0x10001 | |
41 }; | |
42 static const size_t NumValues = sizeof(Values) / sizeof(*Values); | 39 static const size_t NumValues = sizeof(Values) / sizeof(*Values); |
43 static const size_t NumElements = Vectors<T>::NumElements; | 40 static const size_t NumElements = Vectors<T>::NumElements; |
44 PRNG Index; | 41 PRNG Index; |
45 for (size_t i = 0; i < MaxTestsPerFunc; ++i) { | 42 for (size_t i = 0; i < MaxTestsPerFunc; ++i) { |
46 TyI1 Cond; | 43 TyI1 Cond; |
47 Ty Value1, Value2; | 44 Ty Value1, Value2; |
48 for (size_t j = 0; j < NumElements; ++j) { | 45 for (size_t j = 0; j < NumElements; ++j) { |
49 Cond[j] = Index() % 2; | 46 Cond[j] = Index() % 2; |
50 Value1[j] = Values[Index() % NumValues]; | 47 Value1[j] = Values[Index() % NumValues]; |
51 Value2[j] = Values[Index() % NumValues]; | 48 Value2[j] = Values[Index() % NumValues]; |
52 } | 49 } |
53 Ty ResultLlc = select(Cond, Value1, Value2); | 50 Ty ResultLlc = select(Cond, Value1, Value2); |
54 Ty ResultSz = Subzero_::select(Cond, Value1, Value2); | 51 Ty ResultSz = Subzero_::select(Cond, Value1, Value2); |
55 ++TotalTests; | 52 ++TotalTests; |
56 if (!memcmp(&ResultLlc, &ResultSz, sizeof(ResultLlc))) { | 53 if (!memcmp(&ResultLlc, &ResultSz, sizeof(ResultLlc))) { |
57 ++Passes; | 54 ++Passes; |
58 } else { | 55 } else { |
59 ++Failures; | 56 ++Failures; |
60 std::cout << "select<" << Vectors<T>::TypeName << ">(Cond="; | 57 std::cout << "select<" << Vectors<T>::TypeName << ">(Cond="; |
61 std::cout << vectAsString<TI1>(Cond) | 58 std::cout << vectAsString<TI1>(Cond) |
62 << ", Value1=" << vectAsString<T>(Value1) | 59 << ", Value1=" << vectAsString<T>(Value1) |
63 << ", Value2=" << vectAsString<T>(Value2) << ")\n"; | 60 << ", Value2=" << vectAsString<T>(Value2) << ")\n"; |
64 std::cout << "llc=" << vectAsString<T>(ResultLlc) << "\n"; | 61 std::cout << "llc=" << vectAsString<T>(ResultLlc) << "\n"; |
65 std::cout << "sz =" << vectAsString<T>(ResultSz) << "\n"; | 62 std::cout << "sz =" << vectAsString<T>(ResultSz) << "\n"; |
66 } | 63 } |
67 } | 64 } |
68 } | 65 } |
69 | 66 |
70 template<> void | 67 template <> |
71 testSelect<v4f32, v4i1>(size_t &TotalTests, size_t &Passes, size_t &Failures) { | 68 void testSelect<v4f32, v4i1>(size_t &TotalTests, size_t &Passes, |
| 69 size_t &Failures) { |
72 static const float NegInf = -1.0 / 0.0; | 70 static const float NegInf = -1.0 / 0.0; |
73 static const float PosInf = 1.0 / 0.0; | 71 static const float PosInf = 1.0 / 0.0; |
74 static const float Nan = 0.0 / 0.0; | 72 static const float Nan = 0.0 / 0.0; |
75 static const float NegNan = -0.0 / 0.0; | 73 static const float NegNan = -0.0 / 0.0; |
76 volatile float Values[] = FP_VALUE_ARRAY(NegInf, PosInf, NegNan, Nan); | 74 volatile float Values[] = FP_VALUE_ARRAY(NegInf, PosInf, NegNan, Nan); |
77 static const size_t NumValues = sizeof(Values) / sizeof(*Values); | 75 static const size_t NumValues = sizeof(Values) / sizeof(*Values); |
78 static const size_t NumElements = 4; | 76 static const size_t NumElements = 4; |
79 PRNG Index; | 77 PRNG Index; |
80 for (size_t i = 0; i < MaxTestsPerFunc; ++i) { | 78 for (size_t i = 0; i < MaxTestsPerFunc; ++i) { |
81 v4si32 Cond; | 79 v4si32 Cond; |
(...skipping 13 matching lines...) Expand all Loading... |
95 std::cout << "select<v4f32>(Cond="; | 93 std::cout << "select<v4f32>(Cond="; |
96 std::cout << vectAsString<v4i1>(Cond) | 94 std::cout << vectAsString<v4i1>(Cond) |
97 << ", Value1=" << vectAsString<v4f32>(Value1) | 95 << ", Value1=" << vectAsString<v4f32>(Value1) |
98 << ", Value2=" << vectAsString<v4f32>(Value2) << ")\n"; | 96 << ", Value2=" << vectAsString<v4f32>(Value2) << ")\n"; |
99 std::cout << "llc=" << vectAsString<v4f32>(ResultLlc) << "\n"; | 97 std::cout << "llc=" << vectAsString<v4f32>(ResultLlc) << "\n"; |
100 std::cout << "sz =" << vectAsString<v4f32>(ResultSz) << "\n"; | 98 std::cout << "sz =" << vectAsString<v4f32>(ResultSz) << "\n"; |
101 } | 99 } |
102 } | 100 } |
103 } | 101 } |
104 | 102 |
105 template<typename T> | 103 template <typename T> |
106 void testSelectI1(size_t &TotalTests, size_t &Passes, size_t &Failures) { | 104 void testSelectI1(size_t &TotalTests, size_t &Passes, size_t &Failures) { |
107 typedef typename Vectors<T>::Ty Ty; | 105 typedef typename Vectors<T>::Ty Ty; |
108 static const size_t NumElements = Vectors<T>::NumElements; | 106 static const size_t NumElements = Vectors<T>::NumElements; |
109 PRNG Index; | 107 PRNG Index; |
110 for (size_t i = 0; i < MaxTestsPerFunc; ++i) { | 108 for (size_t i = 0; i < MaxTestsPerFunc; ++i) { |
111 Ty Cond; | 109 Ty Cond; |
112 Ty Value1, Value2; | 110 Ty Value1, Value2; |
113 for (size_t j = 0; j < NumElements; ++j) { | 111 for (size_t j = 0; j < NumElements; ++j) { |
114 Cond[j] = Index() % 2; | 112 Cond[j] = Index() % 2; |
115 Value1[j] = Index() % 2; | 113 Value1[j] = Index() % 2; |
(...skipping 30 matching lines...) Expand all Loading... |
146 testSelect<v16ui8, v16i1>(TotalTests, Passes, Failures); | 144 testSelect<v16ui8, v16i1>(TotalTests, Passes, Failures); |
147 testSelectI1<v4i1>(TotalTests, Passes, Failures); | 145 testSelectI1<v4i1>(TotalTests, Passes, Failures); |
148 testSelectI1<v8i1>(TotalTests, Passes, Failures); | 146 testSelectI1<v8i1>(TotalTests, Passes, Failures); |
149 testSelectI1<v16i1>(TotalTests, Passes, Failures); | 147 testSelectI1<v16i1>(TotalTests, Passes, Failures); |
150 | 148 |
151 std::cout << "TotalTests=" << TotalTests << " Passes=" << Passes | 149 std::cout << "TotalTests=" << TotalTests << " Passes=" << Passes |
152 << " Failures=" << Failures << "\n"; | 150 << " Failures=" << Failures << "\n"; |
153 | 151 |
154 return Failures; | 152 return Failures; |
155 } | 153 } |
OLD | NEW |