[LLVMdev] Proposal for pluggable intrinsics

Mai, Haohui haohui.mai at gmail.com
Fri Jun 12 14:52:20 PDT 2009

Hi all,

Greetings. I'm a Ph.D. student in UIUC. Now I'm working on SAFECode, a
research compiler based on LLVM  which insert necessary runtime checks
to guarantee memory-safety of programs. SAFECode needs to insert checks
into the programs (say, please check this load instruction for me).

Currently SAFECode inserts these checks as normal call instructions. It
would be great that LLVM can treat them as first-class intrinsics (like
"llvm.ctz"), which have additional semantics and could be lowered as
ordinary function calls in subsequent passes.

This would be very useful because 1) It simplifies the analysis logic 2)
LLVM can apply out-of-box compiler optimization technique way more
easily on these programs (for example, SAFECode has special hacks to
teach the LICM pass understand these runtime checks) 3) It completely
avoid the naming conflicts between the tool and the program.

Based on my observation, there are a number of research tools might have
the same requirement above. For instance, Automatic Pool
Allocation(PLDI'05), KLEE(OSDI'08) and SoftBound(PLDI'09) all insert
special intrinsics into programs to perform domain-specific tasks.
Having pluggable, first-class intrinsics would simplify the tasks a lot.

I'm glad to dig in and implement it if you guys are interested. It seems
to me that simply making llvm::CallInst inheritable would be enough.

Comments and suggestions are highly appreciated.



More information about the llvm-dev mailing list