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