diff options
Diffstat (limited to 'tools/llvm-extract/llvm-extract.cpp')
-rw-r--r-- | tools/llvm-extract/llvm-extract.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/tools/llvm-extract/llvm-extract.cpp b/tools/llvm-extract/llvm-extract.cpp index 882455fc27..766860fd4f 100644 --- a/tools/llvm-extract/llvm-extract.cpp +++ b/tools/llvm-extract/llvm-extract.cpp @@ -42,6 +42,10 @@ Force("f", cl::desc("Overwrite output files")); static cl::opt<bool> DeleteFn("delete", cl::desc("Delete specified function from Module")); +static cl::opt<bool> +Relink("relink", + cl::desc("Turn external linkage for callees of function to delete")); + // ExtractFunc - The function to extract from the module... defaults to main. static cl::opt<std::string> ExtractFunc("func", cl::desc("Specify function to extract"), cl::init("main"), @@ -72,8 +76,9 @@ int main(int argc, char **argv) { PassManager Passes; Passes.add(new TargetData(M.get())); // Use correct TargetData // Either isolate the function or delete it from the Module - Passes.add(createFunctionExtractionPass(F, DeleteFn)); - Passes.add(createGlobalDCEPass()); // Delete unreachable globals + Passes.add(createFunctionExtractionPass(F, DeleteFn, Relink)); + if (!DeleteFn) + Passes.add(createGlobalDCEPass()); // Delete unreachable globals Passes.add(createFunctionResolvingPass()); // Delete prototypes Passes.add(createDeadTypeEliminationPass()); // Remove dead types... |