66 lines
2.9 KiB
C++
66 lines
2.9 KiB
C++
//===- 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;
|
|
}
|