Hello. I am new to Cranelift-jit. I hope this is the right place to ask.
I want to do something like this and call this from cranelift:
pub extern "C" fn to_jitval(ptr: *mut Parameter) -> (i64, i64) {
let r = unsafe {Box::from_raw(ptr)};
(r.value, r.value_type)
}
This works, I successfully receive multiple return values when it is called from cranlift jit.
But I think this return type (tuple) is unstable usage of ABI. Is it unsafe to do this? How can I return multiple values from a function?
multi-return doesn't work for the C abi. You will have to instead pass for example a pointer where the callee can write the return value to.
Hi there, I'm recently building a frontend of cranelift for a RISCV like instruction set! everything works perfectly except the JumpTable part ... I'm confused about the flow of the SSA via jump table, I need to pass some Variables to the target branches (I have 14 variables act like my virtual registers), however I found the Jump table is easy broken if my target branches are far away from the definition of the jump table with error like
Caused by:
0: Verifier errors
1: - inst75 (br_table v87, block23, [block3(v56, v121, v193, v269, v346, v423, v54, v169, v241, v317, v394, v471, v103, v170, v242, v318, v395, v472, v104, v123, v195, v319, v396, v473, v105, v120, v243, v268, v345, v422, v106, v171, v244, v320, v397, v474, v107, v115, v188, v321, v398, v475, v108, v172, v245, v322, v399, v476, v109, v173, v246, v323, v400, v477, v110, v174, v247, v324, v401, v478, v111, v175, v248, v325, v402, v479, v112, v176, v249, v271, v348, v425, v113, v177, v250, v326, v403, v480, v114, v178, v251, v327, v404, v481), block4(v56, v121, v193, v269, v346, v423, v104, v123, v195, v319, v396, v473, v54, v169, v241, v317, v394, v471, v103, v170, v242, v318, v395, v472, v106, v171, v244, v320, v397, v474, v108, v172, v245, v322, v399, v476, v109, v173, v246, v323, v400, v477, v110, v174, v247, v324, v401, v478, v111, v175, v248, v325, v402, v479, v112, v176, v249, v271, v348, v425, v113, v177, v250, v326, v403, v480, v114, v178, v251, v327, v404, v481, v107, v115, v188, v321, v398, v475), block6(v56, v121, v193, v269, v346, v423, v54, v169, v241, v317, v394, v471, v103, v170, v242, v318, v395, v472, v104, v123, v195, v319, v396, v473, v105, v120, v243, v268, v345, v422, v106, v171, v244, v320, v397, v474, v107, v115, v188, v321, v398, v475, v108, v172, v245, v322, v399, v476, v109, v173, v246, v323, v400, v477, v110, v174, v247, v324, v401, v478, v111, v175, v248, v325, v402, v479, v112, v176, v249, v271, v348, v425, v113, v177, v250, v326, v403, v480, v114, v178, v251, v327, v404, v481), block7(v56, v121, v193, v269, v346, v423, v104, v123, v195, v319, v396, v473, v54, v169, v241, v317, v394, v471, v103, v170, v242, v318, v395, v472, v106, v171, v244, v320, v397, v474, v108, v172, v245, v322, v399, v476, v109, v173, v246, v323, v400, v477, v110, v174, v247, v324, v401, v478, v111, v175, v248, v325, v402, v479, v114, v178, v251, v327, v404, v481, v107, v115, v188, v321, v398, v475, v112, v176, v249, v271, v348, v425, v113, v177, v250, v326, v403, v480), block10(v56, v121, v193, v269, v346, v423, v107, v115, v188, v321, v398, v475, v113, v177, v250, v326, v403, v480, v54, v169, v241, v317, v394, v471, v103, v170, v242, v318, v395, v472, v106, v171, v244, v320, v397, v474, v108, v172, v245, v322, v399, v476, v109, v173, v246, v323, v400, v477, v110, v174, v247, v324, v401, v478, v111, v175, v248, v325, v402, v479, v114, v178, v251, v327, v404, v481, v104, v123, v195, v319, v396, v473, v105, v120, v243, v268, v345, v422, v112, v176, v249, v271, v348, v425), block11(v113, v177, v250, v326, v403, v480, v56, v121, v193, v269, v346, v423, v54, v169, v241, v317, v394, v471, v103, v170, v242, v318, v395, v472, v106, v171, v244, v320, v397, v474, v107, v115, v188, v321, v398, v475, v108, v172, v245, v322, v399, v476, v109, v173, v246, v323, v400, v477, v110, v174, v247, v324, v401, v478, v111, v175, v248, v325, v402, v479, v114, v178, v251, v327, v404, v481), block14(v56, v121, v193, v269, v346, v423, v107, v115, v188, v321, v398, v475, v113, v177, v250, v326, v403, v480, v54, v169, v241, v317, v394, v471, v103, v170, v242, v318, v395, v472, v106, v171, v244, v320, v397, v474, v108, v172, v245, v322, v399, v476, v109, v173, v246, v323, v400, v477, v110, v174, v247, v324, v401, v478, v111, v175, v248, v325, v402, v479, v114, v178, v251, v327, v404, v481, v104, v123, v195, v319, v396, v473, v105, v120, v243, v268, v345, v422, v112, v176, v249, v271, v348, v425), block15(v113, v177, v250, v326, v403, v480, v56, v121, v193, v269, v346, v423, v54, v169, v241, v317, v394, v471, v103, v170, v242, v318, v395, v472, v106, v171, v244, v320, v397, v474, v107, v115, v188, v321, v398, v475, v108, v172, v245, v322, v399, v476, v109, v173, v246, v323, v400, v477, v110, v174, v247, v324, v401, v478, v111, v175, v248, v325, v402, v479, v114, v178, v251, v327, v404, v481), block18(v56, v121, v193, v269, v346, v423, v107, v115, v188, v321, v398, v475, v113, v177, v250, v326, v403, v480, v54, v169, v241, v317, v394, v471, v103, v170, v242, v318, v395, v472, v106, v171, v244, v320, v397, v474, v108, v172, v245, v322, v399, v476, v109, v173, v246, v323, v400, v477, v110, v174, v247, v324, v401, v478, v111, v175, v248, v325, v402, v479, v114, v178, v251, v327, v404, v481, v104, v123, v195, v319, v396, v473, v105, v120, v243, v268, v345, v422, v112, v176, v249, v271, v348, v425), block19(v113, v177, v250, v326, v403, v480, v56, v121, v193, v269, v346, v423, v54, v169, v241, v317, v394, v471, v103, v170, v242, v318, v395, v472, v106, v171, v244, v320, v397, v474, v107, v115, v188, v321, v398, v475, v108, v172, v245, v322, v399, v476, v109, v173, v246, v323, v400, v477, v110, v174, v247, v324, v401, v478, v111, v175, v248, v325, v402, v479, v114, v178, v251, v327, v404, v481, v105, v120, v243, v268, v345, v422, v112, v176, v249, v271, v348, v425)] ; v123 = 2, v195 = 6, v115 = 2, v188 = 3, v271 = 10, v348 = 14, v425 = 18, v123 = 2, v195 = 6, v271 = 10, v348 = 14, v425 = 18, v115 = 2, v188 = 3, v123 = 2, v195 = 6, v115 = 2, v188 = 3, v271 = 10, v348 = 14, v425 = 18, v123 = 2, v195 = 6, v115 = 2, v188 = 3, v271 = 10, v348 = 14, v425 = 18, v115 = 2, v188 = 3, v123 = 2, v195 = 6, v271 = 10, v348 = 14, v425 = 18, v115 = 2, v188 = 3, v115 = 2, v188 = 3, v123 = 2, v195 = 6, v271 = 10, v348 = 14, v425 = 18, v115 = 2, v188 = 3, v115 = 2, v188 = 3, v123 = 2, v195 = 6, v271 = 10, v348 = 14, v425 = 18, v115 = 2, v188 = 3, v271 = 10, v348 = 14, v425 = 18): uses value v121 from non-dominating inst97
builder.func.dfg.value_list works for Variables if I only have few blocks in my program, but it doesn't work if I have a lot of blocks, will emit error like I provided aboveSo, I'm now thinking about what's the true usage of value_list? if I can host a Value list only specify my virtual registers only, I can update my host value list as well when I update my virtual registers
Last updated: Dec 06 2025 at 06:05 UTC