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