diff options
author | Chris Lattner <sabre@nondot.org> | 2006-04-12 17:42:39 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-04-12 17:42:39 +0000 |
commit | 35dd5b0f58cba3f202a54cdfd393df3a3debdbf8 (patch) | |
tree | 8e7d83a949eb7e27389ed0ddc433d7c4d66538a1 /docs | |
parent | 65c1e46ebdfd66bea7a8872d5416c0d770f1c77d (diff) | |
download | external_llvm-35dd5b0f58cba3f202a54cdfd393df3a3debdbf8.zip external_llvm-35dd5b0f58cba3f202a54cdfd393df3a3debdbf8.tar.gz external_llvm-35dd5b0f58cba3f202a54cdfd393df3a3debdbf8.tar.bz2 |
Update adding an intrinsic to describe that you can now just plop it into the
target .td file instead of adding SDNodes etc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27616 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs')
-rw-r--r-- | docs/ExtendingLLVM.html | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/docs/ExtendingLLVM.html b/docs/ExtendingLLVM.html index 234a154..631a09b 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 <em>many</em> LLVM analyses and transformations, so it may be quite a bit of work.</p> -<p>Adding an <a href="#intrinsic">intrinsic function</a> 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 +<p>Adding an <a href="#intrinsic">intrinsic function</a> 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.</p> @@ -85,8 +85,9 @@ function and then be turned into an instruction if warranted.</p> what the restrictions are. Talk to other people about it so that you are sure it's a good idea.</li> -<li><tt>llvm/include/llvm/Intrinsics.td</tt>: - Add an entry for your intrinsic.</li> +<li><tt>llvm/include/llvm/Intrinsics*.td</tt>: + Add an entry for your intrinsic. Describe its memory access characteristics + for optimization (this controls whether it will be DCE'd, CSE'd, etc).</li> <li><tt>llvm/lib/Analysis/ConstantFolding.cpp</tt>: 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. </dd> <dl> -<dt>Add support to the SelectionDAG Instruction Selector in -<tt>lib/CodeGen/SelectionDAG/</tt></dt> +<dt>Add support to the .td file for the target(s) of your choice in + <tt>lib/Target/*/*.td</tt>.</dt> -<dd>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 <a href="#sdnode">Adding a new SelectionDAG node</a> section.</dd> - -<dl> -<dt>Once you have added the new node, add code to -<tt>SelectionDAG/SelectionDAGISel.cpp</tt> 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 <tt>visitIntrinsicCall</tt> handles -<tt>Intrinsic::ctpop_*</tt>. -</dt> +<dd>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.</dd> </div> |