forked from OSchip/llvm-project
* Add the use of LOADABLE_MODULE=1 in the makefile example
* Change the names of the resulting module to Hello instead of libHello * Change lib/Debug -> Debug/lib per new makefile implementation. llvm-svn: 19459
This commit is contained in:
parent
1e008c200d
commit
4a1ab18fbf
|
@ -2,6 +2,7 @@
|
|||
"http://www.w3.org/TR/html4/strict.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>Writing an LLVM Pass</title>
|
||||
<link rel="stylesheet" href="llvm.css" type="text/css">
|
||||
</head>
|
||||
|
@ -169,21 +170,25 @@ source tree in the <tt>lib/Transforms/Hello</tt> directory.</p>
|
|||
LEVEL = ../../..
|
||||
|
||||
# Name of the library to build
|
||||
LIBRARYNAME = hello
|
||||
LIBRARYNAME = Hello
|
||||
|
||||
# Build a dynamically loadable shared object
|
||||
# Build a dynamically linkable shared object
|
||||
SHARED_LIBRARY = 1
|
||||
|
||||
# Make the shared library become a loadable module so the tools can
|
||||
# dlopen/dlsym on the resulting library.
|
||||
LOADABLE_MODULE
|
||||
|
||||
# Include the makefile implementation stuff
|
||||
include $(LEVEL)/Makefile.common
|
||||
</pre>
|
||||
|
||||
<p>This makefile specifies that all of the <tt>.cpp</tt> files in the current
|
||||
directory are to be compiled and linked together into a
|
||||
<tt>lib/Debug/libhello.so</tt> shared object that can be dynamically loaded by
|
||||
the <tt>opt</tt> or <tt>analyze</tt> tools. If your operating system uses a
|
||||
suffix other than .so (such as windows or Mac OS/X), the appropriate extension
|
||||
will be used.</p>
|
||||
<tt>Debug/lib/Hello.so</tt> shared object that can be dynamically loaded by
|
||||
the <tt>opt</tt> or <tt>analyze</tt> tools via their <tt>-load</tt> options.
|
||||
If your operating system uses a suffix other than .so (such as windows or
|
||||
Mac OS/X), the appropriate extension will be used.</p>
|
||||
|
||||
<p>Now that we have the build scripts set up, we just need to write the code for
|
||||
the pass itself.</p>
|
||||
|
@ -290,7 +295,7 @@ depending on what it is to be used for. For "optimizations" we use the
|
|||
|
||||
<p>Now that it's all together, compile the file with a simple "<tt>gmake</tt>"
|
||||
command in the local directory and you should get a new
|
||||
"<tt>lib/Debug/libhello.so</tt> file. Note that everything in this file is
|
||||
"<tt>Debug/lib/Hello.so</tt> file. Note that everything in this file is
|
||||
contained in an anonymous namespace: this reflects the fact that passes are self
|
||||
contained units that do not need external interfaces (although they can have
|
||||
them) to be useful.</p>
|
||||
|
@ -316,7 +321,7 @@ through our transformation like this (or course, any bytecode file will
|
|||
work):</p>
|
||||
|
||||
<pre>
|
||||
$ opt -load ../../../lib/Debug/libhello.so -hello < hello.bc > /dev/null
|
||||
$ opt -load ../../../Debug/lib/Hello.so -hello < hello.bc > /dev/null
|
||||
Hello: __main
|
||||
Hello: puts
|
||||
Hello: main
|
||||
|
@ -333,7 +338,7 @@ interesting way, we just throw away the result of <tt>opt</tt> (sending it to
|
|||
<tt>opt</tt> with the <tt>--help</tt> option:</p>
|
||||
|
||||
<pre>
|
||||
$ opt -load ../../../lib/Debug/libhello.so --help
|
||||
$ opt -load ../../../Debug/lib/Hello.so --help
|
||||
OVERVIEW: llvm .bc -> .bc modular optimizer
|
||||
|
||||
USAGE: opt [options] <input bytecode>
|
||||
|
@ -361,7 +366,7 @@ the execution time of your pass along with the other passes you queue up. For
|
|||
example:</p>
|
||||
|
||||
<pre>
|
||||
$ opt -load ../../../lib/Debug/libhello.so -hello -time-passes < hello.bc > /dev/null
|
||||
$ opt -load ../../../Debug/lib/Hello.so -hello -time-passes < hello.bc > /dev/null
|
||||
Hello: __main
|
||||
Hello: puts
|
||||
Hello: main
|
||||
|
@ -1286,7 +1291,7 @@ how our <a href="#basiccode">Hello World</a> pass interacts with other passes.
|
|||
Lets try it out with the <tt>gcse</tt> and <tt>licm</tt> passes:</p>
|
||||
|
||||
<pre>
|
||||
$ opt -load ../../../lib/Debug/libhello.so -gcse -licm --debug-pass=Structure < hello.bc > /dev/null
|
||||
$ opt -load ../../../Debug/lib/Hello.so -gcse -licm --debug-pass=Structure < hello.bc > /dev/null
|
||||
Module Pass Manager
|
||||
Function Pass Manager
|
||||
Dominator Set Construction
|
||||
|
@ -1323,7 +1328,7 @@ passes.</p>
|
|||
World</a> pass in between the two passes:</p>
|
||||
|
||||
<pre>
|
||||
$ opt -load ../../../lib/Debug/libhello.so -gcse -hello -licm --debug-pass=Structure < hello.bc > /dev/null
|
||||
$ opt -load ../../../Debug/lib/Hello.so -gcse -hello -licm --debug-pass=Structure < hello.bc > /dev/null
|
||||
Module Pass Manager
|
||||
Function Pass Manager
|
||||
Dominator Set Construction
|
||||
|
@ -1364,7 +1369,7 @@ href="#getAnalysisUsage"><tt>getAnalysisUsage</tt></a> method to our pass:</p>
|
|||
<p>Now when we run our pass, we get this output:</p>
|
||||
|
||||
<pre>
|
||||
$ opt -load ../../../lib/Debug/libhello.so -gcse -hello -licm --debug-pass=Structure < hello.bc > /dev/null
|
||||
$ opt -load ../../../Debug/lib/Hello.so -gcse -hello -licm --debug-pass=Structure < hello.bc > /dev/null
|
||||
Pass Arguments: -gcse -hello -licm
|
||||
Module Pass Manager
|
||||
Function Pass Manager
|
||||
|
|
Loading…
Reference in New Issue