Adding an intrinsic that the user can include in source code

I would like to add an intrinsic that the user can put in their code.
The intrinsic is for sending, ala MPI, a value to another processor.
I have read the short document,
https://llvm.org/docs/ExtendingLLVM.html, about adding intrinsics but
must be missing something because it doesn’t mention changing anything
in clang. I added my intrinsic to
llvm/include/llvm/IR/IntrinsicsX86.td, then I added it to
clang/include/clang/Basic/BuiltinsX86.def. When I compile my code I get:

send.c:14:3: error: cannot compile this builtin function yet
__builtin_uli_send0(1, 0, &incr);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The AST has information about my intrinsic and the parameters, but not
sure how to proceed.

What am I missing?

I suspect that you almost certainly need to also implement a handler for this in the function ‘CodeGenFunction::EmitX86BuiltinExpr’ in:

tools/clang/lib/CodeGen/CGBuiltin.cpp

All the best,

MartinO

Keep in mind that if your intrinsic has an obvious direct mapping to the builtin you’re exposing, you can just write your intrinsic in a way that it inherits from GCCBuiltin. That will avoid having to add custom lowering in CGBuiltin.cpp. There should be plenty of examples of that in the include/llvm/IR/IntrinsicsX86.td file that you already modified.