Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: crosstest/test_select_main.cpp

Issue 1560933002: Subzero: Enable Non-SFI vector cross tests. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Code review changes Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « crosstest/test_icmp_main.cpp ('k') | pydir/crosstest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « crosstest/test_icmp_main.cpp ('k') | pydir/crosstest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698