| 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 |