diff options
author | Chris Lattner <sabre@nondot.org> | 2004-04-09 19:24:20 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-04-09 19:24:20 +0000 |
commit | 8ffe3e0b723d261ffb589f738bd2730b0e82f3fb (patch) | |
tree | 201a5eb588a6f72ecab35320a13c0ea0900841c7 /llvm/docs/ExtendingLLVM.html | |
parent | 2b4c96e7582ee5e31143006c626c6ad820825443 (diff) | |
download | bcm5719-llvm-8ffe3e0b723d261ffb589f738bd2730b0e82f3fb.tar.gz bcm5719-llvm-8ffe3e0b723d261ffb589f738bd2730b0e82f3fb.zip |
Expand on adding an intrinsic. Move section to before adding an instruction
llvm-svn: 12796
Diffstat (limited to 'llvm/docs/ExtendingLLVM.html')
-rw-r--r-- | llvm/docs/ExtendingLLVM.html | 66 |
1 files changed, 40 insertions, 26 deletions
diff --git a/llvm/docs/ExtendingLLVM.html b/llvm/docs/ExtendingLLVM.html index 7dc8d15dfea..b4519cc7bc6 100644 --- a/llvm/docs/ExtendingLLVM.html +++ b/llvm/docs/ExtendingLLVM.html @@ -14,8 +14,8 @@ <ol> <li><a href="#introduction">Introduction and Warning</a></li> - <li><a href="#instruction">Adding a new instruction</a></li> <li><a href="#intrinsic">Adding a new intrinsic function</a></li> + <li><a href="#instruction">Adding a new instruction</a></li> <li><a href="#type">Adding a new type</a> <ol> <li><a href="#fund_type">Adding a new fundamental type</a></li> @@ -71,6 +71,45 @@ href="http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM-dev</a>.</p> <!-- *********************************************************************** --> <div class="doc_section"> + <a name="intrinsic">Adding a new intrinsic function</a> +</div> +<!-- *********************************************************************** --> + +<div class="doc_text"> + +<p>Adding a new intrinsic function to LLVM is much easier than adding a new +instruction. Almost all extensions to LLVM should start as an intrinsic +function and then be turned into an instruction if warranted.</p> + +<ol> +<li><tt>llvm/docs/LangRef.html</tt>: + Document the intrinsic. Decide whether it is code generator specific and + 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.h</tt>: + add an enum in the <tt>llvm::Intrinsic</tt> namespace</li> + +<li><tt>llvm/lib/VMCore/IntrinsicLowering.cpp</tt>: + implement the lowering for this intrinsic</li> + +<li><tt>llvm/lib/VMCore/Verifier.cpp</tt>: + Add code to check the invariants of the intrinsic are respected.</li> + +<li><tt>llvm/lib/VMCore/Function.cpp (<tt>Function::getIntrinsicID()</tt>)</tt>: + Identify the new intrinsic function, returning the enum for the intrinsic + that you added.</li> +<li>Test your intrinsic</li> +<li><tt>llvm/test/Regression/*</tt>: add your test cases to the test suite.</li> +</ol> + +<p>If this intrinsic requires code generator support (ie, it cannot be lowered). +You should also add support to the code generator in question.</p> + +</div> + +<!-- *********************************************************************** --> +<div class="doc_section"> <a name="instruction">Adding a new instruction</a> </div> <!-- *********************************************************************** --> @@ -116,31 +155,6 @@ to understand this new instruction.</p> </div> -<!-- *********************************************************************** --> -<div class="doc_section"> - <a name="intrinsic">Adding a new intrinsic function</a> -</div> -<!-- *********************************************************************** --> - -<div class="doc_text"> - -<ol> - -<li><tt>llvm/include/llvm/Intrinsics.h</tt>: - add an enum in the <tt>llvm::Intrinsic</tt> namespace</li> - -<li><tt>llvm/lib/VMCore/IntrinsicLowering.cpp</tt>: - implement the lowering for this intrinsic</li> - -<li><tt>llvm/lib/VMCore/Verifier.cpp</tt>: - handle the new intrinsic</li> - -<li><tt>llvm/lib/VMCore/Function.cpp</tt>: - handle the new intrinsic</li> - -</ol> - -</div> <!-- *********************************************************************** --> <div class="doc_section"> |