mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-12 13:30:51 +00:00
Add ArrayRef constructor from None, and do the cleanups that this constructor enables
Patch by Robert Wilhelm. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181138 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
76be9bf67e
commit
5c332dbd30
@ -10,6 +10,7 @@
|
||||
#ifndef LLVM_ADT_ARRAYREF_H
|
||||
#define LLVM_ADT_ARRAYREF_H
|
||||
|
||||
#include "llvm/ADT/None.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include <vector>
|
||||
|
||||
@ -49,6 +50,9 @@ namespace llvm {
|
||||
/// Construct an empty ArrayRef.
|
||||
/*implicit*/ ArrayRef() : Data(0), Length(0) {}
|
||||
|
||||
/// Construct an empty ArrayRef from None.
|
||||
/*implicit*/ ArrayRef(NoneType) : Data(0), Length(0) {}
|
||||
|
||||
/// Construct an ArrayRef from a single element.
|
||||
/*implicit*/ ArrayRef(const T &OneElt)
|
||||
: Data(&OneElt), Length(1) {}
|
||||
@ -174,9 +178,12 @@ namespace llvm {
|
||||
public:
|
||||
typedef T *iterator;
|
||||
|
||||
/// Construct an empty ArrayRef.
|
||||
/// Construct an empty MutableArrayRef.
|
||||
/*implicit*/ MutableArrayRef() : ArrayRef<T>() {}
|
||||
|
||||
/// Construct an empty MutableArrayRef from None.
|
||||
/*implicit*/ MutableArrayRef(NoneType) : ArrayRef<T>() {}
|
||||
|
||||
/// Construct an MutableArrayRef from a single element.
|
||||
/*implicit*/ MutableArrayRef(T &OneElt) : ArrayRef<T>(OneElt) {}
|
||||
|
||||
|
@ -196,8 +196,7 @@ public:
|
||||
/// allocator. These registers should not be split into new intervals
|
||||
/// as currently those new intervals are not guaranteed to spill.
|
||||
void eliminateDeadDefs(SmallVectorImpl<MachineInstr*> &Dead,
|
||||
ArrayRef<unsigned> RegsBeingSpilled
|
||||
= ArrayRef<unsigned>());
|
||||
ArrayRef<unsigned> RegsBeingSpilled = None);
|
||||
|
||||
/// calculateRegClassAndHint - Recompute register class and hint for each new
|
||||
/// register.
|
||||
|
@ -263,10 +263,9 @@ public:
|
||||
/// trace. Likewise, extra resources required by the specified scheduling
|
||||
/// classes are included. For the caller to account for extra machine
|
||||
/// instructions, it must first resolve each instruction's scheduling class.
|
||||
unsigned getResourceLength(ArrayRef<const MachineBasicBlock*> Extrablocks =
|
||||
ArrayRef<const MachineBasicBlock*>(),
|
||||
ArrayRef<const MCSchedClassDesc*> ExtraInstrs =
|
||||
ArrayRef<const MCSchedClassDesc*>()) const;
|
||||
unsigned getResourceLength(
|
||||
ArrayRef<const MachineBasicBlock*> Extrablocks = None,
|
||||
ArrayRef<const MCSchedClassDesc*> ExtraInstrs = None) const;
|
||||
|
||||
/// Return the length of the (data dependency) critical path through the
|
||||
/// trace.
|
||||
|
@ -45,12 +45,12 @@ namespace Intrinsic {
|
||||
|
||||
/// Intrinsic::getName(ID) - Return the LLVM name for an intrinsic, such as
|
||||
/// "llvm.ppc.altivec.lvx".
|
||||
std::string getName(ID id, ArrayRef<Type*> Tys = ArrayRef<Type*>());
|
||||
|
||||
std::string getName(ID id, ArrayRef<Type*> Tys = None);
|
||||
|
||||
/// Intrinsic::getType(ID) - Return the function type for an intrinsic.
|
||||
///
|
||||
FunctionType *getType(LLVMContext &Context, ID id,
|
||||
ArrayRef<Type*> Tys = ArrayRef<Type*>());
|
||||
ArrayRef<Type*> Tys = None);
|
||||
|
||||
/// Intrinsic::isOverloaded(ID) - Returns true if the intrinsic can be
|
||||
/// overloaded.
|
||||
@ -67,8 +67,7 @@ namespace Intrinsic {
|
||||
/// using iAny, fAny, vAny, or iPTRAny). For a declaration of an overloaded
|
||||
/// intrinsic, Tys must provide exactly one type for each overloaded type in
|
||||
/// the intrinsic.
|
||||
Function *getDeclaration(Module *M, ID id,
|
||||
ArrayRef<Type*> Tys = ArrayRef<Type*>());
|
||||
Function *getDeclaration(Module *M, ID id, ArrayRef<Type*> Tys = None);
|
||||
|
||||
/// Map a GCC builtin name to an intrinsic ID.
|
||||
ID getIntrinsicForGCCBuiltin(const char *Prefix, const char *BuiltinName);
|
||||
|
@ -122,14 +122,14 @@ public:
|
||||
///
|
||||
/// \return The return value is true, if warnings are fatal.
|
||||
virtual bool Warning(SMLoc L, const Twine &Msg,
|
||||
ArrayRef<SMRange> Ranges = ArrayRef<SMRange>()) = 0;
|
||||
ArrayRef<SMRange> Ranges = None) = 0;
|
||||
|
||||
/// Error - Emit an error at the location \p L, with the message \p Msg.
|
||||
///
|
||||
/// \return The return value is always true, as an idiomatic convenience to
|
||||
/// clients.
|
||||
virtual bool Error(SMLoc L, const Twine &Msg,
|
||||
ArrayRef<SMRange> Ranges = ArrayRef<SMRange>()) = 0;
|
||||
ArrayRef<SMRange> Ranges = None) = 0;
|
||||
|
||||
/// Lex - Get the next AsmToken in the stream, possibly handling file
|
||||
/// inclusion first.
|
||||
@ -139,8 +139,7 @@ public:
|
||||
const AsmToken &getTok();
|
||||
|
||||
/// \brief Report an error at the current lexer location.
|
||||
bool TokError(const Twine &Msg,
|
||||
ArrayRef<SMRange> Ranges = ArrayRef<SMRange>());
|
||||
bool TokError(const Twine &Msg, ArrayRef<SMRange> Ranges = None);
|
||||
|
||||
/// parseIdentifier - Parse an identifier or string (as a quoted identifier)
|
||||
/// and set \p Res to the identifier contents.
|
||||
|
@ -145,8 +145,8 @@ public:
|
||||
/// @param ShowColors - Display colored messages if output is a terminal and
|
||||
/// the default error handler is used.
|
||||
void PrintMessage(SMLoc Loc, DiagKind Kind, const Twine &Msg,
|
||||
ArrayRef<SMRange> Ranges = ArrayRef<SMRange>(),
|
||||
ArrayRef<SMFixIt> FixIts = ArrayRef<SMFixIt>(),
|
||||
ArrayRef<SMRange> Ranges = None,
|
||||
ArrayRef<SMFixIt> FixIts = None,
|
||||
bool ShowColors = true) const;
|
||||
|
||||
|
||||
@ -155,9 +155,9 @@ public:
|
||||
///
|
||||
/// @param Msg If non-null, the kind of message (e.g., "error") which is
|
||||
/// prefixed to the message.
|
||||
SMDiagnostic GetMessage(SMLoc Loc, DiagKind Kind, const Twine &Msg,
|
||||
ArrayRef<SMRange> Ranges = ArrayRef<SMRange>(),
|
||||
ArrayRef<SMFixIt> FixIts = ArrayRef<SMFixIt>()) const;
|
||||
SMDiagnostic GetMessage(SMLoc Loc, DiagKind Kind, const Twine &Msg,
|
||||
ArrayRef<SMRange> Ranges = None,
|
||||
ArrayRef<SMFixIt> FixIts = None) const;
|
||||
|
||||
/// PrintIncludeStack - Prints the names of included files and the line of the
|
||||
/// file they were included from. A diagnostic handler can use this before
|
||||
@ -227,7 +227,7 @@ public:
|
||||
int Line, int Col, SourceMgr::DiagKind Kind,
|
||||
StringRef Msg, StringRef LineStr,
|
||||
ArrayRef<std::pair<unsigned,unsigned> > Ranges,
|
||||
ArrayRef<SMFixIt> FixIts = ArrayRef<SMFixIt>());
|
||||
ArrayRef<SMFixIt> FixIts = None);
|
||||
|
||||
const SourceMgr *getSourceMgr() const { return SM; }
|
||||
SMLoc getLoc() const { return Loc; }
|
||||
|
@ -528,7 +528,7 @@ bool LLParser::ParseMDNodeID(MDNode *&Result) {
|
||||
if (Result) return false;
|
||||
|
||||
// Otherwise, create MDNode forward reference.
|
||||
MDNode *FwdNode = MDNode::getTemporary(Context, ArrayRef<Value*>());
|
||||
MDNode *FwdNode = MDNode::getTemporary(Context, None);
|
||||
ForwardRefMDNodes[MID] = std::make_pair(FwdNode, Lex.getLoc());
|
||||
|
||||
if (NumberedMetadata.size() <= MID)
|
||||
|
@ -405,7 +405,7 @@ Value *BitcodeReaderMDValueList::getValueFwdRef(unsigned Idx) {
|
||||
}
|
||||
|
||||
// Create and return a placeholder, which will later be RAUW'd.
|
||||
Value *V = MDNode::getTemporary(Context, ArrayRef<Value*>());
|
||||
Value *V = MDNode::getTemporary(Context, None);
|
||||
MDValuePtrs[Idx] = V;
|
||||
return V;
|
||||
}
|
||||
|
@ -5252,7 +5252,7 @@ SDNode *SelectionDAG::MorphNodeTo(SDNode *N, unsigned Opc,
|
||||
MachineSDNode *
|
||||
SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl, EVT VT) {
|
||||
SDVTList VTs = getVTList(VT);
|
||||
return getMachineNode(Opcode, dl, VTs, ArrayRef<SDValue>());
|
||||
return getMachineNode(Opcode, dl, VTs, None);
|
||||
}
|
||||
|
||||
MachineSDNode *
|
||||
@ -5288,7 +5288,7 @@ SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl, EVT VT,
|
||||
MachineSDNode *
|
||||
SelectionDAG::getMachineNode(unsigned Opcode, DebugLoc dl, EVT VT1, EVT VT2) {
|
||||
SDVTList VTs = getVTList(VT1, VT2);
|
||||
return getMachineNode(Opcode, dl, VTs, ArrayRef<SDValue>());
|
||||
return getMachineNode(Opcode, dl, VTs, None);
|
||||
}
|
||||
|
||||
MachineSDNode *
|
||||
|
@ -70,14 +70,14 @@ ShrinkWrapFunc("shrink-wrap-func", cl::Hidden,
|
||||
|
||||
// Debugging level for shrink wrapping.
|
||||
enum ShrinkWrapDebugLevel {
|
||||
None, BasicInfo, Iterations, Details
|
||||
Disabled, BasicInfo, Iterations, Details
|
||||
};
|
||||
|
||||
static cl::opt<enum ShrinkWrapDebugLevel>
|
||||
ShrinkWrapDebugging("shrink-wrap-dbg", cl::Hidden,
|
||||
cl::desc("Print shrink wrapping debugging information"),
|
||||
cl::values(
|
||||
clEnumVal(None , "disable debug output"),
|
||||
clEnumVal(Disabled , "disable debug output"),
|
||||
clEnumVal(BasicInfo , "print basic DF sets"),
|
||||
clEnumVal(Iterations, "print SR sets for each iteration"),
|
||||
clEnumVal(Details , "print all DF sets"),
|
||||
|
@ -318,7 +318,7 @@ struct ExprMapKeyType {
|
||||
ArrayRef<Constant*> ops,
|
||||
unsigned short flags = 0,
|
||||
unsigned short optionalflags = 0,
|
||||
ArrayRef<unsigned> inds = ArrayRef<unsigned>())
|
||||
ArrayRef<unsigned> inds = None)
|
||||
: opcode(opc), subclassoptionaldata(optionalflags), subclassdata(flags),
|
||||
operands(ops.begin(), ops.end()), indices(inds.begin(), inds.end()) {}
|
||||
uint8_t opcode;
|
||||
|
@ -42,14 +42,14 @@ namespace llvm {
|
||||
|
||||
// Different debug levels that can be enabled...
|
||||
enum PassDebugLevel {
|
||||
None, Arguments, Structure, Executions, Details
|
||||
Disabled, Arguments, Structure, Executions, Details
|
||||
};
|
||||
|
||||
static cl::opt<enum PassDebugLevel>
|
||||
PassDebugging("debug-pass", cl::Hidden,
|
||||
cl::desc("Print PassManager debugging information"),
|
||||
cl::values(
|
||||
clEnumVal(None , "disable debug output"),
|
||||
clEnumVal(Disabled , "disable debug output"),
|
||||
clEnumVal(Arguments , "print pass arguments to pass to 'opt'"),
|
||||
clEnumVal(Structure , "print pass structure before run()"),
|
||||
clEnumVal(Executions, "print pass name before it is executed"),
|
||||
|
@ -380,7 +380,7 @@ FunctionType *FunctionType::get(Type *ReturnType,
|
||||
}
|
||||
|
||||
FunctionType *FunctionType::get(Type *Result, bool isVarArg) {
|
||||
return get(Result, ArrayRef<Type *>(), isVarArg);
|
||||
return get(Result, None, isVarArg);
|
||||
}
|
||||
|
||||
/// isValidReturnType - Return true if the specified type is valid as a return
|
||||
@ -499,7 +499,7 @@ StructType *StructType::create(LLVMContext &Context, StringRef Name) {
|
||||
}
|
||||
|
||||
StructType *StructType::get(LLVMContext &Context, bool isPacked) {
|
||||
return get(Context, llvm::ArrayRef<Type*>(), isPacked);
|
||||
return get(Context, None, isPacked);
|
||||
}
|
||||
|
||||
StructType *StructType::get(Type *type, ...) {
|
||||
|
@ -201,9 +201,9 @@ public:
|
||||
}
|
||||
|
||||
virtual bool Warning(SMLoc L, const Twine &Msg,
|
||||
ArrayRef<SMRange> Ranges = ArrayRef<SMRange>());
|
||||
ArrayRef<SMRange> Ranges = None);
|
||||
virtual bool Error(SMLoc L, const Twine &Msg,
|
||||
ArrayRef<SMRange> Ranges = ArrayRef<SMRange>());
|
||||
ArrayRef<SMRange> Ranges = None);
|
||||
|
||||
virtual const AsmToken &Lex();
|
||||
|
||||
@ -286,7 +286,7 @@ private:
|
||||
|
||||
void PrintMacroInstantiations();
|
||||
void PrintMessage(SMLoc Loc, SourceMgr::DiagKind Kind, const Twine &Msg,
|
||||
ArrayRef<SMRange> Ranges = ArrayRef<SMRange>()) const {
|
||||
ArrayRef<SMRange> Ranges = None) const {
|
||||
SrcMgr.PrintMessage(Loc, Kind, Msg, Ranges);
|
||||
}
|
||||
static void DiagHandler(const SMDiagnostic &Diag, void *Context);
|
||||
|
@ -260,7 +260,7 @@ public:
|
||||
Token getNext();
|
||||
|
||||
void printError(SMLoc Loc, SourceMgr::DiagKind Kind, const Twine &Message,
|
||||
ArrayRef<SMRange> Ranges = ArrayRef<SMRange>()) {
|
||||
ArrayRef<SMRange> Ranges = None) {
|
||||
SM.PrintMessage(Loc, Kind, Message, Ranges);
|
||||
}
|
||||
|
||||
|
@ -86,11 +86,11 @@ class ARMAsmParser : public MCTargetAsmParser {
|
||||
MCAsmLexer &getLexer() const { return Parser.getLexer(); }
|
||||
|
||||
bool Warning(SMLoc L, const Twine &Msg,
|
||||
ArrayRef<SMRange> Ranges = ArrayRef<SMRange>()) {
|
||||
ArrayRef<SMRange> Ranges = None) {
|
||||
return Parser.Warning(L, Msg, Ranges);
|
||||
}
|
||||
bool Error(SMLoc L, const Twine &Msg,
|
||||
ArrayRef<SMRange> Ranges = ArrayRef<SMRange>()) {
|
||||
ArrayRef<SMRange> Ranges = None) {
|
||||
return Parser.Error(L, Msg, Ranges);
|
||||
}
|
||||
|
||||
|
@ -477,7 +477,7 @@ private:
|
||||
MCAsmLexer &getLexer() const { return Parser.getLexer(); }
|
||||
|
||||
bool Error(SMLoc L, const Twine &Msg,
|
||||
ArrayRef<SMRange> Ranges = ArrayRef<SMRange>(),
|
||||
ArrayRef<SMRange> Ranges = None,
|
||||
bool MatchingInlineAsm = false) {
|
||||
if (MatchingInlineAsm) return true;
|
||||
return Parser.Error(L, Msg, Ranges);
|
||||
@ -2204,7 +2204,7 @@ MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
|
||||
assert(!Operands.empty() && "Unexpect empty operand list!");
|
||||
X86Operand *Op = static_cast<X86Operand*>(Operands[0]);
|
||||
assert(Op->isToken() && "Leading operand should always be a mnemonic!");
|
||||
ArrayRef<SMRange> EmptyRanges = ArrayRef<SMRange>();
|
||||
ArrayRef<SMRange> EmptyRanges = None;
|
||||
|
||||
// First, handle aliases that expand to multiple instructions.
|
||||
// FIXME: This should be replaced with a real .td file alias mechanism.
|
||||
|
@ -1483,7 +1483,7 @@ Instruction *InstCombiner::visitAllocSite(Instruction &MI) {
|
||||
Module *M = II->getParent()->getParent()->getParent();
|
||||
Function *F = Intrinsic::getDeclaration(M, Intrinsic::donothing);
|
||||
InvokeInst::Create(F, II->getNormalDest(), II->getUnwindDest(),
|
||||
ArrayRef<Value *>(), "", II->getParent());
|
||||
None, "", II->getParent());
|
||||
}
|
||||
return EraseInstFromFunction(MI);
|
||||
}
|
||||
|
@ -1472,8 +1472,7 @@ void ObjCARCOpt::OptimizeIndividualCalls(Function &F) {
|
||||
CallInst *NewCall =
|
||||
CallInst::Create(getReleaseCallee(F.getParent()),
|
||||
Call->getArgOperand(0), "", Call);
|
||||
NewCall->setMetadata(ImpreciseReleaseMDKind,
|
||||
MDNode::get(C, ArrayRef<Value *>()));
|
||||
NewCall->setMetadata(ImpreciseReleaseMDKind, MDNode::get(C, None));
|
||||
|
||||
DEBUG(dbgs() << "Replacing autorelease{,RV}(x) with objc_release(x) "
|
||||
"since x is otherwise unused.\nOld: " << *Call << "\nNew: "
|
||||
|
@ -57,7 +57,7 @@ Value *llvm::MapValue(const Value *V, ValueToValueMapTy &VM, RemapFlags Flags,
|
||||
return VM[V] = const_cast<Value*>(V);
|
||||
|
||||
// Create a dummy node in case we have a metadata cycle.
|
||||
MDNode *Dummy = MDNode::getTemporary(V->getContext(), ArrayRef<Value*>());
|
||||
MDNode *Dummy = MDNode::getTemporary(V->getContext(), None);
|
||||
VM[V] = Dummy;
|
||||
|
||||
// Check all operands to see if any need to be remapped.
|
||||
|
@ -1231,7 +1231,7 @@ InnerLoopVectorizer::createEmptyLoop(LoopVectorizationLegality *Legal) {
|
||||
|
||||
// Mark the old scalar loop with metadata that tells us not to vectorize this
|
||||
// loop again if we run into it.
|
||||
MDNode *MD = MDNode::get(OldBasicBlock->getContext(), ArrayRef<Value*>());
|
||||
MDNode *MD = MDNode::get(OldBasicBlock->getContext(), None);
|
||||
OldBasicBlock->getTerminator()->setMetadata(AlreadyVectorizedMDName, MD);
|
||||
|
||||
// Some loops have a single integer induction variable, while other loops
|
||||
|
Loading…
Reference in New Issue
Block a user