Auto merge of #132584 - Zalathar:includes, r=cuviper

Trim and tidy includes in `rustc_llvm`

These includes tend to accumulate over time, and are usually only removed when something breaks in a new LLVM version, so it's nice to clean them up manually once in a while.

General strategy used for this PR:
- Remove all includes from `LLVMWrapper.h` that aren't needed by the header itself, transplanting them to individual source files as necessary.
- For each source file, temporarily remove each include if doing so doesn't cause a compile error.
- If a “required” include looks like it shouldn't be needed, try replacing it with its sub-includes, then trim that list.
- After doing all of the above, go back and re-add any removed include if the file does actually use things defined in that header, even if the header happens to also be included by something else.
This commit is contained in:
bors 2024-11-09 09:46:08 +00:00
commit 4b198d6871
7 changed files with 145 additions and 164 deletions

View File

@ -204,7 +204,7 @@ pub enum DLLStorageClass {
DllExport = 2, // Function to be accessible from DLL. DllExport = 2, // Function to be accessible from DLL.
} }
/// Matches LLVMRustAttribute in LLVMWrapper.h /// Must match the layout of `LLVMRustAttributeKind`.
/// Semantically a subset of the C++ enum llvm::Attribute::AttrKind, /// Semantically a subset of the C++ enum llvm::Attribute::AttrKind,
/// though it is not ABI compatible (since it's a C++ enum) /// though it is not ABI compatible (since it's a C++ enum)
#[repr(C)] #[repr(C)]

View File

@ -1,5 +1,9 @@
#include "LLVMWrapper.h" #include "LLVMWrapper.h"
#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/IR/Module.h"
#include "llvm/ProfileData/Coverage/CoverageMapping.h" #include "llvm/ProfileData/Coverage/CoverageMapping.h"
#include "llvm/ProfileData/Coverage/CoverageMappingWriter.h" #include "llvm/ProfileData/Coverage/CoverageMappingWriter.h"
#include "llvm/ProfileData/InstrProf.h" #include "llvm/ProfileData/InstrProf.h"

View File

@ -1,31 +1,12 @@
#ifndef INCLUDED_RUSTC_LLVM_LLVMWRAPPER_H
#define INCLUDED_RUSTC_LLVM_LLVMWRAPPER_H
#include "SuppressLLVMWarnings.h" #include "SuppressLLVMWarnings.h"
#include "llvm-c/BitReader.h" #include "llvm/Config/llvm-config.h" // LLVM_VERSION_MAJOR, LLVM_VERSION_MINOR
#include "llvm-c/Core.h" #include "llvm/Support/raw_ostream.h" // llvm::raw_ostream
#include "llvm-c/Object.h" #include <cstddef> // size_t etc
#include "llvm/ADT/ArrayRef.h" #include <cstdint> // uint64_t etc
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/Lint.h"
#include "llvm/Analysis/Passes.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/DynamicLibrary.h"
#include "llvm/Support/FormattedStream.h"
#include "llvm/Support/JSON.h"
#include "llvm/Support/Memory.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/Timer.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetOptions.h"
#include "llvm/Transforms/IPO.h"
#include "llvm/Transforms/Scalar.h"
#define LLVM_VERSION_GE(major, minor) \ #define LLVM_VERSION_GE(major, minor) \
(LLVM_VERSION_MAJOR > (major) || \ (LLVM_VERSION_MAJOR > (major) || \
@ -33,73 +14,10 @@
#define LLVM_VERSION_LT(major, minor) (!LLVM_VERSION_GE((major), (minor))) #define LLVM_VERSION_LT(major, minor) (!LLVM_VERSION_GE((major), (minor)))
#if LLVM_VERSION_GE(20, 0)
#include "llvm/Transforms/Utils/Instrumentation.h"
#else
#include "llvm/Transforms/Instrumentation.h"
#endif
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/Bitcode/BitcodeReader.h"
#include "llvm/Bitcode/BitcodeWriter.h"
#include "llvm/IR/DIBuilder.h"
#include "llvm/IR/DebugInfo.h"
#include "llvm/IR/IRPrintingPasses.h"
#include "llvm/Linker/Linker.h"
#include "llvm/TargetParser/Triple.h"
extern "C" void LLVMRustSetLastError(const char *); extern "C" void LLVMRustSetLastError(const char *);
enum class LLVMRustResult { Success, Failure }; enum class LLVMRustResult { Success, Failure };
enum LLVMRustAttribute {
AlwaysInline = 0,
ByVal = 1,
Cold = 2,
InlineHint = 3,
MinSize = 4,
Naked = 5,
NoAlias = 6,
NoCapture = 7,
NoInline = 8,
NonNull = 9,
NoRedZone = 10,
NoReturn = 11,
NoUnwind = 12,
OptimizeForSize = 13,
ReadOnly = 14,
SExt = 15,
StructRet = 16,
UWTable = 17,
ZExt = 18,
InReg = 19,
SanitizeThread = 20,
SanitizeAddress = 21,
SanitizeMemory = 22,
NonLazyBind = 23,
OptimizeNone = 24,
ReadNone = 26,
SanitizeHWAddress = 28,
WillReturn = 29,
StackProtectReq = 30,
StackProtectStrong = 31,
StackProtect = 32,
NoUndef = 33,
SanitizeMemTag = 34,
NoCfCheck = 35,
ShadowCallStack = 36,
AllocSize = 37,
AllocatedPointer = 38,
AllocAlign = 39,
SanitizeSafeStack = 40,
FnRetThunkExtern = 41,
Writable = 42,
DeadOnUnwind = 43,
};
typedef struct OpaqueRustString *RustStringRef; typedef struct OpaqueRustString *RustStringRef;
typedef struct LLVMOpaqueTwine *LLVMTwineRef; typedef struct LLVMOpaqueTwine *LLVMTwineRef;
typedef struct LLVMOpaqueSMDiagnostic *LLVMSMDiagnosticRef; typedef struct LLVMOpaqueSMDiagnostic *LLVMSMDiagnosticRef;
@ -127,3 +45,5 @@ public:
flush(); flush();
} }
}; };
#endif // INCLUDED_RUSTC_LLVM_LLVMWRAPPER_H

