forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix LTO handling of module-level assembly (PR14152).
Patch by Tom Roeder! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191042 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Showing
12 changed files
with
167 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -28,6 +28,7 @@ set(LLVM_TEST_DEPENDS | |
llvm-extract | ||
llvm-dwarfdump | ||
llvm-link | ||
llvm-lto | ||
llvm-mc | ||
llvm-mcmarkup | ||
llvm-nm | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
; RUN: llvm-as < %s >%t1 | ||
; RUN: llvm-lto -o %t2 %t1 | ||
|
||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" | ||
target triple = "x86_64-unknown-linux-gnu" | ||
|
||
module asm ".text" | ||
module asm ".align 16, 0x90" | ||
module asm ".type PR14512, @function" | ||
module asm "PR14512:.cfi_startproc" | ||
module asm "ret" | ||
module asm ".cfi_endproc" | ||
|
||
declare void @PR14512() | ||
|
||
define i32 @main(i32 %argc, i8** %argv) { | ||
call void @PR14512() | ||
ret i32 0 | ||
} | ||
; XFAIL: win32 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
targets = set(config.root.targets_to_build.split()) | ||
if not 'X86' in targets: | ||
config.unsupported = True |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
add_llvm_tool(llvm-lto | ||
llvm-lto.cpp | ||
) | ||
|
||
target_link_libraries(llvm-lto LTO LLVMSupport) | ||
|
||
add_dependencies(llvm-lto lto) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
##===- tools/llvm-lto/Makefile -----------------------------*- Makefile -*-===## | ||
# | ||
# The LLVM Compiler Infrastructure | ||
# | ||
# This file is distributed under the University of Illinois Open Source | ||
# License. See LICENSE.TXT for details. | ||
# | ||
##===----------------------------------------------------------------------===## | ||
|
||
LEVEL := ../.. | ||
TOOLNAME := llvm-lto | ||
LINK_COMPONENTS := support | ||
|
||
# This tool has no plugins, optimize startup time. | ||
TOOL_NO_EXPORTS := 1 | ||
|
||
NO_INSTALL := 1 | ||
|
||
include $(LEVEL)/Makefile.common | ||
|
||
LDFLAGS += -L$(LibDir) | ||
LIBS += -lLTO |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
//===-- llvm-lto: a simple command-line program to link modules with LTO --===// | ||
// | ||
// The LLVM Compiler Infrastructure | ||
// | ||
// This file is distributed under the University of Illinois Open Source | ||
// License. See LICENSE.TXT for details. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// This program takes in a list of bitcode files, links them, performs link-time | ||
// optimization, and outputs an object file. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#include "llvm-c/lto.h" | ||
#include "llvm/Support/CommandLine.h" | ||
#include "llvm/Support/ManagedStatic.h" | ||
#include "llvm/Support/PrettyStackTrace.h" | ||
#include "llvm/Support/Signals.h" | ||
#include "llvm/Support/raw_ostream.h" | ||
|
||
using namespace llvm; | ||
|
||
static cl::list<std::string> InputFilenames(cl::Positional, cl::OneOrMore, | ||
cl::desc("<input bitcode files>")); | ||
|
||
static cl::opt<std::string> OutputFilename("o", | ||
cl::desc("Override output filename"), | ||
cl::init(""), | ||
cl::value_desc("filename")); | ||
|
||
int main(int argc, char **argv) { | ||
// Print a stack trace if we signal out. | ||
sys::PrintStackTraceOnErrorSignal(); | ||
PrettyStackTraceProgram X(argc, argv); | ||
|
||
llvm_shutdown_obj Y; // Call llvm_shutdown() on exit. | ||
cl::ParseCommandLineOptions(argc, argv, "llvm LTO linker\n"); | ||
|
||
unsigned BaseArg = 0; | ||
std::string ErrorMessage; | ||
|
||
lto_code_gen_t code_gen = lto_codegen_create(); | ||
if (code_gen == NULL) | ||
errs() << argv[0] << ": error creating a code generation module: " | ||
<< lto_get_error_message() << "\n"; | ||
|
||
lto_codegen_set_pic_model(code_gen, LTO_CODEGEN_PIC_MODEL_DYNAMIC); | ||
lto_codegen_set_debug_model(code_gen, LTO_DEBUG_MODEL_DWARF); | ||
|
||
for (unsigned i = BaseArg; i < InputFilenames.size(); ++i) { | ||
lto_module_t BitcodeModule = lto_module_create(InputFilenames[i].c_str()); | ||
if (BitcodeModule == NULL) { | ||
errs() << argv[0] << ": error loading file '" << InputFilenames[i] | ||
<< "': " << lto_get_error_message() << "\n"; | ||
return 1; | ||
} | ||
|
||
if (lto_codegen_add_module(code_gen, BitcodeModule)) { | ||
errs() << argv[0] << ": error adding file '" << InputFilenames[i] | ||
<< "': " << lto_get_error_message() << "\n"; | ||
lto_module_dispose(BitcodeModule); | ||
return 1; | ||
} | ||
|
||
lto_module_dispose(BitcodeModule); | ||
} | ||
|
||
if (!OutputFilename.empty()) { | ||
size_t len = 0; | ||
const void *Code = lto_codegen_compile(code_gen, &len); | ||
if (Code == NULL) { | ||
errs() << argv[0] | ||
<< ": error compiling the code: " << lto_get_error_message() | ||
<< "\n"; | ||
return 1; | ||
} | ||
|
||
std::string ErrorInfo; | ||
raw_fd_ostream FileStream(OutputFilename.c_str(), ErrorInfo); | ||
if (!ErrorInfo.empty()) { | ||
errs() << argv[0] << ": error opening the file '" << OutputFilename | ||
<< "': " << ErrorInfo << "\n"; | ||
return 1; | ||
} | ||
|
||
FileStream.write(reinterpret_cast<const char *>(Code), len); | ||
} else { | ||
const char *OutputName = NULL; | ||
if (lto_codegen_compile_to_file(code_gen, &OutputName)) { | ||
errs() << argv[0] | ||
<< ": error compiling the code: " << lto_get_error_message() | ||
<< "\n"; | ||
return 1; | ||
} | ||
|
||
outs() << "Wrote native object file '" << OutputName << "'\n"; | ||
} | ||
|
||
lto_codegen_dispose(code_gen); | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters