|  | //===- 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; | 
|  | } |