View File

@ -1,8 +1,10 @@
#include "llvm/Linker/Linker.h"
#include "SuppressLLVMWarnings.h"
#include "LLVMWrapper.h" #include "LLVMWrapper.h"
#include "llvm/Bitcode/BitcodeReader.h"
#include "llvm/IR/Module.h"
#include "llvm/Linker/Linker.h"
#include "llvm/Support/MemoryBuffer.h"
using namespace llvm; using namespace llvm;
struct RustLinker { struct RustLinker {

View File

@ -1,25 +1,21 @@
#include <stdio.h>
#include <cstddef>
#include <iomanip>
#include <set>
#include <vector>
#include "LLVMWrapper.h" #include "LLVMWrapper.h"
#include "llvm/Analysis/AliasAnalysis.h" #include "llvm-c/Core.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/Lint.h"
#include "llvm/Analysis/TargetLibraryInfo.h" #include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/Bitcode/BitcodeWriter.h" #include "llvm/Bitcode/BitcodeWriter.h"
#include "llvm/CodeGen/CommandFlags.h" #include "llvm/CodeGen/CommandFlags.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/IR/AssemblyAnnotationWriter.h" #include "llvm/IR/AssemblyAnnotationWriter.h"
#include "llvm/IR/AutoUpgrade.h" #include "llvm/IR/AutoUpgrade.h"
#include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/Verifier.h" #include "llvm/IR/Verifier.h"
#include "llvm/LTO/LTO.h" #include "llvm/LTO/LTO.h"
#include "llvm/MC/MCSubtargetInfo.h"
#include "llvm/MC/TargetRegistry.h" #include "llvm/MC/TargetRegistry.h"
#include "llvm/Object/IRObjectFile.h"
#include "llvm/Object/ObjectFile.h" #include "llvm/Object/ObjectFile.h"
#include "llvm/Passes/PassBuilder.h" #include "llvm/Passes/PassBuilder.h"
#include "llvm/Passes/PassPlugin.h" #include "llvm/Passes/PassPlugin.h"
@ -30,25 +26,28 @@
#include "llvm/Support/VirtualFileSystem.h" #include "llvm/Support/VirtualFileSystem.h"
#include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetMachine.h"
#include "llvm/TargetParser/Host.h" #include "llvm/TargetParser/Host.h"
#include "llvm/Transforms/IPO/AlwaysInliner.h"
#include "llvm/Transforms/IPO/FunctionImport.h" #include "llvm/Transforms/IPO/FunctionImport.h"
#include "llvm/Transforms/IPO/Internalize.h" #include "llvm/Transforms/IPO/Internalize.h"
#include "llvm/Transforms/IPO/LowerTypeTests.h" #include "llvm/Transforms/IPO/LowerTypeTests.h"
#include "llvm/Transforms/IPO/ThinLTOBitcodeWriter.h" #include "llvm/Transforms/IPO/ThinLTOBitcodeWriter.h"
#include "llvm/Transforms/Instrumentation/AddressSanitizer.h" #include "llvm/Transforms/Instrumentation/AddressSanitizer.h"
#include "llvm/Transforms/Instrumentation/DataFlowSanitizer.h" #include "llvm/Transforms/Instrumentation/DataFlowSanitizer.h"
#include "llvm/Transforms/Utils/AddDiscriminators.h"
#include "llvm/Transforms/Utils/FunctionImportUtils.h"
#if LLVM_VERSION_GE(19, 0)
#include "llvm/Support/PGOOptions.h"
#endif
#include "llvm/Transforms/Instrumentation/HWAddressSanitizer.h" #include "llvm/Transforms/Instrumentation/HWAddressSanitizer.h"
#include "llvm/Transforms/Instrumentation/InstrProfiling.h" #include "llvm/Transforms/Instrumentation/InstrProfiling.h"
#include "llvm/Transforms/Instrumentation/MemorySanitizer.h" #include "llvm/Transforms/Instrumentation/MemorySanitizer.h"
#include "llvm/Transforms/Instrumentation/ThreadSanitizer.h" #include "llvm/Transforms/Instrumentation/ThreadSanitizer.h"
#include "llvm/Transforms/Utils.h"
#include "llvm/Transforms/Utils/CanonicalizeAliases.h" #include "llvm/Transforms/Utils/CanonicalizeAliases.h"
#include "llvm/Transforms/Utils/FunctionImportUtils.h"
#include "llvm/Transforms/Utils/NameAnonGlobals.h" #include "llvm/Transforms/Utils/NameAnonGlobals.h"
#include <set>
#include <string>
#include <vector>
// Conditional includes prevent clang-format from fully sorting the list,
// so keep them separate.
#if LLVM_VERSION_GE(19, 0)
#include "llvm/Support/PGOOptions.h"
#endif
using namespace llvm; using namespace llvm;

View File

@ -1,28 +1,38 @@
#include "LLVMWrapper.h" #include "LLVMWrapper.h"
#include "llvm-c/Core.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h" #include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/BinaryFormat/Magic.h"
#include "llvm/Bitcode/BitcodeWriter.h" #include "llvm/Bitcode/BitcodeWriter.h"
#include "llvm/IR/DIBuilder.h"
#include "llvm/IR/DebugInfoMetadata.h" #include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/DiagnosticHandler.h" #include "llvm/IR/DiagnosticHandler.h"
#include "llvm/IR/DiagnosticInfo.h" #include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/DiagnosticPrinter.h" #include "llvm/IR/DiagnosticPrinter.h"
#include "llvm/IR/GlobalVariable.h" #include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/Instructions.h" #include "llvm/IR/Instructions.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicsARM.h" #include "llvm/IR/IntrinsicsARM.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/LLVMRemarkStreamer.h" #include "llvm/IR/LLVMRemarkStreamer.h"
#include "llvm/IR/Mangler.h" #include "llvm/IR/Mangler.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Value.h" #include "llvm/IR/Value.h"
#include "llvm/Object/Archive.h"
#include "llvm/Object/COFFImportFile.h" #include "llvm/Object/COFFImportFile.h"
#include "llvm/Object/ObjectFile.h"
#include "llvm/Pass.h"
#include "llvm/Remarks/RemarkFormat.h" #include "llvm/Remarks/RemarkFormat.h"
#include "llvm/Remarks/RemarkSerializer.h" #include "llvm/Remarks/RemarkSerializer.h"
#include "llvm/Remarks/RemarkStreamer.h" #include "llvm/Remarks/RemarkStreamer.h"
#include "llvm/Support/Compression.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/JSON.h"
#include "llvm/Support/ModRef.h" #include "llvm/Support/ModRef.h"
#include "llvm/Support/Signals.h" #include "llvm/Support/Signals.h"
#include "llvm/Support/Timer.h"
#include "llvm/Support/ToolOutputFile.h" #include "llvm/Support/ToolOutputFile.h"
#include <iostream> #include <iostream>
// for raw `write` in the bad-alloc handler // for raw `write` in the bad-alloc handler
@ -216,94 +226,140 @@ extern "C" LLVMValueRef LLVMRustInsertPrivateGlobal(LLVMModuleRef M,
GlobalValue::PrivateLinkage, nullptr)); GlobalValue::PrivateLinkage, nullptr));
} }
static Attribute::AttrKind fromRust(LLVMRustAttribute Kind) { // Must match the layout of `rustc_codegen_llvm::llvm::ffi::AttributeKind`.
enum class LLVMRustAttributeKind {
AlwaysInline = 0,
ByVal = 1,
Cold = 2,
InlineHint = 3,
MinSize = 4,
Naked = 5,
NoAlias = 6,
NoCapture = 7,
NoInline = 8,
NonNull = 9,
NoRedZone = 10,
NoReturn = 11,
NoUnwind = 12,
OptimizeForSize = 13,
ReadOnly = 14,
SExt = 15,
StructRet = 16,
UWTable = 17,
ZExt = 18,
InReg = 19,
SanitizeThread = 20,
SanitizeAddress = 21,
SanitizeMemory = 22,
NonLazyBind = 23,
OptimizeNone = 24,
ReadNone = 26,
SanitizeHWAddress = 28,
WillReturn = 29,
StackProtectReq = 30,
StackProtectStrong = 31,
StackProtect = 32,
NoUndef = 33,
SanitizeMemTag = 34,
NoCfCheck = 35,
ShadowCallStack = 36,
AllocSize = 37,
AllocatedPointer = 38,
AllocAlign = 39,
SanitizeSafeStack = 40,
FnRetThunkExtern = 41,
Writable = 42,
DeadOnUnwind = 43,
};
static Attribute::AttrKind fromRust(LLVMRustAttributeKind Kind) {
switch (Kind) { switch (Kind) {
case AlwaysInline: case LLVMRustAttributeKind::AlwaysInline:
return Attribute::AlwaysInline; return Attribute::AlwaysInline;
case ByVal: case LLVMRustAttributeKind::ByVal:
return Attribute::ByVal; return Attribute::ByVal;
case Cold: case LLVMRustAttributeKind::Cold:
return Attribute::Cold; return Attribute::Cold;
case InlineHint: case LLVMRustAttributeKind::InlineHint:
return Attribute::InlineHint; return Attribute::InlineHint;
case MinSize: case LLVMRustAttributeKind::MinSize:
return Attribute::MinSize; return Attribute::MinSize;
case Naked: case LLVMRustAttributeKind::Naked:
return Attribute::Naked; return Attribute::Naked;
case NoAlias: case LLVMRustAttributeKind::NoAlias:
return Attribute::NoAlias; return Attribute::NoAlias;
case NoCapture: case LLVMRustAttributeKind::NoCapture:
return Attribute::NoCapture; return Attribute::NoCapture;
case NoCfCheck: case LLVMRustAttributeKind::NoCfCheck:
return Attribute::NoCfCheck; return Attribute::NoCfCheck;
case NoInline: case LLVMRustAttributeKind::NoInline:
return Attribute::NoInline; return Attribute::NoInline;
case NonNull: case LLVMRustAttributeKind::NonNull:
return Attribute::NonNull; return Attribute::NonNull;
case NoRedZone: case LLVMRustAttributeKind::NoRedZone:
return Attribute::NoRedZone; return Attribute::NoRedZone;
case NoReturn: case LLVMRustAttributeKind::NoReturn:
return Attribute::NoReturn; return Attribute::NoReturn;
case NoUnwind: case LLVMRustAttributeKind::NoUnwind:
return Attribute::NoUnwind; return Attribute::NoUnwind;
case OptimizeForSize: case LLVMRustAttributeKind::OptimizeForSize:
return Attribute::OptimizeForSize; return Attribute::OptimizeForSize;
case ReadOnly: case LLVMRustAttributeKind::ReadOnly:
return Attribute::ReadOnly; return Attribute::ReadOnly;
case SExt: case LLVMRustAttributeKind::SExt:
return Attribute::SExt; return Attribute::SExt;
case StructRet: case LLVMRustAttributeKind::StructRet:
return Attribute::StructRet; return Attribute::StructRet;
case UWTable: case LLVMRustAttributeKind::UWTable:
return Attribute::UWTable; return Attribute::UWTable;
case ZExt: case LLVMRustAttributeKind::ZExt:
return Attribute::ZExt; return Attribute::ZExt;
case InReg: case LLVMRustAttributeKind::InReg:
return Attribute::InReg; return Attribute::InReg;
case SanitizeThread: case LLVMRustAttributeKind::SanitizeThread:
return Attribute::SanitizeThread; return Attribute::SanitizeThread;
case SanitizeAddress: case LLVMRustAttributeKind::SanitizeAddress:
return Attribute::SanitizeAddress; return Attribute::SanitizeAddress;
case SanitizeMemory: case LLVMRustAttributeKind::SanitizeMemory:
return Attribute::SanitizeMemory; return Attribute::SanitizeMemory;
case NonLazyBind: case LLVMRustAttributeKind::NonLazyBind:
return Attribute::NonLazyBind; return Attribute::NonLazyBind;
case OptimizeNone: case LLVMRustAttributeKind::OptimizeNone:
return Attribute::OptimizeNone; return Attribute::OptimizeNone;
case ReadNone: case LLVMRustAttributeKind::ReadNone:
return Attribute::ReadNone; return Attribute::ReadNone;
case SanitizeHWAddress: case LLVMRustAttributeKind::SanitizeHWAddress:
return Attribute::SanitizeHWAddress; return Attribute::SanitizeHWAddress;
case WillReturn: case LLVMRustAttributeKind::WillReturn:
return Attribute::WillReturn; return Attribute::WillReturn;
case StackProtectReq: case LLVMRustAttributeKind::StackProtectReq:
return Attribute::StackProtectReq; return Attribute::StackProtectReq;
case StackProtectStrong: case LLVMRustAttributeKind::StackProtectStrong:
return Attribute::StackProtectStrong; return Attribute::StackProtectStrong;
case StackProtect: case LLVMRustAttributeKind::StackProtect:
return Attribute::StackProtect; return Attribute::StackProtect;
case NoUndef: case LLVMRustAttributeKind::NoUndef:
return Attribute::NoUndef; return Attribute::NoUndef;
case SanitizeMemTag: case LLVMRustAttributeKind::SanitizeMemTag:
return Attribute::SanitizeMemTag; return Attribute::SanitizeMemTag;
case ShadowCallStack: case LLVMRustAttributeKind::ShadowCallStack:
return Attribute::ShadowCallStack; return Attribute::ShadowCallStack;
case AllocSize: case LLVMRustAttributeKind::AllocSize:
return Attribute::AllocSize; return Attribute::AllocSize;
case AllocatedPointer: case LLVMRustAttributeKind::AllocatedPointer:
return Attribute::AllocatedPointer; return Attribute::AllocatedPointer;
case AllocAlign: case LLVMRustAttributeKind::AllocAlign:
return Attribute::AllocAlign; return Attribute::AllocAlign;
case SanitizeSafeStack: case LLVMRustAttributeKind::SanitizeSafeStack:
return Attribute::SafeStack; return Attribute::SafeStack;
case FnRetThunkExtern: case LLVMRustAttributeKind::FnRetThunkExtern:
return Attribute::FnRetThunkExtern; return Attribute::FnRetThunkExtern;
case Writable: case LLVMRustAttributeKind::Writable:
return Attribute::Writable; return Attribute::Writable;
case DeadOnUnwind: case LLVMRustAttributeKind::DeadOnUnwind:
return Attribute::DeadOnUnwind; return Attribute::DeadOnUnwind;
} }
report_fatal_error("bad AttributeKind"); report_fatal_error("bad LLVMRustAttributeKind");
} }
template <typename T> template <typename T>
@ -333,7 +389,7 @@ extern "C" void LLVMRustAddCallSiteAttributes(LLVMValueRef Instr,
} }
extern "C" LLVMAttributeRef extern "C" LLVMAttributeRef
LLVMRustCreateAttrNoValue(LLVMContextRef C, LLVMRustAttribute RustAttr) { LLVMRustCreateAttrNoValue(LLVMContextRef C, LLVMRustAttributeKind RustAttr) {
return wrap(Attribute::get(*unwrap(C), fromRust(RustAttr))); return wrap(Attribute::get(*unwrap(C), fromRust(RustAttr)));
} }

