mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[NewPM][HelloWorld] Move HelloWorld to Utils
To prevent creating a new component, which creates a new library. Reviewed By: ychen Differential Revision: https://reviews.llvm.org/D95907
This commit is contained in:
parent
d38c68eaec
commit
213c28c3fc
@ -48,20 +48,11 @@ Setting up the build
|
||||
First, configure and build LLVM as described in :doc:`GettingStarted`.
|
||||
|
||||
Next, we will reuse an existing directory (creating a new directory involves
|
||||
modifying more ``CMakeLists.txt``s than we want). For
|
||||
this example, we'll use ``llvm/lib/Transforms/HelloNew/HelloWorld.cpp``,
|
||||
which has already been created. If you'd like to create your own pass, add a
|
||||
new source file into ``llvm/lib/Transforms/HelloNew/CMakeLists.txt`` under
|
||||
``HelloWorld.cpp``:
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
add_llvm_component_library(LLVMHelloWorld
|
||||
HelloWorld.cpp
|
||||
|
||||
DEPENDS
|
||||
intrinsics_gen
|
||||
)
|
||||
messing around with more CMake files than we want). For this example, we'll use
|
||||
``llvm/lib/Transforms/Utils/HelloWorld.cpp``, which has already been created.
|
||||
If you'd like to create your own pass, add a new source file into
|
||||
``llvm/lib/Transforms/Utils/CMakeLists.txt`` (assuming you want your pass in
|
||||
the ``Transforms/Utils`` directory.
|
||||
|
||||
Now that we have the build set up for a new pass, we need to write the code
|
||||
for the pass itself.
|
||||
@ -74,7 +65,7 @@ Basic code required
|
||||
Now that the build is setup for a new pass, we just have to write it.
|
||||
|
||||
First we need to define the pass in a header file. We'll create
|
||||
``llvm/include/llvm/Transforms/HelloNew/HelloWorld.h``. The file should
|
||||
``llvm/include/llvm/Transforms/Utils/HelloWorld.h``. The file should
|
||||
contain the following boilerplate:
|
||||
|
||||
.. code-block:: c++
|
||||
@ -102,12 +93,12 @@ sets up some more boilerplate so that we don't have to write it ourselves.
|
||||
Our class is in the ``llvm`` namespace so that we don't pollute the global
|
||||
namespace.
|
||||
|
||||
Next we'll create ``llvm/lib/Transforms/HelloNew/HelloWorld.cpp``, starting
|
||||
Next we'll create ``llvm/lib/Transforms/Utils/HelloWorld.cpp``, starting
|
||||
with
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
#include "llvm/Transforms/HelloNew/HelloWorld.h"
|
||||
#include "llvm/Transforms/Utils/HelloWorld.h"
|
||||
|
||||
... to include the header file we just created.
|
||||
|
||||
@ -135,7 +126,7 @@ tree) are still valid after this pass since we didn't modify any functions.
|
||||
|
||||
That's it for the pass itself. Now in order to "register" the pass, we need
|
||||
to add it to a couple places. Add the following to
|
||||
``llvm\lib\Passes\PassRegistry.def`` in the ``FUNCTION_PASS`` section
|
||||
``llvm/lib/Passes/PassRegistry.def`` in the ``FUNCTION_PASS`` section
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
@ -143,14 +134,14 @@ to add it to a couple places. Add the following to
|
||||
|
||||
... which adds the pass under the name "helloworld".
|
||||
|
||||
``llvm\lib\Passes\PassRegistry.def`` is #include'd into
|
||||
``llvm\lib\Passes\PassBuilder.cpp`` multiple times for various reasons. Since
|
||||
``llvm/lib/Passes/PassRegistry.def`` is #include'd into
|
||||
``llvm/lib/Passes/PassBuilder.cpp`` multiple times for various reasons. Since
|
||||
it constructs our pass, we need to also add the proper #include in
|
||||
``llvm\lib\Passes\PassBuilder.cpp``:
|
||||
``llvm/lib/Passes/PassBuilder.cpp``:
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
#include "llvm/Transforms/HelloNew/HelloWorld.h"
|
||||
#include "llvm/Transforms/Utils/HelloWorld.h"
|
||||
|
||||
This should be all the code necessary for our pass, now it's time to compile
|
||||
and run it.
|
||||
@ -186,12 +177,12 @@ Testing a pass
|
||||
--------------
|
||||
|
||||
Testing our pass is important to prevent future regressions. We'll add a lit
|
||||
test at ``llvm/test/Transforms/HelloNew/helloworld.ll``. See
|
||||
test at ``llvm/test/Transforms/Utils/helloworld.ll``. See
|
||||
:doc:`TestingGuide` for more information on testing.
|
||||
|
||||
.. code-block:: llvm
|
||||
|
||||
$ cat llvm/test/Transforms/HelloNew/helloworld.ll
|
||||
$ cat llvm/test/Transforms/Utils/helloworld.ll
|
||||
; RUN: opt -disable-output -passes=helloworld %s 2>&1 | FileCheck %s
|
||||
|
||||
; CHECK: {{^}}foo{{$}}
|
||||
|
@ -15,7 +15,6 @@ add_llvm_component_library(LLVMPasses
|
||||
Analysis
|
||||
Core
|
||||
Coroutines
|
||||
HelloNew
|
||||
IPO
|
||||
InstCombine
|
||||
ObjCARC
|
||||
|
@ -84,7 +84,6 @@
|
||||
#include "llvm/Transforms/Coroutines/CoroEarly.h"
|
||||
#include "llvm/Transforms/Coroutines/CoroElide.h"
|
||||
#include "llvm/Transforms/Coroutines/CoroSplit.h"
|
||||
#include "llvm/Transforms/HelloNew/HelloWorld.h"
|
||||
#include "llvm/Transforms/IPO/AlwaysInliner.h"
|
||||
#include "llvm/Transforms/IPO/Annotation2Metadata.h"
|
||||
#include "llvm/Transforms/IPO/ArgumentPromotion.h"
|
||||
@ -215,6 +214,7 @@
|
||||
#include "llvm/Transforms/Utils/CanonicalizeFreezeInLoops.h"
|
||||
#include "llvm/Transforms/Utils/EntryExitInstrumenter.h"
|
||||
#include "llvm/Transforms/Utils/FixIrreducible.h"
|
||||
#include "llvm/Transforms/Utils/HelloWorld.h"
|
||||
#include "llvm/Transforms/Utils/InjectTLIMappings.h"
|
||||
#include "llvm/Transforms/Utils/InstructionNamer.h"
|
||||
#include "llvm/Transforms/Utils/LCSSA.h"
|
||||
|
@ -6,7 +6,6 @@ add_subdirectory(Scalar)
|
||||
add_subdirectory(IPO)
|
||||
add_subdirectory(Vectorize)
|
||||
add_subdirectory(Hello)
|
||||
add_subdirectory(HelloNew)
|
||||
add_subdirectory(ObjCARC)
|
||||
add_subdirectory(Coroutines)
|
||||
add_subdirectory(CFGuard)
|
||||
|
@ -1,10 +0,0 @@
|
||||
add_llvm_component_library(LLVMHelloNew
|
||||
HelloWorld.cpp
|
||||
|
||||
DEPENDS
|
||||
intrinsics_gen
|
||||
|
||||
LINK_COMPONENTS
|
||||
Core
|
||||
Support
|
||||
)
|
@ -27,6 +27,7 @@ add_llvm_component_library(LLVMTransformUtils
|
||||
FunctionImportUtils.cpp
|
||||
GlobalStatus.cpp
|
||||
GuardUtils.cpp
|
||||
HelloWorld.cpp
|
||||
InlineFunction.cpp
|
||||
InjectTLIMappings.cpp
|
||||
InstructionNamer.cpp
|
||||
|
@ -6,7 +6,7 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Transforms/HelloNew/HelloWorld.h"
|
||||
#include "llvm/Transforms/Utils/HelloWorld.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
@ -8,7 +8,6 @@ static_library("Passes") {
|
||||
"//llvm/lib/Target",
|
||||
"//llvm/lib/Transforms/AggressiveInstCombine",
|
||||
"//llvm/lib/Transforms/Coroutines",
|
||||
"//llvm/lib/Transforms/HelloNew",
|
||||
"//llvm/lib/Transforms/IPO",
|
||||
"//llvm/lib/Transforms/InstCombine",
|
||||
"//llvm/lib/Transforms/Instrumentation",
|
||||
|
@ -1,9 +0,0 @@
|
||||
static_library("HelloNew") {
|
||||
output_name = "LLVMHelloNew"
|
||||
deps = [
|
||||
"//llvm/lib/Analysis",
|
||||
"//llvm/lib/IR",
|
||||
"//llvm/lib/Support",
|
||||
]
|
||||
sources = [ "HelloWorld.cpp" ]
|
||||
}
|
@ -34,6 +34,7 @@ static_library("Utils") {
|
||||
"FunctionImportUtils.cpp",
|
||||
"GlobalStatus.cpp",
|
||||
"GuardUtils.cpp",
|
||||
"HelloWorld.cpp",
|
||||
"InjectTLIMappings.cpp",
|
||||
"InlineFunction.cpp",
|
||||
"InstructionNamer.cpp",
|
||||
|
Loading…
x
Reference in New Issue
Block a user