forked from OSchip/llvm-project
71 lines
2.3 KiB
C++
71 lines
2.3 KiB
C++
//===- FlattenTest.cpp ----------------------------------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "polly/FlattenAlgo.h"
|
|
#include "polly/Support/GICHelper.h"
|
|
#include "gtest/gtest.h"
|
|
#include "isl/union_map.h"
|
|
|
|
using namespace llvm;
|
|
using namespace polly;
|
|
|
|
namespace {
|
|
|
|
/// Flatten a schedule and compare to the expected result.
|
|
///
|
|
/// @param ScheduleStr The schedule to flatten as string.
|
|
/// @param ExpectedStr The expected result as string.
|
|
///
|
|
/// @result Whether the flattened schedule is the same as the expected schedule.
|
|
bool checkFlatten(const char *ScheduleStr, const char *ExpectedStr) {
|
|
auto *Ctx = isl_ctx_alloc();
|
|
isl_bool Success;
|
|
|
|
{
|
|
auto Schedule = give(isl_union_map_read_from_str(Ctx, ScheduleStr));
|
|
auto Expected = give(isl_union_map_read_from_str(Ctx, ExpectedStr));
|
|
|
|
auto Result = flattenSchedule(std::move(Schedule));
|
|
Success = isl_union_map_is_equal(Result.keep(), Expected.keep());
|
|
}
|
|
|
|
isl_ctx_free(Ctx);
|
|
return Success == isl_bool_true;
|
|
}
|
|
|
|
TEST(Flatten, FlattenTrivial) {
|
|
EXPECT_TRUE(checkFlatten("{ A[] -> [0] }", "{ A[] -> [0] }"));
|
|
EXPECT_TRUE(checkFlatten("{ A[i] -> [i, 0] : 0 <= i < 10 }",
|
|
"{ A[i] -> [i] : 0 <= i < 10 }"));
|
|
EXPECT_TRUE(checkFlatten("{ A[i] -> [0, i] : 0 <= i < 10 }",
|
|
"{ A[i] -> [i] : 0 <= i < 10 }"));
|
|
}
|
|
|
|
TEST(Flatten, FlattenSequence) {
|
|
EXPECT_TRUE(checkFlatten(
|
|
"[n] -> { A[i] -> [0, i] : 0 <= i < n; B[i] -> [1, i] : 0 <= i < n }",
|
|
"[n] -> { A[i] -> [i] : 0 <= i < n; B[i] -> [n + i] : 0 <= i < n }"));
|
|
|
|
EXPECT_TRUE(checkFlatten(
|
|
"{ A[i] -> [0, i] : 0 <= i < 10; B[i] -> [1, i] : 0 <= i < 10 }",
|
|
"{ A[i] -> [i] : 0 <= i < 10; B[i] -> [10 + i] : 0 <= i < 10 }"));
|
|
}
|
|
|
|
TEST(Flatten, FlattenLoop) {
|
|
EXPECT_TRUE(checkFlatten(
|
|
"[n] -> { A[i] -> [i, 0] : 0 <= i < n; B[i] -> [i, 1] : 0 <= i < n }",
|
|
"[n] -> { A[i] -> [2i] : 0 <= i < n; B[i] -> [2i + 1] : 0 <= i < n }"));
|
|
|
|
EXPECT_TRUE(checkFlatten(
|
|
"{ A[i] -> [i, 0] : 0 <= i < 10; B[i] -> [i, 1] : 0 <= i < 10 }",
|
|
"{ A[i] -> [2i] : 0 <= i < 10; B[i] -> [2i + 1] : 0 <= i < 10 }"));
|
|
}
|
|
|
|
} // anonymous namespace
|