View File

@ -8,14 +8,14 @@
// * https://github.com/llvm/llvm-project/blob/ef6d1ec07c693352c4a60dd58db08d2d8558f6ea/llvm/lib/Object/ArchiveWriter.cpp // * https://github.com/llvm/llvm-project/blob/ef6d1ec07c693352c4a60dd58db08d2d8558f6ea/llvm/lib/Object/ArchiveWriter.cpp
#include "LLVMWrapper.h" #include "LLVMWrapper.h"
#include "SuppressLLVMWarnings.h"
#include "llvm/ADT/SmallString.h" #include "llvm/ADT/SmallString.h"
#include "llvm/IR/LLVMContext.h" #include "llvm/IR/LLVMContext.h"
#include "llvm/Object/COFF.h" #include "llvm/Object/COFF.h"
#include "llvm/Object/COFFImportFile.h" #include "llvm/Object/COFFImportFile.h"
#include "llvm/Object/IRObjectFile.h" #include "llvm/Object/IRObjectFile.h"
#include "llvm/Object/ObjectFile.h" #include "llvm/Object/ObjectFile.h"
#include <llvm/Support/raw_ostream.h> #include "llvm/Support/raw_ostream.h"
using namespace llvm; using namespace llvm;
using namespace llvm::sys; using namespace llvm::sys;