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