Skip to content

Instantly share code, notes, and snippets.

@abadams
Created May 13, 2019 18:17
Show Gist options
  • Save abadams/3a94fe455c5053b01e80d25342568fdf to your computer and use it in GitHub Desktop.
Save abadams/3a94fe455c5053b01e80d25342568fdf to your computer and use it in GitHub Desktop.
halide convolution lowered IR
assert((reinterpret(uint64, tent.buffer) != (uint64)0), halide_error_buffer_argument_is_null("tent"))
assert((reinterpret(uint64, in.buffer) != (uint64)0), halide_error_buffer_argument_is_null("in"))
assert((reinterpret(uint64, blur2.buffer) != (uint64)0), halide_error_buffer_argument_is_null("blur2"))
let blur2 = _halide_buffer_get_host(blur2.buffer)
let blur2.min.0 = _halide_buffer_get_min(blur2.buffer, 0)
let blur2.extent.0 = _halide_buffer_get_extent(blur2.buffer, 0)
let blur2.stride.0 = _halide_buffer_get_stride(blur2.buffer, 0)
let blur2.min.1 = _halide_buffer_get_min(blur2.buffer, 1)
let blur2.extent.1 = _halide_buffer_get_extent(blur2.buffer, 1)
let blur2.stride.1 = _halide_buffer_get_stride(blur2.buffer, 1)
let in = _halide_buffer_get_host(in.buffer)
let in.min.0 = _halide_buffer_get_min(in.buffer, 0)
let in.extent.0 = _halide_buffer_get_extent(in.buffer, 0)
let in.stride.0 = _halide_buffer_get_stride(in.buffer, 0)
let in.min.1 = _halide_buffer_get_min(in.buffer, 1)
let in.extent.1 = _halide_buffer_get_extent(in.buffer, 1)
let in.stride.1 = _halide_buffer_get_stride(in.buffer, 1)
let tent = _halide_buffer_get_host(tent.buffer)
let tent.min.0 = _halide_buffer_get_min(tent.buffer, 0)
let tent.extent.0 = _halide_buffer_get_extent(tent.buffer, 0)
let tent.stride.0 = _halide_buffer_get_stride(tent.buffer, 0)
let tent.min.1 = _halide_buffer_get_min(tent.buffer, 1)
let tent.extent.1 = _halide_buffer_get_extent(tent.buffer, 1)
let tent.stride.1 = _halide_buffer_get_stride(tent.buffer, 1)
assert((blur2.stride.0 == 1), 0)
assert((in.stride.0 == 1), 0)
assert((in.min.0 == 0), 0)
assert((in.extent.0 == 128), 0)
assert((in.stride.1 == 128), 0)
assert((in.min.1 == 0), 0)
assert((in.extent.1 == 48), 0)
assert((tent.stride.0 == 1), 0)
assert((tent.min.0 == 0), 0)
assert((tent.extent.0 == 3), 0)
assert((tent.stride.1 == 3), 0)
assert((tent.min.1 == 0), 0)
assert((tent.extent.1 == 3), 0)
allocate input[uint16 * (max(blur2.extent.0, 4) + 2) * (blur2.extent.1 + 2)]
produce input {
let t80 = (5 - (min(blur2.extent.0, 4) + blur2.min.0))
let t81 = (1 - blur2.min.1)
let t82 = (max(blur2.extent.0, 4) + 2)
let t76 = (blur2.min.1 + -1)
let t78 = (blur2.min.0 + -1)
let t77 = (blur2.extent.1 + 2)
let t79 = (blur2.extent.0 + 2)
for (input.s0.y, t76, t77) {
let t83 = (max(min(input.s0.y, 47), 0)*128)
let t84 = (((input.s0.y + t81)*t82) + t80)
for (input.s0.x, t78, t79) {
input[(input.s0.x + t84)] = in[(max(min(input.s0.x, 127), 0) + t83)]
}
}
}
produce blur2 {
consume input {
let t87 = max(blur2.extent.0, 4)
let t85 = ((blur2.extent.0 + 3)/4)
let t88 = (0 - min(blur2.extent.0, 4))
let t90 = (0 - (blur2.min.1*blur2.stride.1))
let t86 = (blur2.extent.0 + -4)
parallel (blur2.s0.y, blur2.min.1, blur2.extent.1) {
let t94 = ((blur2.s0.y*blur2.stride.1) + t90)
let t91 = ((t88 - t87) + 2)
let t92 = ((blur2.s0.y - blur2.min.1) + 1)
let t93 = (t87 + 2)
for (blur2.s0.x.x, 0, t85) {
let blur2.s0.x.v22.base.s = min((blur2.s0.x.x*4), t86)
allocate sum[uint16 * 4]
produce sum {
sum[ramp(0, 1, 4)] = x4((uint16)0)
let t95 = (blur2.s0.x.v22.base.s + t91)
for (sum.s1.r0$y, 0, 3) {
let t97 = (sum.s1.r0$y*3)
let t96 = (((sum.s1.r0$y + t92)*t93) + t95)
for (sum.s1.r0$x, 0, 3) {
sum[ramp(0, 1, 4)] = (sum[ramp(0, 1, 4)] + (input[ramp((sum.s1.r0$x + t96), 1, 4)]*x4(tent[(sum.s1.r0$x + t97)])))
}
}
}
consume sum {
blur2[ramp((blur2.s0.x.v22.base.s + t94), 1, 4)] = sum[ramp(0, 1, 4)]
}
free sum
}
}
}
}
free input
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment