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 |
11 // | 11 // |
12 //===----------------------------------------------------------------------===// | 12 //===----------------------------------------------------------------------===// |
13 | 13 |
14 /* crosstest.py --test=test_select.ll --driver=test_select_main.cpp \ | 14 /* crosstest.py --test=test_select.ll --driver=test_select_main.cpp \ |
15 --prefix=Subzero_ --output=test_select */ | 15 --prefix=Subzero_ --output=test_select */ |
16 | 16 |
17 #include <cfloat> | 17 #include <cfloat> |
18 #include <cstring> | 18 #include <cstring> |
19 #include <iostream> | 19 #include <iostream> |
20 | 20 |
21 #include "test_arith.def" | 21 #include "test_arith.def" |
22 #include "test_select.h" | 22 #include "test_select.h" |
23 | 23 |
24 namespace Subzero_ { | 24 namespace Subzero_ { |
25 #include "test_select.h" | 25 #include "test_select.h" |
26 } | 26 } |
27 | 27 |
| 28 #include "insertelement.h" |
| 29 |
28 static const size_t MaxTestsPerFunc = 100000; | 30 static const size_t MaxTestsPerFunc = 100000; |
29 | 31 |
30 template <typename T, typename TI1> | 32 template <typename T, typename TI1> |
31 void testSelect(size_t &TotalTests, size_t &Passes, size_t &Failures) { | 33 void testSelect(size_t &TotalTests, size_t &Passes, size_t &Failures) { |
32 typedef typename Vectors<T>::Ty Ty; | 34 typedef typename Vectors<T>::Ty Ty; |
33 typedef typename Vectors<TI1>::Ty TyI1; | 35 typedef typename Vectors<TI1>::Ty TyI1; |
34 volatile unsigned Values[] = { | 36 volatile unsigned Values[] = { |
35 0x0, 0x1, 0x7ffffffe, 0x7fffffff, 0x80000000, 0x80000001, | 37 0x0, 0x1, 0x7ffffffe, 0x7fffffff, 0x80000000, 0x80000001, |
36 0xfffffffe, 0xffffffff, 0x7e, 0x7f, 0x80, 0x81, | 38 0xfffffffe, 0xffffffff, 0x7e, 0x7f, 0x80, 0x81, |
37 0xfe, 0xff, 0x100, 0x101, 0x7ffe, 0x7fff, | 39 0xfe, 0xff, 0x100, 0x101, 0x7ffe, 0x7fff, |
38 0x8000, 0x8001, 0xfffe, 0xffff, 0x10000, 0x10001}; | 40 0x8000, 0x8001, 0xfffe, 0xffff, 0x10000, 0x10001}; |
39 static const size_t NumValues = sizeof(Values) / sizeof(*Values); | 41 static const size_t NumValues = sizeof(Values) / sizeof(*Values); |
40 static const size_t NumElements = Vectors<T>::NumElements; | 42 static const size_t NumElements = Vectors<T>::NumElements; |
41 PRNG Index; | 43 PRNG Index; |
42 for (size_t i = 0; i < MaxTestsPerFunc; ++i) { | 44 for (size_t i = 0; i < MaxTestsPerFunc; ++i) { |
43 TyI1 Cond; | 45 TyI1 Cond; |
44 Ty Value1, Value2; | 46 Ty Value1, Value2; |
45 for (size_t j = 0; j < NumElements; ++j) { | 47 for (size_t j = 0; j < NumElements; ++j) { |
46 Cond[j] = Index() % 2; | 48 setElement(Cond, j, Index() % 2); |
47 Value1[j] = Values[Index() % NumValues]; | 49 setElement(Value1, j, Values[Index() % NumValues]); |
48 Value2[j] = Values[Index() % NumValues]; | 50 setElement(Value2, j, Values[Index() % NumValues]); |
49 } | 51 } |
50 Ty ResultLlc = select(Cond, Value1, Value2); | 52 Ty ResultLlc = select(Cond, Value1, Value2); |
51 Ty ResultSz = Subzero_::select(Cond, Value1, Value2); | 53 Ty ResultSz = Subzero_::select(Cond, Value1, Value2); |
52 ++TotalTests; | 54 ++TotalTests; |
53 if (!memcmp(&ResultLlc, &ResultSz, sizeof(ResultLlc))) { | 55 if (!memcmp(&ResultLlc, &ResultSz, sizeof(ResultLlc))) { |
54 ++Passes; | 56 ++Passes; |
55 } else { | 57 } else { |
56 ++Failures; | 58 ++Failures; |
57 std::cout << "select<" << Vectors<T>::TypeName << ">(Cond="; | 59 std::cout << "select<" << Vectors<T>::TypeName << ">(Cond="; |
58 std::cout << vectAsString<TI1>(Cond) | 60 std::cout << vectAsString<TI1>(Cond) |
(...skipping 13 matching lines...) Expand all Loading... |
72 static const float Nan = 0.0 / 0.0; | 74 static const float Nan = 0.0 / 0.0; |
73 static const float NegNan = -0.0 / 0.0; | 75 static const float NegNan = -0.0 / 0.0; |
74 volatile float Values[] = FP_VALUE_ARRAY(NegInf, PosInf, NegNan, Nan); | 76 volatile float Values[] = FP_VALUE_ARRAY(NegInf, PosInf, NegNan, Nan); |
75 static const size_t NumValues = sizeof(Values) / sizeof(*Values); | 77 static const size_t NumValues = sizeof(Values) / sizeof(*Values); |
76 static const size_t NumElements = 4; | 78 static const size_t NumElements = 4; |
77 PRNG Index; | 79 PRNG Index; |
78 for (size_t i = 0; i < MaxTestsPerFunc; ++i) { | 80 for (size_t i = 0; i < MaxTestsPerFunc; ++i) { |
79 v4si32 Cond; | 81 v4si32 Cond; |
80 v4f32 Value1, Value2; | 82 v4f32 Value1, Value2; |
81 for (size_t j = 0; j < NumElements; ++j) { | 83 for (size_t j = 0; j < NumElements; ++j) { |
82 Cond[j] = Index() % 2; | 84 setElement(Cond, j, Index() % 2); |
83 Value1[j] = Values[Index() % NumValues]; | 85 setElement(Value1, j, Values[Index() % NumValues]); |
84 Value2[j] = Values[Index() % NumValues]; | 86 setElement(Value2, j, Values[Index() % NumValues]); |
85 } | 87 } |
86 v4f32 ResultLlc = select(Cond, Value1, Value2); | 88 v4f32 ResultLlc = select(Cond, Value1, Value2); |
87 v4f32 ResultSz = Subzero_::select(Cond, Value1, Value2); | 89 v4f32 ResultSz = Subzero_::select(Cond, Value1, Value2); |
88 ++TotalTests; | 90 ++TotalTests; |
89 if (!memcmp(&ResultLlc, &ResultSz, sizeof(ResultLlc))) { | 91 if (!memcmp(&ResultLlc, &ResultSz, sizeof(ResultLlc))) { |
90 ++Passes; | 92 ++Passes; |
91 } else { | 93 } else { |
92 ++Failures; | 94 ++Failures; |
93 std::cout << "select<v4f32>(Cond="; | 95 std::cout << "select<v4f32>(Cond="; |
94 std::cout << vectAsString<v4i1>(Cond) | 96 std::cout << vectAsString<v4i1>(Cond) |
95 << ", Value1=" << vectAsString<v4f32>(Value1) | 97 << ", Value1=" << vectAsString<v4f32>(Value1) |
96 << ", Value2=" << vectAsString<v4f32>(Value2) << ")\n"; | 98 << ", Value2=" << vectAsString<v4f32>(Value2) << ")\n"; |
97 std::cout << "llc=" << vectAsString<v4f32>(ResultLlc) << "\n"; | 99 std::cout << "llc=" << vectAsString<v4f32>(ResultLlc) << "\n"; |
98 std::cout << "sz =" << vectAsString<v4f32>(ResultSz) << "\n"; | 100 std::cout << "sz =" << vectAsString<v4f32>(ResultSz) << "\n"; |
99 } | 101 } |
100 } | 102 } |
101 } | 103 } |
102 | 104 |
103 template <typename T> | 105 template <typename T> |
104 void testSelectI1(size_t &TotalTests, size_t &Passes, size_t &Failures) { | 106 void testSelectI1(size_t &TotalTests, size_t &Passes, size_t &Failures) { |
105 typedef typename Vectors<T>::Ty Ty; | 107 typedef typename Vectors<T>::Ty Ty; |
106 static const size_t NumElements = Vectors<T>::NumElements; | 108 static const size_t NumElements = Vectors<T>::NumElements; |
107 PRNG Index; | 109 PRNG Index; |
108 for (size_t i = 0; i < MaxTestsPerFunc; ++i) { | 110 for (size_t i = 0; i < MaxTestsPerFunc; ++i) { |
109 Ty Cond; | 111 Ty Cond; |
110 Ty Value1, Value2; | 112 Ty Value1, Value2; |
111 for (size_t j = 0; j < NumElements; ++j) { | 113 for (size_t j = 0; j < NumElements; ++j) { |
112 Cond[j] = Index() % 2; | 114 setElement(Cond, j, Index() % 2); |
113 Value1[j] = Index() % 2; | 115 setElement(Value1, j, Index() % 2); |
114 Value2[j] = Index() % 2; | 116 setElement(Value2, j, Index() % 2); |
115 } | 117 } |
116 Ty ResultLlc = select_i1(Cond, Value1, Value2); | 118 Ty ResultLlc = select_i1(Cond, Value1, Value2); |
117 Ty ResultSz = Subzero_::select_i1(Cond, Value1, Value2); | 119 Ty ResultSz = Subzero_::select_i1(Cond, Value1, Value2); |
118 ++TotalTests; | 120 ++TotalTests; |
119 if (!memcmp(&ResultLlc, &ResultSz, sizeof(ResultLlc))) { | 121 if (!memcmp(&ResultLlc, &ResultSz, sizeof(ResultLlc))) { |
120 ++Passes; | 122 ++Passes; |
121 } else { | 123 } else { |
122 ++Failures; | 124 ++Failures; |
123 std::cout << "select<" << Vectors<T>::TypeName << ">(Cond="; | 125 std::cout << "select<" << Vectors<T>::TypeName << ">(Cond="; |
124 std::cout << vectAsString<T>(Cond) | 126 std::cout << vectAsString<T>(Cond) |
(...skipping 23 matching lines...) Expand all Loading... |
148 testSelect<v16ui8, v16i1>(TotalTests, Passes, Failures); | 150 testSelect<v16ui8, v16i1>(TotalTests, Passes, Failures); |
149 testSelectI1<v4i1>(TotalTests, Passes, Failures); | 151 testSelectI1<v4i1>(TotalTests, Passes, Failures); |
150 testSelectI1<v8i1>(TotalTests, Passes, Failures); | 152 testSelectI1<v8i1>(TotalTests, Passes, Failures); |
151 testSelectI1<v16i1>(TotalTests, Passes, Failures); | 153 testSelectI1<v16i1>(TotalTests, Passes, Failures); |
152 | 154 |
153 std::cout << "TotalTests=" << TotalTests << " Passes=" << Passes | 155 std::cout << "TotalTests=" << TotalTests << " Passes=" << Passes |
154 << " Failures=" << Failures << "\n"; | 156 << " Failures=" << Failures << "\n"; |
155 | 157 |
156 return Failures; | 158 return Failures; |
157 } | 159 } |
OLD | NEW |