Description
A repro
#include "Halide.h"
#include <iostream>
using namespace Halide;
int main() {
Func input("input");
Func local_sum("local_sum");
Func blurry("blurry");
Var x("x"), y("y");
RVar yryf;
input(x, y) = 2 * x + 5 * y;
RDom r(-2, 5, -2, 5, "rdom_r");
local_sum(x, y) = 0;
local_sum(x, y) += input(x + r.x, y + r.y);
blurry(x, y) = cast<int32_t>(local_sum(x, y) / 25);
Buffer<int> buf1, buf2;
{
Pipeline p({blurry});
buf1 = p.realize({128, 128});
}
{
Var yo, yi, xo, xi, u;
blurry.split(y, yo, yi, 2, TailStrategy::Auto);
local_sum.split(x, xo, xi, 4, TailStrategy::Auto);
local_sum.update(0).split(x, xo, xi, 1, TailStrategy::Auto);
local_sum.update(0).rfactor(r.x, u);
blurry.store_root();
local_sum.compute_root();
Pipeline p({blurry});
buf2 = p.realize({128, 128});
}
for (int i = 0; i < 128; ++i) {
for (int j = 0; j < 128; ++j) {
if (buf1(i, j) != buf2(i, j)) {
std::cout << "Error incorrect result at i: " << i << " j: " << j << " expected: " << buf1(i, j) << " actual: " << buf2(i, j) << std::endl;
}
}
}
return 0;
}