Merge remote-tracking branch 'origin/master' into llvm12
Conflicts:
* src/clang.zig
* src/llvm.zig
- this file got moved to src/llvm/bindings.zig in master branch so I
had to put the new LLVM arch/os enum tags into it.
* lib/std/target.zig, src/stage1/target.cpp
- haiku had an inconsistency with its default target ABI, gnu vs
eabi. In this commit we make it gnu in both places to match the
latest changes by @hoanga.
* src/translate_c.zig
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
|
||||
#include <llvm/Analysis/TargetLibraryInfo.h>
|
||||
#include <llvm/Analysis/TargetTransformInfo.h>
|
||||
#include <llvm/Bitcode/BitcodeWriter.h>
|
||||
#include <llvm/IR/DIBuilder.h>
|
||||
#include <llvm/IR/DiagnosticInfo.h>
|
||||
#include <llvm/IR/IRBuilder.h>
|
||||
@@ -50,6 +51,7 @@
|
||||
#include <llvm/Transforms/IPO.h>
|
||||
#include <llvm/Transforms/IPO/AlwaysInliner.h>
|
||||
#include <llvm/Transforms/IPO/PassManagerBuilder.h>
|
||||
#include <llvm/Transforms/Instrumentation/ThreadSanitizer.h>
|
||||
#include <llvm/Transforms/Scalar.h>
|
||||
#include <llvm/Transforms/Utils.h>
|
||||
|
||||
@@ -93,6 +95,10 @@ static void addDiscriminatorsPass(const PassManagerBuilder &Builder, legacy::Pas
|
||||
PM.add(createAddDiscriminatorsPass());
|
||||
}
|
||||
|
||||
static void addThreadSanitizerPass(const PassManagerBuilder &Builder, legacy::PassManagerBase &PM) {
|
||||
PM.add(createThreadSanitizerLegacyPassPass());
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
static const bool assertions_on = true;
|
||||
#else
|
||||
@@ -179,7 +185,7 @@ unsigned ZigLLVMDataLayoutGetProgramAddressSpace(LLVMTargetDataRef TD) {
|
||||
|
||||
bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMModuleRef module_ref,
|
||||
char **error_message, bool is_debug,
|
||||
bool is_small, bool time_report,
|
||||
bool is_small, bool time_report, bool tsan, bool lto,
|
||||
const char *asm_filename, const char *bin_filename, const char *llvm_ir_filename)
|
||||
{
|
||||
TimePassesIsEnabled = time_report;
|
||||
@@ -229,7 +235,7 @@ bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMM
|
||||
PMBuilder->VerifyInput = assertions_on;
|
||||
PMBuilder->VerifyOutput = assertions_on;
|
||||
PMBuilder->MergeFunctions = !is_debug;
|
||||
PMBuilder->PrepareForLTO = false;
|
||||
PMBuilder->PrepareForLTO = lto;
|
||||
PMBuilder->PrepareForThinLTO = false;
|
||||
PMBuilder->PerformThinLTO = false;
|
||||
|
||||
@@ -245,6 +251,11 @@ bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMM
|
||||
PMBuilder->Inliner = createFunctionInliningPass(PMBuilder->OptLevel, PMBuilder->SizeLevel, false);
|
||||
}
|
||||
|
||||
if (tsan) {
|
||||
PMBuilder->addExtension(PassManagerBuilder::EP_OptimizerLast, addThreadSanitizerPass);
|
||||
PMBuilder->addExtension(PassManagerBuilder::EP_EnabledOnOptLevel0, addThreadSanitizerPass);
|
||||
}
|
||||
|
||||
// Set up the per-function pass manager.
|
||||
legacy::FunctionPassManager FPM = legacy::FunctionPassManager(module);
|
||||
auto tliwp = new(std::nothrow) TargetLibraryInfoWrapperPass(tlii);
|
||||
@@ -262,7 +273,7 @@ bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMM
|
||||
PMBuilder->populateModulePassManager(MPM);
|
||||
|
||||
// Set output passes.
|
||||
if (dest_bin) {
|
||||
if (dest_bin && !lto) {
|
||||
if (target_machine->addPassesToEmitFile(MPM, *dest_bin, nullptr, CGFT_ObjectFile)) {
|
||||
*error_message = strdup("TargetMachine can't emit an object file");
|
||||
return true;
|
||||
@@ -289,6 +300,9 @@ bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMM
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (dest_bin && lto) {
|
||||
WriteBitcodeToFile(*module, *dest_bin);
|
||||
}
|
||||
|
||||
if (time_report) {
|
||||
TimerGroup::printAll(errs());
|
||||
|
||||
Reference in New Issue
Block a user