blob: 0569b82e6ccbea7c23d509d8196b3a0fc3902717 [file] [log] [blame]
//===- 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;
}