changed the backend to pass argument addresses through variables so we only compile once for each kernel