From 3f7f883e060923a0844971e0a8a16e459ef9e099 Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Sat, 13 Feb 2016 22:58:43 +0000 Subject: [PATCH] Support: Fix incremental build when re-configuring targets r180893 added an indirect include of llvm/Config/Targets.def to llvm/Support/CodeGen.h, which in turn is included by things like llvm/IR/Module.h. After a full build of LLVM and Clang, ninja had to rebuild 1274 files after reconfiguring. This commit strips CodeGen.h back down to just a pile of enums and moves the expensive includes over to CodeGenCWrappers.h (which is only included in two places). This gets ninja down to 88 files if you reconfigure with, e.g., -DLLVM_TARGETS_TO_BUILD=X86. llvm-svn: 260835 --- llvm/include/llvm/Support/CodeGen.h | 40 +------------- llvm/include/llvm/Support/CodeGenCWrappers.h | 64 ++++++++++++++++++++++ .../ExecutionEngine/ExecutionEngineBindings.cpp | 1 + llvm/lib/Target/TargetMachineC.cpp | 2 +- 4 files changed, 67 insertions(+), 40 deletions(-) create mode 100644 llvm/include/llvm/Support/CodeGenCWrappers.h diff --git a/llvm/include/llvm/Support/CodeGen.h b/llvm/include/llvm/Support/CodeGen.h index 243f2dd..0ff3d56 100644 --- a/llvm/include/llvm/Support/CodeGen.h +++ b/llvm/include/llvm/Support/CodeGen.h @@ -15,9 +15,6 @@ #ifndef LLVM_SUPPORT_CODEGEN_H #define LLVM_SUPPORT_CODEGEN_H -#include "llvm-c/TargetMachine.h" -#include "llvm/Support/ErrorHandling.h" - namespace llvm { // Relocation model types. @@ -27,6 +24,7 @@ namespace llvm { // Code model types. namespace CodeModel { + // Sync changes with CodeGenCWrappers.h. enum Model { Default, JITDefault, Small, Kernel, Medium, Large }; } @@ -54,42 +52,6 @@ namespace llvm { }; } - // Create wrappers for C Binding types (see CBindingWrapping.h). - inline CodeModel::Model unwrap(LLVMCodeModel Model) { - switch (Model) { - case LLVMCodeModelDefault: - return CodeModel::Default; - case LLVMCodeModelJITDefault: - return CodeModel::JITDefault; - case LLVMCodeModelSmall: - return CodeModel::Small; - case LLVMCodeModelKernel: - return CodeModel::Kernel; - case LLVMCodeModelMedium: - return CodeModel::Medium; - case LLVMCodeModelLarge: - return CodeModel::Large; - } - return CodeModel::Default; - } - - inline LLVMCodeModel wrap(CodeModel::Model Model) { - switch (Model) { - case CodeModel::Default: - return LLVMCodeModelDefault; - case CodeModel::JITDefault: - return LLVMCodeModelJITDefault; - case CodeModel::Small: - return LLVMCodeModelSmall; - case CodeModel::Kernel: - return LLVMCodeModelKernel; - case CodeModel::Medium: - return LLVMCodeModelMedium; - case CodeModel::Large: - return LLVMCodeModelLarge; - } - llvm_unreachable("Bad CodeModel!"); - } } // end llvm namespace #endif diff --git a/llvm/include/llvm/Support/CodeGenCWrappers.h b/llvm/include/llvm/Support/CodeGenCWrappers.h new file mode 100644 index 0000000..a97f1a4 --- /dev/null +++ b/llvm/include/llvm/Support/CodeGenCWrappers.h @@ -0,0 +1,64 @@ +//===- llvm/Support/CodeGenCWrappers.h - CodeGen C Wrappers -----*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines C bindings wrappers for enums in llvm/Support/CodeGen.h +// that need them. The wrappers are separated to avoid adding an indirect +// dependency on llvm/Config/Targets.def to CodeGen.h. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_SUPPORT_CODEGENCWRAPPERS_H +#define LLVM_SUPPORT_CODEGENCWRAPPERS_H + +#include "llvm-c/TargetMachine.h" +#include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/CodeGenCWrappers.h" + +namespace llvm { + +inline CodeModel::Model unwrap(LLVMCodeModel Model) { + switch (Model) { + case LLVMCodeModelDefault: + return CodeModel::Default; + case LLVMCodeModelJITDefault: + return CodeModel::JITDefault; + case LLVMCodeModelSmall: + return CodeModel::Small; + case LLVMCodeModelKernel: + return CodeModel::Kernel; + case LLVMCodeModelMedium: + return CodeModel::Medium; + case LLVMCodeModelLarge: + return CodeModel::Large; + } + return CodeModel::Default; +} + +inline LLVMCodeModel wrap(CodeModel::Model Model) { + switch (Model) { + case CodeModel::Default: + return LLVMCodeModelDefault; + case CodeModel::JITDefault: + return LLVMCodeModelJITDefault; + case CodeModel::Small: + return LLVMCodeModelSmall; + case CodeModel::Kernel: + return LLVMCodeModelKernel; + case CodeModel::Medium: + return LLVMCodeModelMedium; + case CodeModel::Large: + return LLVMCodeModelLarge; + } + llvm_unreachable("Bad CodeModel!"); +} + +} // end llvm namespace + +#endif + diff --git a/llvm/lib/ExecutionEngine/ExecutionEngineBindings.cpp b/llvm/lib/ExecutionEngine/ExecutionEngineBindings.cpp index 3b2eb16..d6b209a 100644 --- a/llvm/lib/ExecutionEngine/ExecutionEngineBindings.cpp +++ b/llvm/lib/ExecutionEngine/ExecutionEngineBindings.cpp @@ -17,6 +17,7 @@ #include "llvm/ExecutionEngine/RTDyldMemoryManager.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/Module.h" +#include "llvm/Support/CodeGenCWrappers.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Target/TargetOptions.h" #include diff --git a/llvm/lib/Target/TargetMachineC.cpp b/llvm/lib/Target/TargetMachineC.cpp index 25bfcbe..9405ba7f2 100644 --- a/llvm/lib/Target/TargetMachineC.cpp +++ b/llvm/lib/Target/TargetMachineC.cpp @@ -18,7 +18,7 @@ #include "llvm/IR/DataLayout.h" #include "llvm/IR/Module.h" #include "llvm/IR/LegacyPassManager.h" -#include "llvm/Support/CodeGen.h" +#include "llvm/Support/CodeGenCWrappers.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/FormattedStream.h" #include "llvm/Support/Host.h" -- 2.7.4