let f0.extent.0.required.s = (min((((((f0.extent.0 + -1) / 8) * 8) + f0.min.0) + 7), ((f0.min.0 + f0.extent.0) + -1)) - min(f0.min.0, ((f0.min.0 + f0.extent.0) + -8)))

let f0.min.0.required = min(f0.min.0, ((f0.min.0 + f0.extent.0) + -8))

if (f0.host_and_dev_are_null)
{
rewrite_buffer(f0.buffer, 4, f0.min.0.required, (f0.extent.0.required.s + 1), 1, f0.min.1, f0.extent.1, (f0.extent.0.required.s + 1))
}
if (!f0.host_and_dev_are_null)
{
assert((f0.elem_size == 4), "Output buffer f0 has type int32, but elem_size of the buffer_t passed in is %d instead of 4", f0.elem_size)
assert((f0.min.0 <= f0.min.0.required), "Output buffer f0 is accessed at %d, which is before the min (%d) in dimension 0", f0.min.0.required, f0.min.0)
assert(((((f0.min.0.required + f0.extent.0.required.s) - f0.extent.0) + 1) <= f0.min.0), "Output buffer f0 is accessed at %d, which is beyond the max (%d) in dimension 0", (f0.min.0.required + f0.extent.0.required.s), ((f0.min.0 + f0.extent.0) + -1))
assert((f0.stride.0 == 1), "Static constraint violated: f0.stride.0 == 1")

let f0.total_extent.1 = (int64(f0.extent.1) * int64(f0.extent.0))

assert((int64(f0.extent.0) <= int64(2147483647)), "Total allocation for buffer f0 exceeds 2^31 - 1")
assert(((int64(f0.extent.1) * int64(f0.stride.1)) <= int64(2147483647)), "Total allocation for buffer f0 exceeds 2^31 - 1")
assert((f0.total_extent.1 <= int64(2147483647)), "Product of extents for buffer f0 exceeds 2^31 - 1")
produce f0
{
parallel (f0.s0.v1, f0.min.1, f0.extent.1)
{
for (f0.s0.v0.v0.v0, 0, ((f0.extent.0 + 7) / 8))
{

let f0.s0.s0.base = min(((f0.s0.v0.v0.v0 * 8) + f0.min.0), ((f0.min.0 + f0.extent.0) + -8))

f0[ramp(((f0.s0.s0.base + (f0.s0.v1 * f0.stride.1)) - (f0.min.0 + (f0.min.1 * f0.stride.1))), 1, 4)] = ramp((f0.s0.s0.base + f0.s0.v1), 1, 4)
f0[ramp((((f0.s0.s0.base + (f0.s0.v1 * f0.stride.1)) - (f0.min.0 + (f0.min.1 * f0.stride.1))) + 4), 1, 4)] = ramp(((f0.s0.s0.base + f0.s0.v1) + 4), 1, 4)
}
}
}
0
}