bump minimum LLVM version to 5.0
This commit is contained in:
parent
ec039c7cb1
commit
4ff90c7e0a
30 changed files with 17 additions and 268 deletions
|
@ -12,7 +12,7 @@ matrix:
|
||||||
fast_finish: true
|
fast_finish: true
|
||||||
include:
|
include:
|
||||||
# Images used in testing PR and try-build should be run first.
|
# Images used in testing PR and try-build should be run first.
|
||||||
- env: IMAGE=x86_64-gnu-llvm-3.9 RUST_BACKTRACE=1
|
- env: IMAGE=x86_64-gnu-llvm-5.0 RUST_BACKTRACE=1
|
||||||
if: type = pull_request OR branch = auto
|
if: type = pull_request OR branch = auto
|
||||||
|
|
||||||
- env: IMAGE=dist-x86_64-linux DEPLOY=1
|
- env: IMAGE=dist-x86_64-linux DEPLOY=1
|
||||||
|
|
|
@ -256,12 +256,12 @@ fn check_llvm_version(builder: &Builder, llvm_config: &Path) {
|
||||||
let version = output(cmd.arg("--version"));
|
let version = output(cmd.arg("--version"));
|
||||||
let mut parts = version.split('.').take(2)
|
let mut parts = version.split('.').take(2)
|
||||||
.filter_map(|s| s.parse::<u32>().ok());
|
.filter_map(|s| s.parse::<u32>().ok());
|
||||||
if let (Some(major), Some(minor)) = (parts.next(), parts.next()) {
|
if let (Some(major), Some(_minor)) = (parts.next(), parts.next()) {
|
||||||
if major > 3 || (major == 3 && minor >= 9) {
|
if major >= 5 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
panic!("\n\nbad LLVM version: {}, need >=3.9\n\n", version)
|
panic!("\n\nbad LLVM version: {}, need >=5.0\n\n", version)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn configure_cmake(builder: &Builder,
|
fn configure_cmake(builder: &Builder,
|
||||||
|
|
|
@ -11,7 +11,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
cmake \
|
cmake \
|
||||||
sudo \
|
sudo \
|
||||||
gdb \
|
gdb \
|
||||||
llvm-3.9-tools \
|
llvm-5.0-tools \
|
||||||
libedit-dev \
|
libedit-dev \
|
||||||
zlib1g-dev \
|
zlib1g-dev \
|
||||||
xz-utils
|
xz-utils
|
||||||
|
@ -22,6 +22,6 @@ RUN sh /scripts/sccache.sh
|
||||||
# using llvm-link-shared due to libffi issues -- see #34486
|
# using llvm-link-shared due to libffi issues -- see #34486
|
||||||
ENV RUST_CONFIGURE_ARGS \
|
ENV RUST_CONFIGURE_ARGS \
|
||||||
--build=x86_64-unknown-linux-gnu \
|
--build=x86_64-unknown-linux-gnu \
|
||||||
--llvm-root=/usr/lib/llvm-3.9 \
|
--llvm-root=/usr/lib/llvm-5.0 \
|
||||||
--enable-llvm-link-shared
|
--enable-llvm-link-shared
|
||||||
ENV RUST_CHECK_TARGET check
|
ENV RUST_CHECK_TARGET check
|
|
@ -666,13 +666,9 @@ impl<'a, 'tcx> FnTypeExt<'a, 'tcx> for FnType<'tcx, Ty<'tcx>> {
|
||||||
layout::Int(..) if !scalar.is_bool() => {
|
layout::Int(..) if !scalar.is_bool() => {
|
||||||
let range = scalar.valid_range_exclusive(bx.cx);
|
let range = scalar.valid_range_exclusive(bx.cx);
|
||||||
if range.start != range.end {
|
if range.start != range.end {
|
||||||
// FIXME(nox): This causes very weird type errors about
|
|
||||||
// SHL operators in constants in stage 2 with LLVM 3.9.
|
|
||||||
if unsafe { llvm::LLVMRustVersionMajor() >= 4 } {
|
|
||||||
bx.range_metadata(callsite, range);
|
bx.range_metadata(callsite, range);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ use builder::Builder;
|
||||||
use common::{CodegenCx, Funclet};
|
use common::{CodegenCx, Funclet};
|
||||||
use debuginfo::{self, declare_local, VariableAccess, VariableKind, FunctionDebugContext};
|
use debuginfo::{self, declare_local, VariableAccess, VariableKind, FunctionDebugContext};
|
||||||
use monomorphize::Instance;
|
use monomorphize::Instance;
|
||||||
use abi::{ArgAttribute, ArgTypeExt, FnType, FnTypeExt, PassMode};
|
use abi::{ArgTypeExt, FnType, FnTypeExt, PassMode};
|
||||||
use type_::Type;
|
use type_::Type;
|
||||||
|
|
||||||
use syntax_pos::{DUMMY_SP, NO_EXPANSION, BytePos, Span};
|
use syntax_pos::{DUMMY_SP, NO_EXPANSION, BytePos, Span};
|
||||||
|
@ -430,10 +430,6 @@ fn arg_local_refs<'a, 'tcx>(bx: &Builder<'a, 'tcx>,
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
let deref_op = unsafe {
|
|
||||||
[llvm::LLVMRustDIBuilderCreateOpDeref()]
|
|
||||||
};
|
|
||||||
|
|
||||||
mir.args_iter().enumerate().map(|(arg_index, local)| {
|
mir.args_iter().enumerate().map(|(arg_index, local)| {
|
||||||
let arg_decl = &mir.local_decls[local];
|
let arg_decl = &mir.local_decls[local];
|
||||||
|
|
||||||
|
@ -543,21 +539,11 @@ fn arg_local_refs<'a, 'tcx>(bx: &Builder<'a, 'tcx>,
|
||||||
if arg_index > 0 || mir.upvar_decls.is_empty() {
|
if arg_index > 0 || mir.upvar_decls.is_empty() {
|
||||||
// The Rust ABI passes indirect variables using a pointer and a manual copy, so we
|
// The Rust ABI passes indirect variables using a pointer and a manual copy, so we
|
||||||
// need to insert a deref here, but the C ABI uses a pointer and a copy using the
|
// need to insert a deref here, but the C ABI uses a pointer and a copy using the
|
||||||
// byval attribute, for which LLVM does the deref itself, so we must not add it.
|
// byval attribute, for which LLVM always does the deref itself,
|
||||||
// Starting with D31439 in LLVM 5, it *always* does the deref itself.
|
// so we must not add it.
|
||||||
let mut variable_access = VariableAccess::DirectVariable {
|
let variable_access = VariableAccess::DirectVariable {
|
||||||
alloca: place.llval
|
alloca: place.llval
|
||||||
};
|
};
|
||||||
if unsafe { llvm::LLVMRustVersionMajor() < 5 } {
|
|
||||||
if let PassMode::Indirect(ref attrs) = arg.mode {
|
|
||||||
if !attrs.contains(ArgAttribute::ByVal) {
|
|
||||||
variable_access = VariableAccess::IndirectVariable {
|
|
||||||
alloca: place.llval,
|
|
||||||
address_operations: &deref_op,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
declare_local(
|
declare_local(
|
||||||
bx,
|
bx,
|
||||||
|
|
|
@ -16,14 +16,8 @@
|
||||||
#include "llvm/Object/Archive.h"
|
#include "llvm/Object/Archive.h"
|
||||||
#include "llvm/Object/ObjectFile.h"
|
#include "llvm/Object/ObjectFile.h"
|
||||||
#include "llvm/Bitcode/BitcodeWriterPass.h"
|
#include "llvm/Bitcode/BitcodeWriterPass.h"
|
||||||
|
|
||||||
#include "llvm/IR/CallSite.h"
|
#include "llvm/IR/CallSite.h"
|
||||||
|
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
#include "llvm/ADT/Optional.h"
|
#include "llvm/ADT/Optional.h"
|
||||||
#else
|
|
||||||
#include <cstdlib>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===
|
//===----------------------------------------------------------------------===
|
||||||
//
|
//
|
||||||
|
@ -176,14 +170,7 @@ extern "C" void LLVMRustAddCallSiteAttribute(LLVMValueRef Instr, unsigned Index,
|
||||||
LLVMRustAttribute RustAttr) {
|
LLVMRustAttribute RustAttr) {
|
||||||
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
||||||
Attribute Attr = Attribute::get(Call->getContext(), fromRust(RustAttr));
|
Attribute Attr = Attribute::get(Call->getContext(), fromRust(RustAttr));
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
Call.addAttribute(Index, Attr);
|
Call.addAttribute(Index, Attr);
|
||||||
#else
|
|
||||||
AttrBuilder B(Attr);
|
|
||||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
|
||||||
Call->getContext(), Index,
|
|
||||||
AttributeSet::get(Call->getContext(), Index, B)));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void LLVMRustAddAlignmentCallSiteAttr(LLVMValueRef Instr,
|
extern "C" void LLVMRustAddAlignmentCallSiteAttr(LLVMValueRef Instr,
|
||||||
|
@ -192,14 +179,8 @@ extern "C" void LLVMRustAddAlignmentCallSiteAttr(LLVMValueRef Instr,
|
||||||
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
||||||
AttrBuilder B;
|
AttrBuilder B;
|
||||||
B.addAlignmentAttr(Bytes);
|
B.addAlignmentAttr(Bytes);
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
Call.setAttributes(Call.getAttributes().addAttributes(
|
||||||
Call->getContext(), Index, B));
|
Call->getContext(), Index, B));
|
||||||
#else
|
|
||||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
|
||||||
Call->getContext(), Index,
|
|
||||||
AttributeSet::get(Call->getContext(), Index, B)));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void LLVMRustAddDereferenceableCallSiteAttr(LLVMValueRef Instr,
|
extern "C" void LLVMRustAddDereferenceableCallSiteAttr(LLVMValueRef Instr,
|
||||||
|
@ -208,14 +189,8 @@ extern "C" void LLVMRustAddDereferenceableCallSiteAttr(LLVMValueRef Instr,
|
||||||
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
||||||
AttrBuilder B;
|
AttrBuilder B;
|
||||||
B.addDereferenceableAttr(Bytes);
|
B.addDereferenceableAttr(Bytes);
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
Call.setAttributes(Call.getAttributes().addAttributes(
|
||||||
Call->getContext(), Index, B));
|
Call->getContext(), Index, B));
|
||||||
#else
|
|
||||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
|
||||||
Call->getContext(), Index,
|
|
||||||
AttributeSet::get(Call->getContext(), Index, B)));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void LLVMRustAddDereferenceableOrNullCallSiteAttr(LLVMValueRef Instr,
|
extern "C" void LLVMRustAddDereferenceableOrNullCallSiteAttr(LLVMValueRef Instr,
|
||||||
|
@ -224,14 +199,8 @@ extern "C" void LLVMRustAddDereferenceableOrNullCallSiteAttr(LLVMValueRef Instr,
|
||||||
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
CallSite Call = CallSite(unwrap<Instruction>(Instr));
|
||||||
AttrBuilder B;
|
AttrBuilder B;
|
||||||
B.addDereferenceableOrNullAttr(Bytes);
|
B.addDereferenceableOrNullAttr(Bytes);
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
Call.setAttributes(Call.getAttributes().addAttributes(
|
||||||
Call->getContext(), Index, B));
|
Call->getContext(), Index, B));
|
||||||
#else
|
|
||||||
Call.setAttributes(Call.getAttributes().addAttributes(
|
|
||||||
Call->getContext(), Index,
|
|
||||||
AttributeSet::get(Call->getContext(), Index, B)));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void LLVMRustAddFunctionAttribute(LLVMValueRef Fn, unsigned Index,
|
extern "C" void LLVMRustAddFunctionAttribute(LLVMValueRef Fn, unsigned Index,
|
||||||
|
@ -239,11 +208,7 @@ extern "C" void LLVMRustAddFunctionAttribute(LLVMValueRef Fn, unsigned Index,
|
||||||
Function *A = unwrap<Function>(Fn);
|
Function *A = unwrap<Function>(Fn);
|
||||||
Attribute Attr = Attribute::get(A->getContext(), fromRust(RustAttr));
|
Attribute Attr = Attribute::get(A->getContext(), fromRust(RustAttr));
|
||||||
AttrBuilder B(Attr);
|
AttrBuilder B(Attr);
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
A->addAttributes(Index, B);
|
A->addAttributes(Index, B);
|
||||||
#else
|
|
||||||
A->addAttributes(Index, AttributeSet::get(A->getContext(), Index, B));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void LLVMRustAddAlignmentAttr(LLVMValueRef Fn,
|
extern "C" void LLVMRustAddAlignmentAttr(LLVMValueRef Fn,
|
||||||
|
@ -252,11 +217,7 @@ extern "C" void LLVMRustAddAlignmentAttr(LLVMValueRef Fn,
|
||||||
Function *A = unwrap<Function>(Fn);
|
Function *A = unwrap<Function>(Fn);
|
||||||
AttrBuilder B;
|
AttrBuilder B;
|
||||||
B.addAlignmentAttr(Bytes);
|
B.addAlignmentAttr(Bytes);
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
A->addAttributes(Index, B);
|
A->addAttributes(Index, B);
|
||||||
#else
|
|
||||||
A->addAttributes(Index, AttributeSet::get(A->getContext(), Index, B));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void LLVMRustAddDereferenceableAttr(LLVMValueRef Fn, unsigned Index,
|
extern "C" void LLVMRustAddDereferenceableAttr(LLVMValueRef Fn, unsigned Index,
|
||||||
|
@ -264,11 +225,7 @@ extern "C" void LLVMRustAddDereferenceableAttr(LLVMValueRef Fn, unsigned Index,
|
||||||
Function *A = unwrap<Function>(Fn);
|
Function *A = unwrap<Function>(Fn);
|
||||||
AttrBuilder B;
|
AttrBuilder B;
|
||||||
B.addDereferenceableAttr(Bytes);
|
B.addDereferenceableAttr(Bytes);
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
A->addAttributes(Index, B);
|
A->addAttributes(Index, B);
|
||||||
#else
|
|
||||||
A->addAttributes(Index, AttributeSet::get(A->getContext(), Index, B));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void LLVMRustAddDereferenceableOrNullAttr(LLVMValueRef Fn,
|
extern "C" void LLVMRustAddDereferenceableOrNullAttr(LLVMValueRef Fn,
|
||||||
|
@ -277,11 +234,7 @@ extern "C" void LLVMRustAddDereferenceableOrNullAttr(LLVMValueRef Fn,
|
||||||
Function *A = unwrap<Function>(Fn);
|
Function *A = unwrap<Function>(Fn);
|
||||||
AttrBuilder B;
|
AttrBuilder B;
|
||||||
B.addDereferenceableOrNullAttr(Bytes);
|
B.addDereferenceableOrNullAttr(Bytes);
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
A->addAttributes(Index, B);
|
A->addAttributes(Index, B);
|
||||||
#else
|
|
||||||
A->addAttributes(Index, AttributeSet::get(A->getContext(), Index, B));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void LLVMRustAddFunctionAttrStringValue(LLVMValueRef Fn,
|
extern "C" void LLVMRustAddFunctionAttrStringValue(LLVMValueRef Fn,
|
||||||
|
@ -291,11 +244,7 @@ extern "C" void LLVMRustAddFunctionAttrStringValue(LLVMValueRef Fn,
|
||||||
Function *F = unwrap<Function>(Fn);
|
Function *F = unwrap<Function>(Fn);
|
||||||
AttrBuilder B;
|
AttrBuilder B;
|
||||||
B.addAttribute(Name, Value);
|
B.addAttribute(Name, Value);
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
F->addAttributes(Index, B);
|
F->addAttributes(Index, B);
|
||||||
#else
|
|
||||||
F->addAttributes(Index, AttributeSet::get(F->getContext(), Index, B));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void LLVMRustRemoveFunctionAttributes(LLVMValueRef Fn,
|
extern "C" void LLVMRustRemoveFunctionAttributes(LLVMValueRef Fn,
|
||||||
|
@ -305,12 +254,7 @@ extern "C" void LLVMRustRemoveFunctionAttributes(LLVMValueRef Fn,
|
||||||
Attribute Attr = Attribute::get(F->getContext(), fromRust(RustAttr));
|
Attribute Attr = Attribute::get(F->getContext(), fromRust(RustAttr));
|
||||||
AttrBuilder B(Attr);
|
AttrBuilder B(Attr);
|
||||||
auto PAL = F->getAttributes();
|
auto PAL = F->getAttributes();
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
auto PALNew = PAL.removeAttributes(F->getContext(), Index, B);
|
auto PALNew = PAL.removeAttributes(F->getContext(), Index, B);
|
||||||
#else
|
|
||||||
const AttributeSet PALNew = PAL.removeAttributes(
|
|
||||||
F->getContext(), Index, AttributeSet::get(F->getContext(), Index, B));
|
|
||||||
#endif
|
|
||||||
F->setAttributes(PALNew);
|
F->setAttributes(PALNew);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -360,7 +304,6 @@ enum class LLVMRustSynchronizationScope {
|
||||||
CrossThread,
|
CrossThread,
|
||||||
};
|
};
|
||||||
|
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
static SyncScope::ID fromRust(LLVMRustSynchronizationScope Scope) {
|
static SyncScope::ID fromRust(LLVMRustSynchronizationScope Scope) {
|
||||||
switch (Scope) {
|
switch (Scope) {
|
||||||
case LLVMRustSynchronizationScope::SingleThread:
|
case LLVMRustSynchronizationScope::SingleThread:
|
||||||
|
@ -371,18 +314,6 @@ static SyncScope::ID fromRust(LLVMRustSynchronizationScope Scope) {
|
||||||
report_fatal_error("bad SynchronizationScope.");
|
report_fatal_error("bad SynchronizationScope.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
static SynchronizationScope fromRust(LLVMRustSynchronizationScope Scope) {
|
|
||||||
switch (Scope) {
|
|
||||||
case LLVMRustSynchronizationScope::SingleThread:
|
|
||||||
return SingleThread;
|
|
||||||
case LLVMRustSynchronizationScope::CrossThread:
|
|
||||||
return CrossThread;
|
|
||||||
default:
|
|
||||||
report_fatal_error("bad SynchronizationScope.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern "C" LLVMValueRef
|
extern "C" LLVMValueRef
|
||||||
LLVMRustBuildAtomicFence(LLVMBuilderRef B, LLVMAtomicOrdering Order,
|
LLVMRustBuildAtomicFence(LLVMBuilderRef B, LLVMAtomicOrdering Order,
|
||||||
|
@ -422,18 +353,6 @@ extern "C" void LLVMRustAppendModuleInlineAsm(LLVMModuleRef M, const char *Asm)
|
||||||
|
|
||||||
typedef DIBuilder *LLVMRustDIBuilderRef;
|
typedef DIBuilder *LLVMRustDIBuilderRef;
|
||||||
|
|
||||||
#if LLVM_VERSION_LT(5, 0)
|
|
||||||
typedef struct LLVMOpaqueMetadata *LLVMMetadataRef;
|
|
||||||
|
|
||||||
namespace llvm {
|
|
||||||
DEFINE_ISA_CONVERSION_FUNCTIONS(Metadata, LLVMMetadataRef)
|
|
||||||
|
|
||||||
inline Metadata **unwrap(LLVMMetadataRef *Vals) {
|
|
||||||
return reinterpret_cast<Metadata **>(Vals);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
template <typename DIT> DIT *unwrapDIPtr(LLVMMetadataRef Ref) {
|
template <typename DIT> DIT *unwrapDIPtr(LLVMMetadataRef Ref) {
|
||||||
return (DIT *)(Ref ? unwrap<MDNode>(Ref) : nullptr);
|
return (DIT *)(Ref ? unwrap<MDNode>(Ref) : nullptr);
|
||||||
}
|
}
|
||||||
|
@ -492,13 +411,8 @@ inline LLVMRustDIFlags visibility(LLVMRustDIFlags F) {
|
||||||
return static_cast<LLVMRustDIFlags>(static_cast<uint32_t>(F) & 0x3);
|
return static_cast<LLVMRustDIFlags>(static_cast<uint32_t>(F) & 0x3);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LLVM_VERSION_GE(4, 0)
|
|
||||||
static DINode::DIFlags fromRust(LLVMRustDIFlags Flags) {
|
static DINode::DIFlags fromRust(LLVMRustDIFlags Flags) {
|
||||||
DINode::DIFlags Result = DINode::DIFlags::FlagZero;
|
DINode::DIFlags Result = DINode::DIFlags::FlagZero;
|
||||||
#else
|
|
||||||
static unsigned fromRust(LLVMRustDIFlags Flags) {
|
|
||||||
unsigned Result = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
switch (visibility(Flags)) {
|
switch (visibility(Flags)) {
|
||||||
case LLVMRustDIFlags::FlagPrivate:
|
case LLVMRustDIFlags::FlagPrivate:
|
||||||
|
@ -554,25 +468,18 @@ static unsigned fromRust(LLVMRustDIFlags Flags) {
|
||||||
if (isSet(Flags & LLVMRustDIFlags::FlagRValueReference)) {
|
if (isSet(Flags & LLVMRustDIFlags::FlagRValueReference)) {
|
||||||
Result |= DINode::DIFlags::FlagRValueReference;
|
Result |= DINode::DIFlags::FlagRValueReference;
|
||||||
}
|
}
|
||||||
#if LLVM_VERSION_LE(4, 0)
|
|
||||||
if (isSet(Flags & LLVMRustDIFlags::FlagExternalTypeRef)) {
|
|
||||||
Result |= DINode::DIFlags::FlagExternalTypeRef;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (isSet(Flags & LLVMRustDIFlags::FlagIntroducedVirtual)) {
|
if (isSet(Flags & LLVMRustDIFlags::FlagIntroducedVirtual)) {
|
||||||
Result |= DINode::DIFlags::FlagIntroducedVirtual;
|
Result |= DINode::DIFlags::FlagIntroducedVirtual;
|
||||||
}
|
}
|
||||||
if (isSet(Flags & LLVMRustDIFlags::FlagBitField)) {
|
if (isSet(Flags & LLVMRustDIFlags::FlagBitField)) {
|
||||||
Result |= DINode::DIFlags::FlagBitField;
|
Result |= DINode::DIFlags::FlagBitField;
|
||||||
}
|
}
|
||||||
#if LLVM_RUSTLLVM || LLVM_VERSION_GE(4, 0)
|
|
||||||
if (isSet(Flags & LLVMRustDIFlags::FlagNoReturn)) {
|
if (isSet(Flags & LLVMRustDIFlags::FlagNoReturn)) {
|
||||||
Result |= DINode::DIFlags::FlagNoReturn;
|
Result |= DINode::DIFlags::FlagNoReturn;
|
||||||
}
|
}
|
||||||
if (isSet(Flags & LLVMRustDIFlags::FlagMainSubprogram)) {
|
if (isSet(Flags & LLVMRustDIFlags::FlagMainSubprogram)) {
|
||||||
Result |= DINode::DIFlags::FlagMainSubprogram;
|
Result |= DINode::DIFlags::FlagMainSubprogram;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
@ -612,14 +519,8 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateCompileUnit(
|
||||||
unsigned RuntimeVer, const char *SplitName) {
|
unsigned RuntimeVer, const char *SplitName) {
|
||||||
auto *File = unwrapDI<DIFile>(FileRef);
|
auto *File = unwrapDI<DIFile>(FileRef);
|
||||||
|
|
||||||
#if LLVM_VERSION_GE(4, 0)
|
|
||||||
return wrap(Builder->createCompileUnit(Lang, File, Producer, isOptimized,
|
return wrap(Builder->createCompileUnit(Lang, File, Producer, isOptimized,
|
||||||
Flags, RuntimeVer, SplitName));
|
Flags, RuntimeVer, SplitName));
|
||||||
#else
|
|
||||||
return wrap(Builder->createCompileUnit(Lang, File->getFilename(),
|
|
||||||
File->getDirectory(), Producer, isOptimized,
|
|
||||||
Flags, RuntimeVer, SplitName));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" LLVMMetadataRef
|
extern "C" LLVMMetadataRef
|
||||||
|
@ -657,11 +558,7 @@ extern "C" LLVMMetadataRef
|
||||||
LLVMRustDIBuilderCreateBasicType(LLVMRustDIBuilderRef Builder, const char *Name,
|
LLVMRustDIBuilderCreateBasicType(LLVMRustDIBuilderRef Builder, const char *Name,
|
||||||
uint64_t SizeInBits, uint32_t AlignInBits,
|
uint64_t SizeInBits, uint32_t AlignInBits,
|
||||||
unsigned Encoding) {
|
unsigned Encoding) {
|
||||||
return wrap(Builder->createBasicType(Name, SizeInBits,
|
return wrap(Builder->createBasicType(Name, SizeInBits, Encoding));
|
||||||
#if LLVM_VERSION_LE(3, 9)
|
|
||||||
AlignInBits,
|
|
||||||
#endif
|
|
||||||
Encoding));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" LLVMMetadataRef LLVMRustDIBuilderCreatePointerType(
|
extern "C" LLVMMetadataRef LLVMRustDIBuilderCreatePointerType(
|
||||||
|
@ -669,9 +566,7 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreatePointerType(
|
||||||
uint64_t SizeInBits, uint32_t AlignInBits, const char *Name) {
|
uint64_t SizeInBits, uint32_t AlignInBits, const char *Name) {
|
||||||
return wrap(Builder->createPointerType(unwrapDI<DIType>(PointeeTy),
|
return wrap(Builder->createPointerType(unwrapDI<DIType>(PointeeTy),
|
||||||
SizeInBits, AlignInBits,
|
SizeInBits, AlignInBits,
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
/* DWARFAddressSpace */ None,
|
/* DWARFAddressSpace */ None,
|
||||||
#endif
|
|
||||||
Name));
|
Name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -722,7 +617,6 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateStaticVariable(
|
||||||
LLVMMetadataRef Decl = nullptr, uint32_t AlignInBits = 0) {
|
LLVMMetadataRef Decl = nullptr, uint32_t AlignInBits = 0) {
|
||||||
llvm::GlobalVariable *InitVal = cast<llvm::GlobalVariable>(unwrap(V));
|
llvm::GlobalVariable *InitVal = cast<llvm::GlobalVariable>(unwrap(V));
|
||||||
|
|
||||||
#if LLVM_VERSION_GE(4, 0)
|
|
||||||
llvm::DIExpression *InitExpr = nullptr;
|
llvm::DIExpression *InitExpr = nullptr;
|
||||||
if (llvm::ConstantInt *IntVal = llvm::dyn_cast<llvm::ConstantInt>(InitVal)) {
|
if (llvm::ConstantInt *IntVal = llvm::dyn_cast<llvm::ConstantInt>(InitVal)) {
|
||||||
InitExpr = Builder->createConstantValueExpression(
|
InitExpr = Builder->createConstantValueExpression(
|
||||||
|
@ -741,12 +635,6 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateStaticVariable(
|
||||||
InitVal->setMetadata("dbg", VarExpr);
|
InitVal->setMetadata("dbg", VarExpr);
|
||||||
|
|
||||||
return wrap(VarExpr);
|
return wrap(VarExpr);
|
||||||
#else
|
|
||||||
return wrap(Builder->createGlobalVariable(
|
|
||||||
unwrapDI<DIDescriptor>(Context), Name, LinkageName,
|
|
||||||
unwrapDI<DIFile>(File), LineNo, unwrapDI<DIType>(Ty), IsLocalToUnit,
|
|
||||||
InitVal, unwrapDIPtr<MDNode>(Decl)));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateVariable(
|
extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateVariable(
|
||||||
|
@ -757,12 +645,7 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateVariable(
|
||||||
if (Tag == 0x100) { // DW_TAG_auto_variable
|
if (Tag == 0x100) { // DW_TAG_auto_variable
|
||||||
return wrap(Builder->createAutoVariable(
|
return wrap(Builder->createAutoVariable(
|
||||||
unwrapDI<DIDescriptor>(Scope), Name, unwrapDI<DIFile>(File), LineNo,
|
unwrapDI<DIDescriptor>(Scope), Name, unwrapDI<DIFile>(File), LineNo,
|
||||||
unwrapDI<DIType>(Ty), AlwaysPreserve, fromRust(Flags)
|
unwrapDI<DIType>(Ty), AlwaysPreserve, fromRust(Flags), AlignInBits));
|
||||||
#if LLVM_VERSION_GE(4, 0)
|
|
||||||
,
|
|
||||||
AlignInBits
|
|
||||||
#endif
|
|
||||||
));
|
|
||||||
} else {
|
} else {
|
||||||
return wrap(Builder->createParameterVariable(
|
return wrap(Builder->createParameterVariable(
|
||||||
unwrapDI<DIDescriptor>(Scope), Name, ArgNo, unwrapDI<DIFile>(File),
|
unwrapDI<DIDescriptor>(Scope), Name, ArgNo, unwrapDI<DIFile>(File),
|
||||||
|
@ -854,15 +737,8 @@ LLVMRustDIBuilderCreateNameSpace(LLVMRustDIBuilderRef Builder,
|
||||||
LLVMMetadataRef Scope, const char *Name,
|
LLVMMetadataRef Scope, const char *Name,
|
||||||
LLVMMetadataRef File, unsigned LineNo) {
|
LLVMMetadataRef File, unsigned LineNo) {
|
||||||
return wrap(Builder->createNameSpace(
|
return wrap(Builder->createNameSpace(
|
||||||
unwrapDI<DIDescriptor>(Scope), Name
|
unwrapDI<DIDescriptor>(Scope), Name,
|
||||||
#if LLVM_VERSION_LT(5, 0)
|
|
||||||
,
|
|
||||||
unwrapDI<DIFile>(File), LineNo
|
|
||||||
#endif
|
|
||||||
#if LLVM_VERSION_GE(4, 0)
|
|
||||||
,
|
|
||||||
false // ExportSymbols (only relevant for C++ anonymous namespaces)
|
false // ExportSymbols (only relevant for C++ anonymous namespaces)
|
||||||
#endif
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -891,12 +767,7 @@ extern "C" int64_t LLVMRustDIBuilderCreateOpDeref() {
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" int64_t LLVMRustDIBuilderCreateOpPlusUconst() {
|
extern "C" int64_t LLVMRustDIBuilderCreateOpPlusUconst() {
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
return dwarf::DW_OP_plus_uconst;
|
return dwarf::DW_OP_plus_uconst;
|
||||||
#else
|
|
||||||
// older LLVM used `plus` to behave like `plus_uconst`.
|
|
||||||
return dwarf::DW_OP_plus;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void LLVMRustWriteTypeToString(LLVMTypeRef Ty, RustStringRef Str) {
|
extern "C" void LLVMRustWriteTypeToString(LLVMTypeRef Ty, RustStringRef Str) {
|
||||||
|
@ -968,21 +839,12 @@ extern "C" void LLVMRustUnpackOptimizationDiagnostic(
|
||||||
*FunctionOut = wrap(&Opt->getFunction());
|
*FunctionOut = wrap(&Opt->getFunction());
|
||||||
|
|
||||||
RawRustStringOstream FilenameOS(FilenameOut);
|
RawRustStringOstream FilenameOS(FilenameOut);
|
||||||
#if LLVM_VERSION_GE(5,0)
|
|
||||||
DiagnosticLocation loc = Opt->getLocation();
|
DiagnosticLocation loc = Opt->getLocation();
|
||||||
if (loc.isValid()) {
|
if (loc.isValid()) {
|
||||||
*Line = loc.getLine();
|
*Line = loc.getLine();
|
||||||
*Column = loc.getColumn();
|
*Column = loc.getColumn();
|
||||||
FilenameOS << loc.getFilename();
|
FilenameOS << loc.getFilename();
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
const DebugLoc &loc = Opt->getDebugLoc();
|
|
||||||
if (loc) {
|
|
||||||
*Line = loc.getLine();
|
|
||||||
*Column = loc.getCol();
|
|
||||||
FilenameOS << cast<DIScope>(loc.getScope())->getFilename();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
RawRustStringOstream MessageOS(MessageOut);
|
RawRustStringOstream MessageOS(MessageOut);
|
||||||
MessageOS << Opt->getMsg();
|
MessageOS << Opt->getMsg();
|
||||||
|
@ -1402,7 +1264,6 @@ LLVMRustModuleCost(LLVMModuleRef M) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vector reductions:
|
// Vector reductions:
|
||||||
#if LLVM_VERSION_GE(5, 0)
|
|
||||||
extern "C" LLVMValueRef
|
extern "C" LLVMValueRef
|
||||||
LLVMRustBuildVectorReduceFAdd(LLVMBuilderRef B, LLVMValueRef Acc, LLVMValueRef Src) {
|
LLVMRustBuildVectorReduceFAdd(LLVMBuilderRef B, LLVMValueRef Acc, LLVMValueRef Src) {
|
||||||
return wrap(unwrap(B)->CreateFAddReduce(unwrap(Acc),unwrap(Src)));
|
return wrap(unwrap(B)->CreateFAddReduce(unwrap(Acc),unwrap(Src)));
|
||||||
|
@ -1448,62 +1309,6 @@ LLVMRustBuildVectorReduceFMax(LLVMBuilderRef B, LLVMValueRef Src, bool NoNaN) {
|
||||||
return wrap(unwrap(B)->CreateFPMaxReduce(unwrap(Src), NoNaN));
|
return wrap(unwrap(B)->CreateFPMaxReduce(unwrap(Src), NoNaN));
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
extern "C" LLVMValueRef
|
|
||||||
LLVMRustBuildVectorReduceFAdd(LLVMBuilderRef, LLVMValueRef, LLVMValueRef) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
extern "C" LLVMValueRef
|
|
||||||
LLVMRustBuildVectorReduceFMul(LLVMBuilderRef, LLVMValueRef, LLVMValueRef) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
extern "C" LLVMValueRef
|
|
||||||
LLVMRustBuildVectorReduceAdd(LLVMBuilderRef, LLVMValueRef) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
extern "C" LLVMValueRef
|
|
||||||
LLVMRustBuildVectorReduceMul(LLVMBuilderRef, LLVMValueRef) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
extern "C" LLVMValueRef
|
|
||||||
LLVMRustBuildVectorReduceAnd(LLVMBuilderRef, LLVMValueRef) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
extern "C" LLVMValueRef
|
|
||||||
LLVMRustBuildVectorReduceOr(LLVMBuilderRef, LLVMValueRef) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
extern "C" LLVMValueRef
|
|
||||||
LLVMRustBuildVectorReduceXor(LLVMBuilderRef, LLVMValueRef) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
extern "C" LLVMValueRef
|
|
||||||
LLVMRustBuildVectorReduceMin(LLVMBuilderRef, LLVMValueRef, bool) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
extern "C" LLVMValueRef
|
|
||||||
LLVMRustBuildVectorReduceMax(LLVMBuilderRef, LLVMValueRef, bool) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
extern "C" LLVMValueRef
|
|
||||||
LLVMRustBuildVectorReduceFMin(LLVMBuilderRef, LLVMValueRef, bool) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
extern "C" LLVMValueRef
|
|
||||||
LLVMRustBuildVectorReduceFMax(LLVMBuilderRef, LLVMValueRef, bool) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if LLVM_VERSION_LT(4, 0)
|
|
||||||
extern "C" LLVMValueRef
|
|
||||||
LLVMBuildExactUDiv(LLVMBuilderRef B, LLVMValueRef LHS,
|
|
||||||
LLVMValueRef RHS, const char *Name) {
|
|
||||||
return wrap(unwrap(B)->CreateExactUDiv(unwrap(LHS), unwrap(RHS), Name));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if LLVM_VERSION_GE(6, 0)
|
#if LLVM_VERSION_GE(6, 0)
|
||||||
extern "C" LLVMValueRef
|
extern "C" LLVMValueRef
|
||||||
LLVMRustBuildMinNum(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS) {
|
LLVMRustBuildMinNum(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS) {
|
||||||
|
|
|
@ -12,8 +12,6 @@
|
||||||
// scalar value.
|
// scalar value.
|
||||||
|
|
||||||
// compile-flags: -C no-prepopulate-passes
|
// compile-flags: -C no-prepopulate-passes
|
||||||
// min-llvm-version 4.0
|
|
||||||
|
|
||||||
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// min-llvm-version 4.0
|
|
||||||
// compile-flags: -O
|
// compile-flags: -O
|
||||||
// ignore-x86
|
// ignore-x86
|
||||||
// ignore-arm
|
// ignore-arm
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// min-llvm-version 4.0
|
|
||||||
// compile-flags: -O
|
// compile-flags: -O
|
||||||
|
|
||||||
#![crate_type="rlib"]
|
#![crate_type="rlib"]
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
// ignore-tidy-linelength
|
// ignore-tidy-linelength
|
||||||
// ignore-windows
|
// ignore-windows
|
||||||
// ignore-macos
|
// ignore-macos
|
||||||
// min-llvm-version 4.0
|
|
||||||
|
|
||||||
// compile-flags: -g -C no-prepopulate-passes
|
// compile-flags: -g -C no-prepopulate-passes
|
||||||
|
|
||||||
|
|
|
@ -8,13 +8,9 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// This test depends on a patch that was committed to upstream LLVM
|
|
||||||
// before 4.0, formerly backported to the Rust LLVM fork.
|
|
||||||
|
|
||||||
// ignore-tidy-linelength
|
// ignore-tidy-linelength
|
||||||
// ignore-windows
|
// ignore-windows
|
||||||
// ignore-macos
|
// ignore-macos
|
||||||
// min-llvm-version 4.0
|
|
||||||
|
|
||||||
// compile-flags: -g -C no-prepopulate-passes
|
// compile-flags: -g -C no-prepopulate-passes
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// compile-flags: -g -C no-prepopulate-passes
|
// compile-flags: -g -C no-prepopulate-passes
|
||||||
// ignore-tidy-linelength
|
// ignore-tidy-linelength
|
||||||
// min-llvm-version 4.0
|
|
||||||
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
// ignore-wasm
|
// ignore-wasm
|
||||||
// ignore-emscripten
|
// ignore-emscripten
|
||||||
// ignore-windows
|
// ignore-windows
|
||||||
// min-system-llvm-version 5.0
|
|
||||||
// compile-flags: -C no-prepopulate-passes
|
// compile-flags: -C no-prepopulate-passes
|
||||||
|
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
// ignore-tidy-linelength
|
// ignore-tidy-linelength
|
||||||
// ignore-windows
|
// ignore-windows
|
||||||
// ignore-macos
|
// ignore-macos
|
||||||
// min-system-llvm-version 5.1
|
// min-llvm-version 6.0
|
||||||
|
|
||||||
// compile-flags: -g -C no-prepopulate-passes
|
// compile-flags: -g -C no-prepopulate-passes
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// min-llvm-version 5.0
|
|
||||||
// ignore-emscripten
|
// ignore-emscripten
|
||||||
|
|
||||||
// Test that the simd_reduce_{op} intrinsics produce ok-ish error
|
// Test that the simd_reduce_{op} intrinsics produce ok-ish error
|
||||||
|
|
|
@ -8,9 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// asmjs can't even pass i128 as arguments or return values, so ignore it.
|
|
||||||
// this will hopefully be fixed by the LLVM 5 upgrade (#43370)
|
|
||||||
// ignore-asmjs
|
|
||||||
// ignore-emscripten
|
// ignore-emscripten
|
||||||
|
|
||||||
// compile-flags: -Z lower_128bit_ops=yes -C debug_assertions=no
|
// compile-flags: -Z lower_128bit_ops=yes -C debug_assertions=no
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
|
|
||||||
# min-llvm-version 4.0
|
|
||||||
# ignore-msvc
|
# ignore-msvc
|
||||||
|
|
||||||
-include ../tools.mk
|
-include ../tools.mk
|
||||||
|
|
|
@ -28,12 +28,7 @@ namespace {
|
||||||
|
|
||||||
bool runOnFunction(Function &F) override;
|
bool runOnFunction(Function &F) override;
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR >= 4
|
StringRef getPassName() const override {
|
||||||
StringRef
|
|
||||||
#else
|
|
||||||
const char *
|
|
||||||
#endif
|
|
||||||
getPassName() const override {
|
|
||||||
return "Some LLVM pass";
|
return "Some LLVM pass";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,12 +27,7 @@ namespace {
|
||||||
|
|
||||||
bool runOnModule(Module &M) override;
|
bool runOnModule(Module &M) override;
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR >= 4
|
StringRef getPassName() const override {
|
||||||
StringRef
|
|
||||||
#else
|
|
||||||
const char *
|
|
||||||
#endif
|
|
||||||
getPassName() const override {
|
|
||||||
return "Some LLVM pass";
|
return "Some LLVM pass";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// check that we don't have linear stack usage with multiple calls to `push`
|
// check that we don't have linear stack usage with multiple calls to `push`
|
||||||
// min-llvm-version 4.0
|
|
||||||
|
|
||||||
#![feature(test)]
|
#![feature(test)]
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// min-llvm-version 5.0
|
|
||||||
// ignore-emscripten
|
// ignore-emscripten
|
||||||
|
|
||||||
// Test that the simd_reduce_{op} intrinsics produce the correct results.
|
// Test that the simd_reduce_{op} intrinsics produce the correct results.
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
// ignore-emscripten no processes
|
// ignore-emscripten no processes
|
||||||
// ignore-musl FIXME #31506
|
// ignore-musl FIXME #31506
|
||||||
// ignore-pretty
|
// ignore-pretty
|
||||||
// min-system-llvm-version 5.0
|
|
||||||
// compile-flags: -C lto
|
// compile-flags: -C lto
|
||||||
// no-prefer-dynamic
|
// no-prefer-dynamic
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
// ignore-cloudabi no processes
|
// ignore-cloudabi no processes
|
||||||
// ignore-emscripten no processes
|
// ignore-emscripten no processes
|
||||||
// ignore-musl FIXME #31506
|
// ignore-musl FIXME #31506
|
||||||
// min-system-llvm-version 5.0
|
|
||||||
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// compile-flags: -Z thinlto -C codegen-units=2
|
// compile-flags: -Z thinlto -C codegen-units=2
|
||||||
// min-llvm-version 4.0
|
|
||||||
|
|
||||||
#[global_allocator]
|
#[global_allocator]
|
||||||
static A: std::alloc::System = std::alloc::System;
|
static A: std::alloc::System = std::alloc::System;
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// compile-flags: -Clto=thin
|
// compile-flags: -Clto=thin
|
||||||
// no-prefer-dynamic
|
// no-prefer-dynamic
|
||||||
// min-llvm-version 4.0
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println!("hello!");
|
println!("hello!");
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// aux-build:dylib.rs
|
// aux-build:dylib.rs
|
||||||
// min-llvm-version 4.0
|
|
||||||
|
|
||||||
extern crate dylib;
|
extern crate dylib;
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// aux-build:msvc-imp-present.rs
|
// aux-build:msvc-imp-present.rs
|
||||||
// compile-flags: -Z thinlto -C codegen-units=8
|
// compile-flags: -Z thinlto -C codegen-units=8
|
||||||
// min-llvm-version: 4.0
|
|
||||||
// no-prefer-dynamic
|
// no-prefer-dynamic
|
||||||
|
|
||||||
// On MSVC we have a "hack" where we emit symbols that look like `_imp_$name`
|
// On MSVC we have a "hack" where we emit symbols that look like `_imp_$name`
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// compile-flags: -Z thinlto -C codegen-units=8 -O
|
// compile-flags: -Z thinlto -C codegen-units=8 -O
|
||||||
// min-llvm-version 4.0
|
|
||||||
// ignore-emscripten can't inspect instructions on emscripten
|
// ignore-emscripten can't inspect instructions on emscripten
|
||||||
|
|
||||||
// We want to assert here that ThinLTO will inline across codegen units. There's
|
// We want to assert here that ThinLTO will inline across codegen units. There's
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// compile-flags: -C codegen-units=8 -O -C lto=thin
|
// compile-flags: -C codegen-units=8 -O -C lto=thin
|
||||||
// aux-build:thin-lto-inlines-aux.rs
|
// aux-build:thin-lto-inlines-aux.rs
|
||||||
// min-llvm-version 4.0
|
|
||||||
// no-prefer-dynamic
|
// no-prefer-dynamic
|
||||||
// ignore-emscripten can't inspect instructions on emscripten
|
// ignore-emscripten can't inspect instructions on emscripten
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
// compile-flags: -C codegen-units=8 -Z thinlto
|
// compile-flags: -C codegen-units=8 -Z thinlto
|
||||||
// ignore-windows
|
// ignore-windows
|
||||||
// min-llvm-version 4.0
|
|
||||||
|
|
||||||
#![feature(linkage)]
|
#![feature(linkage)]
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue