Skip to content

Wrong results with rfactor #7890

Closed
Closed
@TH3CHARLie

Description

@TH3CHARLie

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;
}

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions