| //===- subzero/crosstest/test_strengthreduce_main.cpp - Driver for tests --===// | 
 | // | 
 | //                        The Subzero Code Generator | 
 | // | 
 | // This file is distributed under the University of Illinois Open Source | 
 | // License. See LICENSE.TXT for details. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 | // | 
 | // Driver for crosstesting arithmetic strength-reducing optimizations. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | /* crosstest.py --test=test_strengthreduce.cpp \ | 
 |    --driver=test_strengthreduce_main.cpp \ | 
 |    --prefix=Subzero_ --clang-opt=0 --output=test_strengthreduce */ | 
 |  | 
 | #include <iostream> | 
 |  | 
 | // Include test_strengthreduce.h twice - once normally, and once | 
 | // within the Subzero_ namespace, corresponding to the llc and Subzero | 
 | // translated object files, respectively. | 
 | #include "test_strengthreduce.h" | 
 | namespace Subzero_ { | 
 | #include "test_strengthreduce.h" | 
 | } | 
 |  | 
 | int main(int argc, char *argv[]) { | 
 |   size_t TotalTests = 0; | 
 |   size_t Passes = 0; | 
 |   size_t Failures = 0; | 
 |   static int32_t Values[] = {-100, -50, 0, 1, 8, 123, 0x33333333, 0x77777777}; | 
 |   for (size_t i = 0; i < sizeof(Values) / sizeof(*Values); ++i) { | 
 |     int32_t SVal = Values[i]; | 
 |     int32_t ResultLlcS, ResultSzS; | 
 |     uint32_t UVal = (uint32_t)Values[i]; | 
 |     int32_t ResultLlcU, ResultSzU; | 
 |  | 
 | #define X(constant, suffix)                                                    \ | 
 |   ResultLlcS = multiplyByConst##suffix(UVal);                                  \ | 
 |   ResultSzS = Subzero_::multiplyByConst##suffix(UVal);                         \ | 
 |   if (ResultLlcS == ResultSzS) {                                               \ | 
 |     ++Passes;                                                                  \ | 
 |   } else {                                                                     \ | 
 |     ++Failures;                                                                \ | 
 |     std::cout << "multiplyByConstS" STR(suffix) "(" << SVal                    \ | 
 |               << "): sz=" << ResultSzS << " llc=" << ResultLlcS << "\n";       \ | 
 |   }                                                                            \ | 
 |   ResultLlcU = multiplyByConst##suffix(UVal);                                  \ | 
 |   ResultSzU = Subzero_::multiplyByConst##suffix(UVal);                         \ | 
 |   if (ResultLlcU == ResultSzU) {                                               \ | 
 |     ++Passes;                                                                  \ | 
 |   } else {                                                                     \ | 
 |     ++Failures;                                                                \ | 
 |     std::cout << "multiplyByConstU" STR(suffix) "(" << UVal                    \ | 
 |               << "): sz=" << ResultSzU << " llc=" << ResultLlcU << "\n";       \ | 
 |   } | 
 |     CONST_TABLE | 
 | #undef X | 
 |   } | 
 |  | 
 |   std::cout << "TotalTests=" << TotalTests << " Passes=" << Passes | 
 |             << " Failures=" << Failures << "\n"; | 
 |   return Failures; | 
 | } |