xref: /llvm-project/polly/unittests/ScheduleOptimizer/ScheduleTreeTransformTest.cpp (revision d123e983b332d061bf456c8a0b5dbbe9666eaf4c)
1*d123e983SMichael Kruse //===- ScheduleTreeTransformTest.cpp --------------------------------------===//
2*d123e983SMichael Kruse //
3*d123e983SMichael Kruse // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*d123e983SMichael Kruse // See https://llvm.org/LICENSE.txt for license information.
5*d123e983SMichael Kruse // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*d123e983SMichael Kruse //
7*d123e983SMichael Kruse //===----------------------------------------------------------------------===//
8*d123e983SMichael Kruse 
9*d123e983SMichael Kruse #include "polly/ScheduleTreeTransform.h"
10*d123e983SMichael Kruse #include "gtest/gtest.h"
11*d123e983SMichael Kruse #include "isl/ctx.h"
12*d123e983SMichael Kruse 
13*d123e983SMichael Kruse using namespace isl;
14*d123e983SMichael Kruse using namespace polly;
15*d123e983SMichael Kruse 
16*d123e983SMichael Kruse namespace {
17*d123e983SMichael Kruse 
TEST(ScheduleTreeTransform,getPartialTilePrefixes)18*d123e983SMichael Kruse TEST(ScheduleTreeTransform, getPartialTilePrefixes) {
19*d123e983SMichael Kruse   isl_ctx *ctx = isl_ctx_alloc();
20*d123e983SMichael Kruse 
21*d123e983SMichael Kruse   {
22*d123e983SMichael Kruse     // Verify that for a loop with 3 iterations starting at 0 that is
23*d123e983SMichael Kruse     // pre-vectorized (strip-mined with a factor of 2), we correctly identify
24*d123e983SMichael Kruse     // that only the first two iterations are full vector iterations.
25*d123e983SMichael Kruse     isl::map Schedule(
26*d123e983SMichael Kruse         ctx, "{[i] -> [floor(i/2), i - 2 * floor(i/2)] : 0 <= i < 3 }");
27*d123e983SMichael Kruse     isl::set ScheduleRange = Schedule.range();
28*d123e983SMichael Kruse     isl::set Result = getPartialTilePrefixes(ScheduleRange, 2);
29*d123e983SMichael Kruse 
30*d123e983SMichael Kruse     EXPECT_TRUE(Result.is_equal(isl::set(ctx, "{[0]}")));
31*d123e983SMichael Kruse   }
32*d123e983SMichael Kruse 
33*d123e983SMichael Kruse   {
34*d123e983SMichael Kruse     // Verify that for a loop with 3 iterations starting at 1 that is
35*d123e983SMichael Kruse     // pre-vectorized (strip-mined with a factor of 2), we correctly identify
36*d123e983SMichael Kruse     // that only the last two iterations are full vector iterations.
37*d123e983SMichael Kruse     isl::map Schedule(
38*d123e983SMichael Kruse         ctx, "{[i] -> [floor(i/2), i - 2 * floor(i/2)] : 1 <= i < 4 }");
39*d123e983SMichael Kruse     isl::set ScheduleRange = Schedule.range();
40*d123e983SMichael Kruse     isl::set Result = getPartialTilePrefixes(ScheduleRange, 2);
41*d123e983SMichael Kruse 
42*d123e983SMichael Kruse     EXPECT_TRUE(Result.is_equal(isl::set(ctx, "{[1]}")));
43*d123e983SMichael Kruse   }
44*d123e983SMichael Kruse 
45*d123e983SMichael Kruse   {
46*d123e983SMichael Kruse     // Verify that for a loop with 6 iterations starting at 1 that is
47*d123e983SMichael Kruse     // pre-vectorized (strip-mined with a factor of 2), we correctly identify
48*d123e983SMichael Kruse     // that all but the first and the last iteration are full vector iterations.
49*d123e983SMichael Kruse     isl::map Schedule(
50*d123e983SMichael Kruse         ctx, "{[i] -> [floor(i/2), i - 2 * floor(i/2)] : 1 <= i < 6 }");
51*d123e983SMichael Kruse     isl::set ScheduleRange = Schedule.range();
52*d123e983SMichael Kruse     isl::set Result = getPartialTilePrefixes(ScheduleRange, 2);
53*d123e983SMichael Kruse 
54*d123e983SMichael Kruse     EXPECT_TRUE(Result.is_equal(isl::set(ctx, "{[1]; [2]}")));
55*d123e983SMichael Kruse   }
56*d123e983SMichael Kruse 
57*d123e983SMichael Kruse   isl_ctx_free(ctx);
58*d123e983SMichael Kruse }
59*d123e983SMichael Kruse } // anonymous namespace
60