forked from OSchip/llvm-project
[LTO] Call llvm_shutdown on early exit.
In a non-LTO build is a nop. In a LTO build, we deallocate/destroy managed static and this allows us to get the output of, e.g., -time-passes without performing a full shutdown. Differential Revision: https://reviews.llvm.org/D26517 llvm-svn: 286493
This commit is contained in:
parent
218ce83f0b
commit
604d313816
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include "llvm/ADT/Twine.h"
|
#include "llvm/ADT/Twine.h"
|
||||||
#include "llvm/Support/Error.h"
|
#include "llvm/Support/Error.h"
|
||||||
|
#include "llvm/Support/ManagedStatic.h"
|
||||||
#include "llvm/Support/raw_ostream.h"
|
#include "llvm/Support/raw_ostream.h"
|
||||||
|
|
||||||
#if !defined(_MSC_VER) && !defined(__MINGW32__)
|
#if !defined(_MSC_VER) && !defined(__MINGW32__)
|
||||||
|
@ -50,6 +51,12 @@ void elf::error(std::error_code EC, const Twine &Prefix) {
|
||||||
void elf::exitLld(int Val) {
|
void elf::exitLld(int Val) {
|
||||||
outs().flush();
|
outs().flush();
|
||||||
errs().flush();
|
errs().flush();
|
||||||
|
|
||||||
|
// Dealloc/destroy ManagedStatic variables before calling
|
||||||
|
// _exit(). In a non-LTO build, this is a nop. In an LTO
|
||||||
|
// build allows us to get the output of -time-passes.
|
||||||
|
llvm_shutdown();
|
||||||
|
|
||||||
_exit(Val);
|
_exit(Val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
; REQUIRES: x86
|
||||||
|
; RUN: llvm-as %s -o %t.o
|
||||||
|
; RUN: lld -flavor gnu %t.o -o %t.so -shared -mllvm -time-passes 2>&1 | FileCheck %s
|
||||||
|
|
||||||
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
|
target triple = "x86_64-unknown-linux-gnu"
|
||||||
|
|
||||||
|
define void @patatino() {
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
; We should get the output of -time-passes even when --full-shutdown is not specified.
|
||||||
|
; CHECK: Total Execution Time
|
Loading…
Reference in New Issue