fully exploited the dropped support of LLVM 8

This commit grepped for LLVM_VERSION_GE, LLVM_VERSION_LT, get_major_version and
min-llvm-version and statically evaluated every expression possible
(and sensible) assuming that the LLVM version is >=9 now
This commit is contained in:
DevJPM 2020-11-07 23:25:45 +01:00
parent 6830f1c6e2
commit b51bcc72d9
9 changed files with 8 additions and 73 deletions

View file

@ -147,17 +147,9 @@ fn set_probestack(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
fn translate_obsolete_target_features(feature: &str) -> &str { fn translate_obsolete_target_features(feature: &str) -> &str {
const LLVM9_FEATURE_CHANGES: &[(&str, &str)] = const LLVM9_FEATURE_CHANGES: &[(&str, &str)] =
&[("+fp-only-sp", "-fp64"), ("-fp-only-sp", "+fp64"), ("+d16", "-d32"), ("-d16", "+d32")]; &[("+fp-only-sp", "-fp64"), ("-fp-only-sp", "+fp64"), ("+d16", "-d32"), ("-d16", "+d32")];
if llvm_util::get_major_version() >= 9 { for &(old, new) in LLVM9_FEATURE_CHANGES {
for &(old, new) in LLVM9_FEATURE_CHANGES { if feature == old {
if feature == old { return new;
return new;
}
}
} else {
for &(old, new) in LLVM9_FEATURE_CHANGES {
if feature == new {
return old;
}
} }
} }
feature feature

View file

@ -377,11 +377,6 @@ fn get_pgo_use_path(config: &ModuleConfig) -> Option<CString> {
} }
pub(crate) fn should_use_new_llvm_pass_manager(config: &ModuleConfig) -> bool { pub(crate) fn should_use_new_llvm_pass_manager(config: &ModuleConfig) -> bool {
// We only support the new pass manager starting with LLVM 9.
if llvm_util::get_major_version() < 9 {
return false;
}
// The new pass manager is disabled by default. // The new pass manager is disabled by default.
config.new_llvm_pass_manager config.new_llvm_pass_manager
} }

View file

@ -119,9 +119,6 @@ pub unsafe fn create_module(
let llmod = llvm::LLVMModuleCreateWithNameInContext(mod_name.as_ptr(), llcx); let llmod = llvm::LLVMModuleCreateWithNameInContext(mod_name.as_ptr(), llcx);
let mut target_data_layout = sess.target.data_layout.clone(); let mut target_data_layout = sess.target.data_layout.clone();
if llvm_util::get_major_version() < 9 {
target_data_layout = strip_function_ptr_alignment(target_data_layout);
}
if llvm_util::get_major_version() < 10 if llvm_util::get_major_version() < 10
&& (sess.target.arch == "x86" || sess.target.arch == "x86_64") && (sess.target.arch == "x86" || sess.target.arch == "x86_64")
{ {

View file

@ -104,7 +104,7 @@ unsafe fn configure_llvm(sess: &Session) {
} }
} }
if sess.opts.debugging_opts.llvm_time_trace && get_major_version() >= 9 { if sess.opts.debugging_opts.llvm_time_trace {
// time-trace is not thread safe and running it in parallel will cause seg faults. // time-trace is not thread safe and running it in parallel will cause seg faults.
if !sess.opts.debugging_opts.no_parallel_llvm { if !sess.opts.debugging_opts.no_parallel_llvm {
bug!("`-Z llvm-time-trace` requires `-Z no-parallel-llvm") bug!("`-Z llvm-time-trace` requires `-Z no-parallel-llvm")
@ -122,10 +122,8 @@ unsafe fn configure_llvm(sess: &Session) {
pub fn time_trace_profiler_finish(file_name: &str) { pub fn time_trace_profiler_finish(file_name: &str) {
unsafe { unsafe {
if get_major_version() >= 9 { let file_name = CString::new(file_name).unwrap();
let file_name = CString::new(file_name).unwrap(); llvm::LLVMTimeTraceProfilerFinish(file_name.as_ptr());
llvm::LLVMTimeTraceProfilerFinish(file_name.as_ptr());
}
} }
} }

View file

@ -16,9 +16,7 @@
#include "llvm/Object/ObjectFile.h" #include "llvm/Object/ObjectFile.h"
#include "llvm/Object/IRObjectFile.h" #include "llvm/Object/IRObjectFile.h"
#include "llvm/Passes/PassBuilder.h" #include "llvm/Passes/PassBuilder.h"
#if LLVM_VERSION_GE(9, 0)
#include "llvm/Passes/StandardInstrumentations.h" #include "llvm/Passes/StandardInstrumentations.h"
#endif
#include "llvm/Support/CBindingWrapping.h" #include "llvm/Support/CBindingWrapping.h"
#include "llvm/Support/FileSystem.h" #include "llvm/Support/FileSystem.h"
#include "llvm/Support/Host.h" #include "llvm/Support/Host.h"
@ -31,15 +29,11 @@
#include "llvm-c/Transforms/PassManagerBuilder.h" #include "llvm-c/Transforms/PassManagerBuilder.h"
#include "llvm/Transforms/Instrumentation.h" #include "llvm/Transforms/Instrumentation.h"
#if LLVM_VERSION_GE(9, 0)
#include "llvm/Transforms/Instrumentation/AddressSanitizer.h" #include "llvm/Transforms/Instrumentation/AddressSanitizer.h"
#include "llvm/Support/TimeProfiler.h" #include "llvm/Support/TimeProfiler.h"
#endif
#include "llvm/Transforms/Instrumentation/ThreadSanitizer.h" #include "llvm/Transforms/Instrumentation/ThreadSanitizer.h"
#include "llvm/Transforms/Instrumentation/MemorySanitizer.h" #include "llvm/Transforms/Instrumentation/MemorySanitizer.h"
#if LLVM_VERSION_GE(9, 0)
#include "llvm/Transforms/Utils/CanonicalizeAliases.h" #include "llvm/Transforms/Utils/CanonicalizeAliases.h"
#endif
#include "llvm/Transforms/Utils/NameAnonGlobals.h" #include "llvm/Transforms/Utils/NameAnonGlobals.h"
using namespace llvm; using namespace llvm;
@ -73,20 +67,18 @@ extern "C" void LLVMTimeTraceProfilerInitialize() {
timeTraceProfilerInitialize( timeTraceProfilerInitialize(
/* TimeTraceGranularity */ 0, /* TimeTraceGranularity */ 0,
/* ProcName */ "rustc"); /* ProcName */ "rustc");
#elif LLVM_VERSION_GE(9, 0) #else
timeTraceProfilerInitialize(); timeTraceProfilerInitialize();
#endif #endif
} }
extern "C" void LLVMTimeTraceProfilerFinish(const char* FileName) { extern "C" void LLVMTimeTraceProfilerFinish(const char* FileName) {
#if LLVM_VERSION_GE(9, 0)
StringRef FN(FileName); StringRef FN(FileName);
std::error_code EC; std::error_code EC;
raw_fd_ostream OS(FN, EC, sys::fs::CD_CreateAlways); raw_fd_ostream OS(FN, EC, sys::fs::CD_CreateAlways);
timeTraceProfilerWrite(OS); timeTraceProfilerWrite(OS);
timeTraceProfilerCleanup(); timeTraceProfilerCleanup();
#endif
} }
enum class LLVMRustPassKind { enum class LLVMRustPassKind {
@ -127,22 +119,14 @@ extern "C" LLVMPassRef LLVMRustCreateAddressSanitizerFunctionPass(bool Recover)
extern "C" LLVMPassRef LLVMRustCreateModuleAddressSanitizerPass(bool Recover) { extern "C" LLVMPassRef LLVMRustCreateModuleAddressSanitizerPass(bool Recover) {
const bool CompileKernel = false; const bool CompileKernel = false;
#if LLVM_VERSION_GE(9, 0)
return wrap(createModuleAddressSanitizerLegacyPassPass(CompileKernel, Recover)); return wrap(createModuleAddressSanitizerLegacyPassPass(CompileKernel, Recover));
#else
return wrap(createAddressSanitizerModulePass(CompileKernel, Recover));
#endif
} }
extern "C" LLVMPassRef LLVMRustCreateMemorySanitizerPass(int TrackOrigins, bool Recover) { extern "C" LLVMPassRef LLVMRustCreateMemorySanitizerPass(int TrackOrigins, bool Recover) {
#if LLVM_VERSION_GE(9, 0)
const bool CompileKernel = false; const bool CompileKernel = false;
return wrap(createMemorySanitizerLegacyPassPass( return wrap(createMemorySanitizerLegacyPassPass(
MemorySanitizerOptions{TrackOrigins, Recover, CompileKernel})); MemorySanitizerOptions{TrackOrigins, Recover, CompileKernel}));
#else
return wrap(createMemorySanitizerLegacyPassPass(TrackOrigins, Recover));
#endif
} }
extern "C" LLVMPassRef LLVMRustCreateThreadSanitizerPass() { extern "C" LLVMPassRef LLVMRustCreateThreadSanitizerPass() {
@ -657,8 +641,6 @@ extern "C" typedef void (*LLVMRustSelfProfileBeforePassCallback)(void*, // LlvmS
const char*); // IR name const char*); // IR name
extern "C" typedef void (*LLVMRustSelfProfileAfterPassCallback)(void*); // LlvmSelfProfiler extern "C" typedef void (*LLVMRustSelfProfileAfterPassCallback)(void*); // LlvmSelfProfiler
#if LLVM_VERSION_GE(9, 0)
std::string LLVMRustwrappedIrGetName(const llvm::Any &WrappedIr) { std::string LLVMRustwrappedIrGetName(const llvm::Any &WrappedIr) {
if (any_isa<const Module *>(WrappedIr)) if (any_isa<const Module *>(WrappedIr))
return any_cast<const Module *>(WrappedIr)->getName().str(); return any_cast<const Module *>(WrappedIr)->getName().str();
@ -706,7 +688,6 @@ void LLVMSelfProfileInitializeCallbacks(
AfterPassCallback(LlvmSelfProfiler); AfterPassCallback(LlvmSelfProfiler);
}); });
} }
#endif
enum class LLVMRustOptStage { enum class LLVMRustOptStage {
PreLinkNoLTO, PreLinkNoLTO,
@ -739,7 +720,6 @@ LLVMRustOptimizeWithNewPassManager(
void* LlvmSelfProfiler, void* LlvmSelfProfiler,
LLVMRustSelfProfileBeforePassCallback BeforePassCallback, LLVMRustSelfProfileBeforePassCallback BeforePassCallback,
LLVMRustSelfProfileAfterPassCallback AfterPassCallback) { LLVMRustSelfProfileAfterPassCallback AfterPassCallback) {
#if LLVM_VERSION_GE(9, 0)
Module *TheModule = unwrap(ModuleRef); Module *TheModule = unwrap(ModuleRef);
TargetMachine *TM = unwrap(TMRef); TargetMachine *TM = unwrap(TMRef);
PassBuilder::OptimizationLevel OptLevel = fromRust(OptLevelRust); PassBuilder::OptimizationLevel OptLevel = fromRust(OptLevelRust);
@ -970,11 +950,6 @@ LLVMRustOptimizeWithNewPassManager(
UpgradeCallsToIntrinsic(&*I++); // must be post-increment, as we remove UpgradeCallsToIntrinsic(&*I++); // must be post-increment, as we remove
MPM.run(*TheModule, MAM); MPM.run(*TheModule, MAM);
#else
// The new pass manager has been available for a long time,
// but we don't bother supporting it on old LLVM versions.
report_fatal_error("New pass manager only supported since LLVM 9");
#endif
} }
// Callback to demangle function name // Callback to demangle function name
@ -1325,12 +1300,9 @@ LLVMRustCreateThinLTOData(LLVMRustThinLTOModule *modules,
GlobalValue::LinkageTypes NewLinkage) { GlobalValue::LinkageTypes NewLinkage) {
Ret->ResolvedODR[ModuleIdentifier][GUID] = NewLinkage; Ret->ResolvedODR[ModuleIdentifier][GUID] = NewLinkage;
}; };
#if LLVM_VERSION_GE(9, 0)
thinLTOResolvePrevailingInIndex(Ret->Index, isPrevailing, recordNewLinkage, thinLTOResolvePrevailingInIndex(Ret->Index, isPrevailing, recordNewLinkage,
Ret->GUIDPreservedSymbols); Ret->GUIDPreservedSymbols);
#else
thinLTOResolvePrevailingInIndex(Ret->Index, isPrevailing, recordNewLinkage);
#endif
// Here we calculate an `ExportedGUIDs` set for use in the `isExported` // Here we calculate an `ExportedGUIDs` set for use in the `isExported`
// callback below. This callback below will dictate the linkage for all // callback below. This callback below will dictate the linkage for all

View file

@ -124,9 +124,7 @@ extern "C" LLVMValueRef LLVMRustGetOrInsertFunction(LLVMModuleRef M,
return wrap(unwrap(M) return wrap(unwrap(M)
->getOrInsertFunction(StringRef(Name, NameLen), ->getOrInsertFunction(StringRef(Name, NameLen),
unwrap<FunctionType>(FunctionTy)) unwrap<FunctionType>(FunctionTy))
#if LLVM_VERSION_GE(9, 0)
.getCallee() .getCallee()
#endif
); );
} }
@ -251,11 +249,7 @@ extern "C" void LLVMRustAddDereferenceableOrNullCallSiteAttr(LLVMValueRef Instr,
extern "C" void LLVMRustAddByValCallSiteAttr(LLVMValueRef Instr, unsigned Index, extern "C" void LLVMRustAddByValCallSiteAttr(LLVMValueRef Instr, unsigned Index,
LLVMTypeRef Ty) { LLVMTypeRef Ty) {
CallBase *Call = unwrap<CallBase>(Instr); CallBase *Call = unwrap<CallBase>(Instr);
#if LLVM_VERSION_GE(9, 0)
Attribute Attr = Attribute::getWithByValType(Call->getContext(), unwrap(Ty)); Attribute Attr = Attribute::getWithByValType(Call->getContext(), unwrap(Ty));
#else
Attribute Attr = Attribute::get(Call->getContext(), Attribute::ByVal);
#endif
Call->addAttribute(Index, Attr); Call->addAttribute(Index, Attr);
} }
@ -296,11 +290,7 @@ extern "C" void LLVMRustAddDereferenceableOrNullAttr(LLVMValueRef Fn,
extern "C" void LLVMRustAddByValAttr(LLVMValueRef Fn, unsigned Index, extern "C" void LLVMRustAddByValAttr(LLVMValueRef Fn, unsigned Index,
LLVMTypeRef Ty) { LLVMTypeRef Ty) {
Function *F = unwrap<Function>(Fn); Function *F = unwrap<Function>(Fn);
#if LLVM_VERSION_GE(9, 0)
Attribute Attr = Attribute::getWithByValType(F->getContext(), unwrap(Ty)); Attribute Attr = Attribute::getWithByValType(F->getContext(), unwrap(Ty));
#else
Attribute Attr = Attribute::get(F->getContext(), Attribute::ByVal);
#endif
F->addAttribute(Index, Attr); F->addAttribute(Index, Attr);
} }
@ -616,11 +606,9 @@ static DISubprogram::DISPFlags fromRust(LLVMRustDISPFlags SPFlags) {
if (isSet(SPFlags & LLVMRustDISPFlags::SPFlagOptimized)) { if (isSet(SPFlags & LLVMRustDISPFlags::SPFlagOptimized)) {
Result |= DISubprogram::DISPFlags::SPFlagOptimized; Result |= DISubprogram::DISPFlags::SPFlagOptimized;
} }
#if LLVM_VERSION_GE(9, 0)
if (isSet(SPFlags & LLVMRustDISPFlags::SPFlagMainSubprogram)) { if (isSet(SPFlags & LLVMRustDISPFlags::SPFlagMainSubprogram)) {
Result |= DISubprogram::DISPFlags::SPFlagMainSubprogram; Result |= DISubprogram::DISPFlags::SPFlagMainSubprogram;
} }
#endif
return Result; return Result;
} }
@ -744,10 +732,6 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateFunction(
DITemplateParameterArray(unwrap<MDTuple>(TParam)); DITemplateParameterArray(unwrap<MDTuple>(TParam));
DISubprogram::DISPFlags llvmSPFlags = fromRust(SPFlags); DISubprogram::DISPFlags llvmSPFlags = fromRust(SPFlags);
DINode::DIFlags llvmFlags = fromRust(Flags); DINode::DIFlags llvmFlags = fromRust(Flags);
#if LLVM_VERSION_LT(9, 0)
if (isSet(SPFlags & LLVMRustDISPFlags::SPFlagMainSubprogram))
llvmFlags |= DINode::DIFlags::FlagMainSubprogram;
#endif
DISubprogram *Sub = Builder->createFunction( DISubprogram *Sub = Builder->createFunction(
unwrapDI<DIScope>(Scope), unwrapDI<DIScope>(Scope),
StringRef(Name, NameLen), StringRef(Name, NameLen),

View file

@ -1,7 +1,6 @@
// Checks if the correct annotation for the efiapi ABI is passed to llvm. // Checks if the correct annotation for the efiapi ABI is passed to llvm.
// revisions:x86_64 i686 aarch64 arm riscv // revisions:x86_64 i686 aarch64 arm riscv
// min-llvm-version: 9.0
// needs-llvm-components: aarch64 arm riscv // needs-llvm-components: aarch64 arm riscv
//[x86_64] compile-flags: --target x86_64-unknown-uefi //[x86_64] compile-flags: --target x86_64-unknown-uefi

View file

@ -1,4 +1,3 @@
// min-llvm-version: 8.0
// compile-flags: -C no-prepopulate-passes -C force-unwind-tables=y // compile-flags: -C no-prepopulate-passes -C force-unwind-tables=y
#![crate_type="lib"] #![crate_type="lib"]

View file

@ -2,7 +2,6 @@
// being run when compiling with new LLVM pass manager and ThinLTO. // being run when compiling with new LLVM pass manager and ThinLTO.
// Note: The issue occurred only on non-zero opt-level. // Note: The issue occurred only on non-zero opt-level.
// //
// min-llvm-version: 9.0
// needs-sanitizer-support // needs-sanitizer-support
// needs-sanitizer-address // needs-sanitizer-address
// //