diff --git a/docs/ExtendingLLVM.html b/docs/ExtendingLLVM.html index 234a1543f71..631a09bd6d6 100644 --- a/docs/ExtendingLLVM.html +++ b/docs/ExtendingLLVM.html @@ -53,9 +53,9 @@ different passes that you intend to use with your extension, and there are many LLVM analyses and transformations, so it may be quite a bit of work.

-

Adding an intrinsic function is easier than adding -an instruction, and is transparent to optimization passes which treat it as an -unanalyzable function. If your added functionality can be expressed as a +

Adding an intrinsic function is far easier than +adding an instruction, and is transparent to optimization passes. If your added +functionality can be expressed as a function call, an intrinsic function is the method of choice for LLVM extension.

@@ -85,8 +85,9 @@ function and then be turned into an instruction if warranted.

what the restrictions are. Talk to other people about it so that you are sure it's a good idea. -
  • llvm/include/llvm/Intrinsics.td: - Add an entry for your intrinsic.
  • +
  • llvm/include/llvm/Intrinsics*.td: + Add an entry for your intrinsic. Describe its memory access characteristics + for optimization (this controls whether it will be DCE'd, CSE'd, etc).
  • llvm/lib/Analysis/ConstantFolding.cpp: If it is possible to constant fold your intrinsic, add support to it in the @@ -116,22 +117,13 @@ generator emit code that prints an error message and calls abort if executed.
    -
    Add support to the SelectionDAG Instruction Selector in -lib/CodeGen/SelectionDAG/
    +
    Add support to the .td file for the target(s) of your choice in + lib/Target/*/*.td.
    -
    Since most targets in LLVM use the SelectionDAG framework for generating -code, you will likely need to add support for your intrinsic there as well. -This is usually accomplished by adding a new node, and then teaching the -SelectionDAG code how to handle that node. To do this, follow the steps in -the Adding a new SelectionDAG node section.
    - -
    -
    Once you have added the new node, add code to -SelectionDAG/SelectionDAGISel.cpp to recognize the intrinsic. In most -cases, the intrinsic will just be turned into the node you just added. For an -example of this, see how visitIntrinsicCall handles -Intrinsic::ctpop_*. -
    +
    This is usually a matter of adding a pattern to the .td file that matches + the intrinsic, though it may obviously require adding the instructions you + want to generate as well. There are lots of examples in the PowerPC and X86 + backend to follow.