AnyDSL / thorin

The Higher-Order Intermediate Representation

Home Page:https://anydsl.github.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

calling cuda()/nvvm() intrinsics with empty body triggers assertion…

michael-kenzel opened this issue · comments

…when called from exported function if there is a variable in scope that is initialized to a different lambda depending on function parameter.

repro:

#[import(cc = "thorin")] fn nvvm(_dev: i32, _grid: (i32, i32, i32), _block: (i32, i32, i32), _body: fn() -> ()) -> ();

#[export]
fn test(b: bool) -> () {
	let fun = if b { @||{} } else { @||{} };

	nvvm(0, (1, 1, 1), (1, 1, 1), @||{});
}

compilation via artic with --emit-llvm results in

src/thorin/be/codegen.cpp:39: thorin::get_kernel_configs(thorin::Importer&, const std::vector<thorin::Continuation*>&, thorin::Cont2Config&, std::function<std::unique_ptr<thorin::KernelConfig>(thorin::Continuation*, thorin::Continuation*)>)::<lambda(thorin::Continuation*)>: Assertion `p.second && "single kernel config entry expected"' failed.

Most likely related to #128, let's consolidate discussion there