mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
Fix "the the" and similar typos.
llvm-svn: 95781
This commit is contained in:
parent
fd8f55bc9e
commit
92b6122204
@ -72,7 +72,7 @@ Value *getMallocArraySize(CallInst *CI, const TargetData *TD,
|
|||||||
// free Call Utility Functions.
|
// free Call Utility Functions.
|
||||||
//
|
//
|
||||||
|
|
||||||
/// isFreeCall - Returns true if the the value is a call to the builtin free()
|
/// isFreeCall - Returns true if the value is a call to the builtin free()
|
||||||
bool isFreeCall(const Value *I);
|
bool isFreeCall(const Value *I);
|
||||||
|
|
||||||
} // End llvm namespace
|
} // End llvm namespace
|
||||||
|
@ -291,7 +291,7 @@ private:
|
|||||||
/// EmitRecordWithAbbrevImpl - This is the core implementation of the record
|
/// EmitRecordWithAbbrevImpl - This is the core implementation of the record
|
||||||
/// emission code. If BlobData is non-null, then it specifies an array of
|
/// emission code. If BlobData is non-null, then it specifies an array of
|
||||||
/// data that should be emitted as part of the Blob or Array operand that is
|
/// data that should be emitted as part of the Blob or Array operand that is
|
||||||
/// known to exist at the end of the the record.
|
/// known to exist at the end of the record.
|
||||||
template<typename uintty>
|
template<typename uintty>
|
||||||
void EmitRecordWithAbbrevImpl(unsigned Abbrev, SmallVectorImpl<uintty> &Vals,
|
void EmitRecordWithAbbrevImpl(unsigned Abbrev, SmallVectorImpl<uintty> &Vals,
|
||||||
StringRef Blob) {
|
StringRef Blob) {
|
||||||
|
@ -146,7 +146,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// emitAlignment - Move the CurBufferPtr pointer up the the specified
|
/// emitAlignment - Move the CurBufferPtr pointer up the specified
|
||||||
/// alignment (saturated to BufferEnd of course).
|
/// alignment (saturated to BufferEnd of course).
|
||||||
void emitAlignment(unsigned Alignment) {
|
void emitAlignment(unsigned Alignment) {
|
||||||
if (Alignment == 0) Alignment = 1;
|
if (Alignment == 0) Alignment = 1;
|
||||||
|
@ -320,7 +320,7 @@ namespace llvm {
|
|||||||
/// advanceTo - Advance the specified iterator to point to the LiveRange
|
/// advanceTo - Advance the specified iterator to point to the LiveRange
|
||||||
/// containing the specified position, or end() if the position is past the
|
/// containing the specified position, or end() if the position is past the
|
||||||
/// end of the interval. If no LiveRange contains this position, but the
|
/// end of the interval. If no LiveRange contains this position, but the
|
||||||
/// position is in a hole, this method returns an iterator pointing the the
|
/// position is in a hole, this method returns an iterator pointing the
|
||||||
/// LiveRange immediately after the hole.
|
/// LiveRange immediately after the hole.
|
||||||
iterator advanceTo(iterator I, SlotIndex Pos) {
|
iterator advanceTo(iterator I, SlotIndex Pos) {
|
||||||
if (Pos >= endIndex())
|
if (Pos >= endIndex())
|
||||||
|
@ -155,7 +155,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// emitAlignment - Move the CurBufferPtr pointer up the the specified
|
/// emitAlignment - Move the CurBufferPtr pointer up the specified
|
||||||
/// alignment (saturated to BufferEnd of course).
|
/// alignment (saturated to BufferEnd of course).
|
||||||
void emitAlignment(unsigned Alignment) {
|
void emitAlignment(unsigned Alignment) {
|
||||||
if (Alignment == 0) Alignment = 1;
|
if (Alignment == 0) Alignment = 1;
|
||||||
|
@ -136,7 +136,7 @@ public:
|
|||||||
: TD(td), PoolAlignment(1) {}
|
: TD(td), PoolAlignment(1) {}
|
||||||
~MachineConstantPool();
|
~MachineConstantPool();
|
||||||
|
|
||||||
/// getConstantPoolAlignment - Return the the alignment required by
|
/// getConstantPoolAlignment - Return the alignment required by
|
||||||
/// the whole constant pool, of which the first element must be aligned.
|
/// the whole constant pool, of which the first element must be aligned.
|
||||||
unsigned getConstantPoolAlignment() const { return PoolAlignment; }
|
unsigned getConstantPoolAlignment() const { return PoolAlignment; }
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ public:
|
|||||||
bool NoImp = false);
|
bool NoImp = false);
|
||||||
|
|
||||||
/// CloneMachineInstr - Create a new MachineInstr which is a copy of the
|
/// CloneMachineInstr - Create a new MachineInstr which is a copy of the
|
||||||
/// 'Orig' instruction, identical in all ways except the the instruction
|
/// 'Orig' instruction, identical in all ways except the instruction
|
||||||
/// has no parent, prev, or next.
|
/// has no parent, prev, or next.
|
||||||
///
|
///
|
||||||
/// See also TargetInstrInfo::duplicate() for target-specific fixes to cloned
|
/// See also TargetInstrInfo::duplicate() for target-specific fixes to cloned
|
||||||
|
@ -347,7 +347,7 @@ public:
|
|||||||
|
|
||||||
/// isInvariantLoad - Return true if this instruction is loading from a
|
/// isInvariantLoad - Return true if this instruction is loading from a
|
||||||
/// location whose value is invariant across the function. For example,
|
/// location whose value is invariant across the function. For example,
|
||||||
/// loading a value from the constant pool or from from the argument area of
|
/// loading a value from the constant pool or from the argument area of
|
||||||
/// a function if it does not change. This should only return true of *all*
|
/// a function if it does not change. This should only return true of *all*
|
||||||
/// loads the instruction does are invariant (if it does multiple loads).
|
/// loads the instruction does are invariant (if it does multiple loads).
|
||||||
bool isInvariantLoad(AliasAnalysis *AA) const;
|
bool isInvariantLoad(AliasAnalysis *AA) const;
|
||||||
|
@ -81,7 +81,7 @@ public:
|
|||||||
/// written to the data stream in big-endian format.
|
/// written to the data stream in big-endian format.
|
||||||
void emitDWordBE(uint64_t W);
|
void emitDWordBE(uint64_t W);
|
||||||
|
|
||||||
/// emitAlignment - Move the CurBufferPtr pointer up the the specified
|
/// emitAlignment - Move the CurBufferPtr pointer up the specified
|
||||||
/// alignment (saturated to BufferEnd of course).
|
/// alignment (saturated to BufferEnd of course).
|
||||||
void emitAlignment(unsigned Alignment = 0, uint8_t fill = 0);
|
void emitAlignment(unsigned Alignment = 0, uint8_t fill = 0);
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ public:
|
|||||||
void setSection(StringRef S) { Section = S; }
|
void setSection(StringRef S) { Section = S; }
|
||||||
|
|
||||||
/// If the usage is empty (except transitively dead constants), then this
|
/// If the usage is empty (except transitively dead constants), then this
|
||||||
/// global value can can be safely deleted since the destructor will
|
/// global value can be safely deleted since the destructor will
|
||||||
/// delete the dead constants as well.
|
/// delete the dead constants as well.
|
||||||
/// @brief Determine if the usage of this global value is empty except
|
/// @brief Determine if the usage of this global value is empty except
|
||||||
/// for transitively dead constants.
|
/// for transitively dead constants.
|
||||||
|
@ -39,7 +39,7 @@ class InlineAsm : public Value {
|
|||||||
virtual ~InlineAsm();
|
virtual ~InlineAsm();
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/// InlineAsm::get - Return the the specified uniqued inline asm string.
|
/// InlineAsm::get - Return the specified uniqued inline asm string.
|
||||||
///
|
///
|
||||||
static InlineAsm *get(const FunctionType *Ty, StringRef AsmString,
|
static InlineAsm *get(const FunctionType *Ty, StringRef AsmString,
|
||||||
StringRef Constraints, bool hasSideEffects,
|
StringRef Constraints, bool hasSideEffects,
|
||||||
|
@ -148,7 +148,7 @@ public:
|
|||||||
getAllMetadataImpl(MDs);
|
getAllMetadataImpl(MDs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// setMetadata - Set the metadata of of the specified kind to the specified
|
/// setMetadata - Set the metadata of the specified kind to the specified
|
||||||
/// node. This updates/replaces metadata if already present, or removes it if
|
/// node. This updates/replaces metadata if already present, or removes it if
|
||||||
/// Node is null.
|
/// Node is null.
|
||||||
void setMetadata(unsigned KindID, MDNode *Node);
|
void setMetadata(unsigned KindID, MDNode *Node);
|
||||||
|
@ -223,7 +223,7 @@ class Linker {
|
|||||||
/// the archive that resolve outstanding symbols will be linked in. The
|
/// the archive that resolve outstanding symbols will be linked in. The
|
||||||
/// library is searched repeatedly until no more modules that resolve
|
/// library is searched repeatedly until no more modules that resolve
|
||||||
/// symbols can be found. If an error occurs, the error string is set.
|
/// symbols can be found. If an error occurs, the error string is set.
|
||||||
/// To speed up this function, ensure the the archive has been processed
|
/// To speed up this function, ensure the archive has been processed
|
||||||
/// llvm-ranlib or the S option was given to llvm-ar when the archive was
|
/// llvm-ranlib or the S option was given to llvm-ar when the archive was
|
||||||
/// created. These tools add a symbol table to the archive which makes the
|
/// created. These tools add a symbol table to the archive which makes the
|
||||||
/// search for undefined symbols much faster.
|
/// search for undefined symbols much faster.
|
||||||
|
@ -89,7 +89,7 @@ namespace llvm {
|
|||||||
return !isDefined();
|
return !isDefined();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// isAbsolute - Check if this this is an absolute symbol.
|
/// isAbsolute - Check if this is an absolute symbol.
|
||||||
bool isAbsolute() const {
|
bool isAbsolute() const {
|
||||||
return Section == AbsolutePseudoSection;
|
return Section == AbsolutePseudoSection;
|
||||||
}
|
}
|
||||||
|
@ -394,8 +394,8 @@ private:
|
|||||||
const AnalysisUsage::VectorType &Set) const;
|
const AnalysisUsage::VectorType &Set) const;
|
||||||
|
|
||||||
// Set of available Analysis. This information is used while scheduling
|
// Set of available Analysis. This information is used while scheduling
|
||||||
// pass. If a pass requires an analysis which is not not available then
|
// pass. If a pass requires an analysis which is not available then
|
||||||
// equired analysis pass is scheduled to run before the pass itself is
|
// the required analysis pass is scheduled to run before the pass itself is
|
||||||
// scheduled to run.
|
// scheduled to run.
|
||||||
std::map<AnalysisID, Pass*> AvailableAnalysis;
|
std::map<AnalysisID, Pass*> AvailableAnalysis;
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ public:
|
|||||||
//===--------------------------------------------------------------------===//
|
//===--------------------------------------------------------------------===//
|
||||||
|
|
||||||
/// CreateGlobalString - Make a new global variable with an initializer that
|
/// CreateGlobalString - Make a new global variable with an initializer that
|
||||||
/// has array of i8 type filled in the the nul terminated string value
|
/// has array of i8 type filled in the nul terminated string value
|
||||||
/// specified. If Name is specified, it is the name of the global variable
|
/// specified. If Name is specified, it is the name of the global variable
|
||||||
/// created.
|
/// created.
|
||||||
Value *CreateGlobalString(const char *Str = "", const Twine &Name = "");
|
Value *CreateGlobalString(const char *Str = "", const Twine &Name = "");
|
||||||
|
@ -23,7 +23,7 @@ namespace sys {
|
|||||||
/// might be known as shared libraries, shared objects, dynamic shared
|
/// might be known as shared libraries, shared objects, dynamic shared
|
||||||
/// objects, or dynamic link libraries. Regardless of the terminology or the
|
/// objects, or dynamic link libraries. Regardless of the terminology or the
|
||||||
/// operating system interface, this class provides a portable interface that
|
/// operating system interface, this class provides a portable interface that
|
||||||
/// allows dynamic libraries to be loaded and and searched for externally
|
/// allows dynamic libraries to be loaded and searched for externally
|
||||||
/// defined symbols. This is typically used to provide "plug-in" support.
|
/// defined symbols. This is typically used to provide "plug-in" support.
|
||||||
/// It also allows for symbols to be defined which don't live in any library,
|
/// It also allows for symbols to be defined which don't live in any library,
|
||||||
/// but rather the main program itself, useful on Windows where the main
|
/// but rather the main program itself, useful on Windows where the main
|
||||||
|
@ -28,7 +28,7 @@ namespace sys {
|
|||||||
/// platform independent and eliminates many of the unix-specific fields.
|
/// platform independent and eliminates many of the unix-specific fields.
|
||||||
/// However, to support llvm-ar, the mode, user, and group fields are
|
/// However, to support llvm-ar, the mode, user, and group fields are
|
||||||
/// retained. These pertain to unix security and may not have a meaningful
|
/// retained. These pertain to unix security and may not have a meaningful
|
||||||
/// value on non-Unix platforms. However, the other fields fields should
|
/// value on non-Unix platforms. However, the other fields should
|
||||||
/// always be applicable on all platforms. The structure is filled in by
|
/// always be applicable on all platforms. The structure is filled in by
|
||||||
/// the PathWithStatus class.
|
/// the PathWithStatus class.
|
||||||
/// @brief File status structure
|
/// @brief File status structure
|
||||||
|
@ -376,7 +376,7 @@ class OptionalDefOperand<ValueType ty, dag OpTypes, dag defaultops>
|
|||||||
|
|
||||||
|
|
||||||
// InstrInfo - This class should only be instantiated once to provide parameters
|
// InstrInfo - This class should only be instantiated once to provide parameters
|
||||||
// which are global to the the target machine.
|
// which are global to the target machine.
|
||||||
//
|
//
|
||||||
class InstrInfo {
|
class InstrInfo {
|
||||||
// If the target wants to associate some target-specific information with each
|
// If the target wants to associate some target-specific information with each
|
||||||
|
@ -169,7 +169,7 @@ public:
|
|||||||
return I;
|
return I;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// hasSubClass - return true if the the specified TargetRegisterClass
|
/// hasSubClass - return true if the specified TargetRegisterClass
|
||||||
/// is a proper subset of this TargetRegisterClass.
|
/// is a proper subset of this TargetRegisterClass.
|
||||||
bool hasSubClass(const TargetRegisterClass *cs) const {
|
bool hasSubClass(const TargetRegisterClass *cs) const {
|
||||||
for (int i = 0; SubClasses[i] != NULL; ++i)
|
for (int i = 0; SubClasses[i] != NULL; ++i)
|
||||||
|
@ -486,7 +486,7 @@ GlobalsModRef::alias(const Value *V1, unsigned V1Size,
|
|||||||
if (GV1 && !NonAddressTakenGlobals.count(GV1)) GV1 = 0;
|
if (GV1 && !NonAddressTakenGlobals.count(GV1)) GV1 = 0;
|
||||||
if (GV2 && !NonAddressTakenGlobals.count(GV2)) GV2 = 0;
|
if (GV2 && !NonAddressTakenGlobals.count(GV2)) GV2 = 0;
|
||||||
|
|
||||||
// If the the two pointers are derived from two different non-addr-taken
|
// If the two pointers are derived from two different non-addr-taken
|
||||||
// globals, or if one is and the other isn't, we know these can't alias.
|
// globals, or if one is and the other isn't, we know these can't alias.
|
||||||
if ((GV1 || GV2) && GV1 != GV2)
|
if ((GV1 || GV2) && GV1 != GV2)
|
||||||
return NoAlias;
|
return NoAlias;
|
||||||
|
@ -184,7 +184,7 @@ LiveValues::Memo &LiveValues::compute(const Value *V) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the value was never used outside the the block in which it was
|
// If the value was never used outside the block in which it was
|
||||||
// defined, it's killed in that block.
|
// defined, it's killed in that block.
|
||||||
if (!LiveOutOfDefBB)
|
if (!LiveOutOfDefBB)
|
||||||
M.Killed.insert(DefBB);
|
M.Killed.insert(DefBB);
|
||||||
|
@ -24,7 +24,7 @@ using namespace llvm;
|
|||||||
// malloc Call Utility Functions.
|
// malloc Call Utility Functions.
|
||||||
//
|
//
|
||||||
|
|
||||||
/// isMalloc - Returns true if the the value is either a malloc call or a
|
/// isMalloc - Returns true if the value is either a malloc call or a
|
||||||
/// bitcast of the result of a malloc call.
|
/// bitcast of the result of a malloc call.
|
||||||
bool llvm::isMalloc(const Value *I) {
|
bool llvm::isMalloc(const Value *I) {
|
||||||
return extractMallocCall(I) || extractMallocCallFromBitCast(I);
|
return extractMallocCall(I) || extractMallocCallFromBitCast(I);
|
||||||
@ -183,7 +183,7 @@ Value *llvm::getMallocArraySize(CallInst *CI, const TargetData *TD,
|
|||||||
// free Call Utility Functions.
|
// free Call Utility Functions.
|
||||||
//
|
//
|
||||||
|
|
||||||
/// isFreeCall - Returns true if the the value is a call to the builtin free()
|
/// isFreeCall - Returns true if the value is a call to the builtin free()
|
||||||
bool llvm::isFreeCall(const Value *I) {
|
bool llvm::isFreeCall(const Value *I) {
|
||||||
const CallInst *CI = dyn_cast<CallInst>(I);
|
const CallInst *CI = dyn_cast<CallInst>(I);
|
||||||
if (!CI)
|
if (!CI)
|
||||||
|
@ -5032,7 +5032,7 @@ ScalarEvolution::HowManyLessThans(const SCEV *LHS, const SCEV *RHS,
|
|||||||
if (Step->isOne()) {
|
if (Step->isOne()) {
|
||||||
// With unit stride, the iteration never steps past the limit value.
|
// With unit stride, the iteration never steps past the limit value.
|
||||||
} else if (isKnownPositive(Step)) {
|
} else if (isKnownPositive(Step)) {
|
||||||
// Test whether a positive iteration iteration can step past the limit
|
// Test whether a positive iteration can step past the limit
|
||||||
// value and past the maximum value for its type in a single step.
|
// value and past the maximum value for its type in a single step.
|
||||||
// Note that it's not sufficient to check NoWrap here, because even
|
// Note that it's not sufficient to check NoWrap here, because even
|
||||||
// though the value after a wrap is undefined, it's not undefined
|
// though the value after a wrap is undefined, it's not undefined
|
||||||
|
@ -302,7 +302,7 @@ void AsmPrinter::EmitFunctionHeader() {
|
|||||||
OutStreamer.GetCommentOS() << '\n';
|
OutStreamer.GetCommentOS() << '\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Emit the CurrentFnSym. This is is a virtual function to allow targets to
|
// Emit the CurrentFnSym. This is a virtual function to allow targets to
|
||||||
// do their wild and crazy things as required.
|
// do their wild and crazy things as required.
|
||||||
EmitFunctionEntryLabel();
|
EmitFunctionEntryLabel();
|
||||||
|
|
||||||
|
@ -618,7 +618,7 @@ void DwarfDebug::addComplexAddress(DbgVariable *&DV, DIE *Die,
|
|||||||
|
|
||||||
1). Add the offset of the forwarding field.
|
1). Add the offset of the forwarding field.
|
||||||
|
|
||||||
2). Follow that pointer to get the the real __Block_byref_x_VarName
|
2). Follow that pointer to get the real __Block_byref_x_VarName
|
||||||
struct to use (the real one may have been copied onto the heap).
|
struct to use (the real one may have been copied onto the heap).
|
||||||
|
|
||||||
3). Add the offset for the field VarName, to find the actual variable.
|
3). Add the offset for the field VarName, to find the actual variable.
|
||||||
|
@ -103,7 +103,7 @@ class DwarfDebug : public DwarfPrinter {
|
|||||||
///
|
///
|
||||||
SmallVector<std::pair<unsigned, unsigned>, 8> SourceIds;
|
SmallVector<std::pair<unsigned, unsigned>, 8> SourceIds;
|
||||||
|
|
||||||
/// Lines - List of of source line correspondence.
|
/// Lines - List of source line correspondence.
|
||||||
std::vector<SrcLineInfo> Lines;
|
std::vector<SrcLineInfo> Lines;
|
||||||
|
|
||||||
/// DIEValues - A list of all the unique values in use.
|
/// DIEValues - A list of all the unique values in use.
|
||||||
|
@ -103,7 +103,7 @@ class DwarfException : public DwarfPrinter {
|
|||||||
/// exception. If it matches then the exception and type id are passed
|
/// exception. If it matches then the exception and type id are passed
|
||||||
/// on to the landing pad. Otherwise the next action is looked up. This
|
/// on to the landing pad. Otherwise the next action is looked up. This
|
||||||
/// chain is terminated with a next action of zero. If no type id is
|
/// chain is terminated with a next action of zero. If no type id is
|
||||||
/// found the the frame is unwound and handling continues.
|
/// found the frame is unwound and handling continues.
|
||||||
/// 3. Type id table contains references to all the C++ typeinfo for all
|
/// 3. Type id table contains references to all the C++ typeinfo for all
|
||||||
/// catches in the function. This tables is reversed indexed base 1.
|
/// catches in the function. This tables is reversed indexed base 1.
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ bool CodePlacementOpt::HasAnalyzableTerminator(MachineBasicBlock *MBB) {
|
|||||||
// Ask the target's AnalyzeBranch if it can handle this block.
|
// Ask the target's AnalyzeBranch if it can handle this block.
|
||||||
MachineBasicBlock *TBB = 0, *FBB = 0;
|
MachineBasicBlock *TBB = 0, *FBB = 0;
|
||||||
SmallVector<MachineOperand, 4> Cond;
|
SmallVector<MachineOperand, 4> Cond;
|
||||||
// Make the the terminator is understood.
|
// Make the terminator is understood.
|
||||||
if (TII->AnalyzeBranch(*MBB, TBB, FBB, Cond))
|
if (TII->AnalyzeBranch(*MBB, TBB, FBB, Cond))
|
||||||
return false;
|
return false;
|
||||||
// Make sure we have the option of reversing the condition.
|
// Make sure we have the option of reversing the condition.
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
//
|
//
|
||||||
// This implements a a hazard recognizer using the instructions itineraries
|
// This implements a hazard recognizer using the instructions itineraries
|
||||||
// defined for the current target.
|
// defined for the current target.
|
||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
@ -187,7 +187,7 @@ MachineFunction::CreateMachineInstr(const TargetInstrDesc &TID,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// CloneMachineInstr - Create a new MachineInstr which is a copy of the
|
/// CloneMachineInstr - Create a new MachineInstr which is a copy of the
|
||||||
/// 'Orig' instruction, identical in all ways except the the instruction
|
/// 'Orig' instruction, identical in all ways except the instruction
|
||||||
/// has no parent, prev, or next.
|
/// has no parent, prev, or next.
|
||||||
///
|
///
|
||||||
MachineInstr *
|
MachineInstr *
|
||||||
|
@ -1034,7 +1034,7 @@ bool MachineInstr::hasVolatileMemoryRef() const {
|
|||||||
|
|
||||||
/// isInvariantLoad - Return true if this instruction is loading from a
|
/// isInvariantLoad - Return true if this instruction is loading from a
|
||||||
/// location whose value is invariant across the function. For example,
|
/// location whose value is invariant across the function. For example,
|
||||||
/// loading a value from the constant pool or from from the argument area
|
/// loading a value from the constant pool or from the argument area
|
||||||
/// of a function if it does not change. This should only return true of
|
/// of a function if it does not change. This should only return true of
|
||||||
/// *all* loads the instruction does are invariant (if it does multiple loads).
|
/// *all* loads the instruction does are invariant (if it does multiple loads).
|
||||||
bool MachineInstr::isInvariantLoad(AliasAnalysis *AA) const {
|
bool MachineInstr::isInvariantLoad(AliasAnalysis *AA) const {
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
//
|
//
|
||||||
// Heuristic PBQP solver. This solver is able to perform optimal reductions for
|
// Heuristic PBQP solver. This solver is able to perform optimal reductions for
|
||||||
// nodes of degree 0, 1 or 2. For nodes of degree >2 a plugable heuristic is
|
// nodes of degree 0, 1 or 2. For nodes of degree >2 a plugable heuristic is
|
||||||
// used to to select a node for reduction.
|
// used to select a node for reduction.
|
||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
@ -2640,7 +2640,7 @@ SDValue DAGCombiner::visitSRA(SDNode *N) {
|
|||||||
|
|
||||||
// If the shift is not a no-op (in which case this should be just a sign
|
// If the shift is not a no-op (in which case this should be just a sign
|
||||||
// extend already), the truncated to type is legal, sign_extend is legal
|
// extend already), the truncated to type is legal, sign_extend is legal
|
||||||
// on that type, and the the truncate to that type is both legal and free,
|
// on that type, and the truncate to that type is both legal and free,
|
||||||
// perform the transform.
|
// perform the transform.
|
||||||
if ((ShiftAmt > 0) &&
|
if ((ShiftAmt > 0) &&
|
||||||
TLI.isOperationLegalOrCustom(ISD::SIGN_EXTEND, TruncVT) &&
|
TLI.isOperationLegalOrCustom(ISD::SIGN_EXTEND, TruncVT) &&
|
||||||
|
@ -2767,7 +2767,7 @@ void SelectionDAGLegalize::ExpandNode(SDNode *Node,
|
|||||||
DAG.getIntPtrConstant(1));
|
DAG.getIntPtrConstant(1));
|
||||||
} else {
|
} else {
|
||||||
// FIXME: We should be able to fall back to a libcall with an illegal
|
// FIXME: We should be able to fall back to a libcall with an illegal
|
||||||
// type in some cases cases.
|
// type in some cases.
|
||||||
// Also, we can fall back to a division in some cases, but that's a big
|
// Also, we can fall back to a division in some cases, but that's a big
|
||||||
// performance hit in the general case.
|
// performance hit in the general case.
|
||||||
llvm_unreachable("Don't know how to expand this operation yet!");
|
llvm_unreachable("Don't know how to expand this operation yet!");
|
||||||
|
@ -1349,7 +1349,7 @@ void SelectionDAGBuilder::visitJumpTableHeader(JumpTable &JT,
|
|||||||
DAG.getConstant(JTH.First, VT));
|
DAG.getConstant(JTH.First, VT));
|
||||||
|
|
||||||
// The SDNode we just created, which holds the value being switched on minus
|
// The SDNode we just created, which holds the value being switched on minus
|
||||||
// the the smallest case value, needs to be copied to a virtual register so it
|
// the smallest case value, needs to be copied to a virtual register so it
|
||||||
// can be used as an index into the jump table in a subsequent basic block.
|
// can be used as an index into the jump table in a subsequent basic block.
|
||||||
// This value may be smaller or larger than the target's pointer type, and
|
// This value may be smaller or larger than the target's pointer type, and
|
||||||
// therefore require extension or truncating.
|
// therefore require extension or truncating.
|
||||||
@ -4865,7 +4865,7 @@ isAllocatableRegister(unsigned Reg, MachineFunction &MF,
|
|||||||
EVT ThisVT = MVT::Other;
|
EVT ThisVT = MVT::Other;
|
||||||
|
|
||||||
const TargetRegisterClass *RC = *RCI;
|
const TargetRegisterClass *RC = *RCI;
|
||||||
// If none of the the value types for this register class are valid, we
|
// If none of the value types for this register class are valid, we
|
||||||
// can't use it. For example, 64-bit reg classes on 32-bit targets.
|
// can't use it. For example, 64-bit reg classes on 32-bit targets.
|
||||||
for (TargetRegisterClass::vt_iterator I = RC->vt_begin(), E = RC->vt_end();
|
for (TargetRegisterClass::vt_iterator I = RC->vt_begin(), E = RC->vt_end();
|
||||||
I != E; ++I) {
|
I != E; ++I) {
|
||||||
|
@ -2366,7 +2366,7 @@ getRegForInlineAsmConstraint(const std::string &Constraint,
|
|||||||
E = RI->regclass_end(); RCI != E; ++RCI) {
|
E = RI->regclass_end(); RCI != E; ++RCI) {
|
||||||
const TargetRegisterClass *RC = *RCI;
|
const TargetRegisterClass *RC = *RCI;
|
||||||
|
|
||||||
// If none of the the value types for this register class are valid, we
|
// If none of the value types for this register class are valid, we
|
||||||
// can't use it. For example, 64-bit reg classes on 32-bit targets.
|
// can't use it. For example, 64-bit reg classes on 32-bit targets.
|
||||||
bool isLegal = false;
|
bool isLegal = false;
|
||||||
for (TargetRegisterClass::vt_iterator I = RC->vt_begin(), E = RC->vt_end();
|
for (TargetRegisterClass::vt_iterator I = RC->vt_begin(), E = RC->vt_end();
|
||||||
|
@ -197,7 +197,7 @@ bool SimpleRegisterCoalescing::AdjustCopiesBackFrom(LiveInterval &IntA,
|
|||||||
|
|
||||||
SlotIndex FillerStart = ValLR->end, FillerEnd = BLR->start;
|
SlotIndex FillerStart = ValLR->end, FillerEnd = BLR->start;
|
||||||
// We are about to delete CopyMI, so need to remove it as the 'instruction
|
// We are about to delete CopyMI, so need to remove it as the 'instruction
|
||||||
// that defines this value #'. Update the the valnum with the new defining
|
// that defines this value #'. Update the valnum with the new defining
|
||||||
// instruction #.
|
// instruction #.
|
||||||
BValNo->def = FillerStart;
|
BValNo->def = FillerStart;
|
||||||
BValNo->setCopy(0);
|
BValNo->setCopy(0);
|
||||||
|
@ -95,7 +95,7 @@ bool SlotIndexes::runOnMachineFunction(MachineFunction &fn) {
|
|||||||
|
|
||||||
push_back(createEntry(0, index));
|
push_back(createEntry(0, index));
|
||||||
|
|
||||||
// Iterate over the the function.
|
// Iterate over the function.
|
||||||
for (MachineFunction::iterator mbbItr = mf->begin(), mbbEnd = mf->end();
|
for (MachineFunction::iterator mbbItr = mf->begin(), mbbEnd = mf->end();
|
||||||
mbbItr != mbbEnd; ++mbbItr) {
|
mbbItr != mbbEnd; ++mbbItr) {
|
||||||
MachineBasicBlock *mbb = &*mbbItr;
|
MachineBasicBlock *mbb = &*mbbItr;
|
||||||
|
@ -49,7 +49,7 @@ namespace {
|
|||||||
std::map<unsigned, std::vector<unsigned> > Stacks;
|
std::map<unsigned, std::vector<unsigned> > Stacks;
|
||||||
|
|
||||||
// Registers in UsedByAnother are PHI nodes that are themselves
|
// Registers in UsedByAnother are PHI nodes that are themselves
|
||||||
// used as operands to another another PHI node
|
// used as operands to another PHI node
|
||||||
std::set<unsigned> UsedByAnother;
|
std::set<unsigned> UsedByAnother;
|
||||||
|
|
||||||
// RenameSets are the is a map from a PHI-defined register
|
// RenameSets are the is a map from a PHI-defined register
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
//
|
//
|
||||||
// This file implements the VirtRegMap class.
|
// This file implements the VirtRegMap class.
|
||||||
//
|
//
|
||||||
// It also contains implementations of the the Spiller interface, which, given a
|
// It also contains implementations of the Spiller interface, which, given a
|
||||||
// virtual register map and a machine function, eliminates all virtual
|
// virtual register map and a machine function, eliminates all virtual
|
||||||
// references by replacing them with physical register references - adding spill
|
// references by replacing them with physical register references - adding spill
|
||||||
// code as necessary.
|
// code as necessary.
|
||||||
|
@ -171,7 +171,7 @@ void DarwinRegisterFrame(void* FrameBegin) {
|
|||||||
ob->encoding.i = 0;
|
ob->encoding.i = 0;
|
||||||
ob->encoding.b.encoding = llvm::dwarf::DW_EH_PE_omit;
|
ob->encoding.b.encoding = llvm::dwarf::DW_EH_PE_omit;
|
||||||
|
|
||||||
// Put the info on both places, as libgcc uses the first or the the second
|
// Put the info on both places, as libgcc uses the first or the second
|
||||||
// field. Note that we rely on having two pointers here. If fde_end was a
|
// field. Note that we rely on having two pointers here. If fde_end was a
|
||||||
// char, things would get complicated.
|
// char, things would get complicated.
|
||||||
ob->fde_end = (char*)LOI->unseenObjects;
|
ob->fde_end = (char*)LOI->unseenObjects;
|
||||||
|
@ -273,7 +273,7 @@ APInt& APInt::operator-=(const APInt& RHS) {
|
|||||||
return clearUnusedBits();
|
return clearUnusedBits();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Multiplies an integer array, x by a a uint64_t integer and places the result
|
/// Multiplies an integer array, x, by a uint64_t integer and places the result
|
||||||
/// into dest.
|
/// into dest.
|
||||||
/// @returns the carry out of the multiplication.
|
/// @returns the carry out of the multiplication.
|
||||||
/// @brief Multiply a multi-digit APInt by a single digit (64-bit) integer.
|
/// @brief Multiply a multi-digit APInt by a single digit (64-bit) integer.
|
||||||
@ -1766,7 +1766,7 @@ void APInt::divide(const APInt LHS, unsigned lhsWords,
|
|||||||
|
|
||||||
// First, compose the values into an array of 32-bit words instead of
|
// First, compose the values into an array of 32-bit words instead of
|
||||||
// 64-bit words. This is a necessity of both the "short division" algorithm
|
// 64-bit words. This is a necessity of both the "short division" algorithm
|
||||||
// and the the Knuth "classical algorithm" which requires there to be native
|
// and the Knuth "classical algorithm" which requires there to be native
|
||||||
// operations for +, -, and * on an m bit value with an m*2 bit result. We
|
// operations for +, -, and * on an m bit value with an m*2 bit result. We
|
||||||
// can't use 64-bit operands here because we don't have native results of
|
// can't use 64-bit operands here because we don't have native results of
|
||||||
// 128-bits. Furthermore, casting the 64-bit values to 32-bit values won't
|
// 128-bits. Furthermore, casting the 64-bit values to 32-bit values won't
|
||||||
|
@ -1841,7 +1841,7 @@ static SpecialGlobalClass getGlobalVariableClass(const GlobalVariable *GV) {
|
|||||||
return GlobalDtors;
|
return GlobalDtors;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, it it is other metadata, don't print it. This catches things
|
// Otherwise, if it is other metadata, don't print it. This catches things
|
||||||
// like debug information.
|
// like debug information.
|
||||||
if (GV->getSection() == "llvm.metadata")
|
if (GV->getSection() == "llvm.metadata")
|
||||||
return NotPrinted;
|
return NotPrinted;
|
||||||
@ -3113,7 +3113,7 @@ void CWriter::visitCallInst(CallInst &I) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// visitBuiltinCall - Handle the call to the specified builtin. Returns true
|
/// visitBuiltinCall - Handle the call to the specified builtin. Returns true
|
||||||
/// if the entire call is handled, return false it it wasn't handled, and
|
/// if the entire call is handled, return false if it wasn't handled, and
|
||||||
/// optionally set 'WroteCallee' if the callee has already been printed out.
|
/// optionally set 'WroteCallee' if the callee has already been printed out.
|
||||||
bool CWriter::visitBuiltinCall(CallInst &I, Intrinsic::ID ID,
|
bool CWriter::visitBuiltinCall(CallInst &I, Intrinsic::ID ID,
|
||||||
bool &WroteCallee) {
|
bool &WroteCallee) {
|
||||||
|
@ -68,7 +68,7 @@ void PIC16DbgInfo::PopulateDerivedTypeInfo (DIType Ty, unsigned short &TypeNo,
|
|||||||
TypeNo = TypeNo << PIC16Dbg::S_DERIVED;
|
TypeNo = TypeNo << PIC16Dbg::S_DERIVED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We also need to encode the the information about the base type of
|
// We also need to encode the information about the base type of
|
||||||
// pointer in TypeNo.
|
// pointer in TypeNo.
|
||||||
DIType BaseType = DIDerivedType(Ty.getNode()).getTypeDerivedFrom();
|
DIType BaseType = DIDerivedType(Ty.getNode()).getTypeDerivedFrom();
|
||||||
PopulateDebugInfo(BaseType, TypeNo, HasAux, Aux, TagName);
|
PopulateDebugInfo(BaseType, TypeNo, HasAux, Aux, TagName);
|
||||||
|
@ -118,7 +118,7 @@ isLoadOfStoredAddress(unsigned LoadSize, SDValue Ptr1, SDValue Ptr2) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// getHazardType - We return hazard for any non-branch instruction that would
|
/// getHazardType - We return hazard for any non-branch instruction that would
|
||||||
/// terminate terminate the dispatch group. We turn NoopHazard for any
|
/// terminate the dispatch group. We turn NoopHazard for any
|
||||||
/// instructions that wouldn't terminate the dispatch group that would cause a
|
/// instructions that wouldn't terminate the dispatch group that would cause a
|
||||||
/// pipeline flush.
|
/// pipeline flush.
|
||||||
ScheduleHazardRecognizer::HazardType PPCHazardRecognizer970::
|
ScheduleHazardRecognizer::HazardType PPCHazardRecognizer970::
|
||||||
|
@ -199,7 +199,7 @@ void PPCDAGToDAGISel::InsertVRSaveCode(MachineFunction &Fn) {
|
|||||||
// Check to see if this function uses vector registers, which means we have to
|
// Check to see if this function uses vector registers, which means we have to
|
||||||
// save and restore the VRSAVE register and update it with the regs we use.
|
// save and restore the VRSAVE register and update it with the regs we use.
|
||||||
//
|
//
|
||||||
// In this case, there will be virtual registers of vector type type created
|
// In this case, there will be virtual registers of vector type created
|
||||||
// by the scheduler. Detect them now.
|
// by the scheduler. Detect them now.
|
||||||
bool HasVectorVReg = false;
|
bool HasVectorVReg = false;
|
||||||
for (unsigned i = TargetRegisterInfo::FirstVirtualRegister,
|
for (unsigned i = TargetRegisterInfo::FirstVirtualRegister,
|
||||||
|
@ -67,7 +67,7 @@ static void Split(std::vector<std::string> &V, const std::string &S) {
|
|||||||
while (true) {
|
while (true) {
|
||||||
// Find the next comma
|
// Find the next comma
|
||||||
size_t Comma = S.find(',', Pos);
|
size_t Comma = S.find(',', Pos);
|
||||||
// If no comma found then the the rest of the string is used
|
// If no comma found then the rest of the string is used
|
||||||
if (Comma == std::string::npos) {
|
if (Comma == std::string::npos) {
|
||||||
// Add string to vector
|
// Add string to vector
|
||||||
V.push_back(S.substr(Pos));
|
V.push_back(S.substr(Pos));
|
||||||
|
@ -376,7 +376,7 @@ ret
|
|||||||
... saving two instructions.
|
... saving two instructions.
|
||||||
|
|
||||||
The basic idea is that a reload from a spill slot, can, if only one 4-byte
|
The basic idea is that a reload from a spill slot, can, if only one 4-byte
|
||||||
chunk is used, bring in 3 zeros the the one element instead of 4 elements.
|
chunk is used, bring in 3 zeros the one element instead of 4 elements.
|
||||||
This can be used to simplify a variety of shuffle operations, where the
|
This can be used to simplify a variety of shuffle operations, where the
|
||||||
elements are fixed zeros.
|
elements are fixed zeros.
|
||||||
|
|
||||||
|
@ -2172,7 +2172,7 @@ X86TargetLowering::LowerCall(SDValue Chain, SDValue Callee,
|
|||||||
if (IsCalleePop(isVarArg, CallConv))
|
if (IsCalleePop(isVarArg, CallConv))
|
||||||
NumBytesForCalleeToPush = NumBytes; // Callee pops everything
|
NumBytesForCalleeToPush = NumBytes; // Callee pops everything
|
||||||
else if (!Is64Bit && CallConv != CallingConv::Fast && IsStructRet)
|
else if (!Is64Bit && CallConv != CallingConv::Fast && IsStructRet)
|
||||||
// If this is is a call to a struct-return function, the callee
|
// If this is a call to a struct-return function, the callee
|
||||||
// pops the hidden struct pointer, so we have to push it back.
|
// pops the hidden struct pointer, so we have to push it back.
|
||||||
// This is common for Darwin/X86, Linux & Mingw32 targets.
|
// This is common for Darwin/X86, Linux & Mingw32 targets.
|
||||||
NumBytesForCalleeToPush = 4;
|
NumBytesForCalleeToPush = 4;
|
||||||
|
@ -3704,7 +3704,7 @@ def MOVZX32rm16: I<0xB7, MRMSrcMem, (outs GR32:$dst), (ins i16mem:$src),
|
|||||||
"movz{wl|x}\t{$src, $dst|$dst, $src}",
|
"movz{wl|x}\t{$src, $dst|$dst, $src}",
|
||||||
[(set GR32:$dst, (zextloadi32i16 addr:$src))]>, TB;
|
[(set GR32:$dst, (zextloadi32i16 addr:$src))]>, TB;
|
||||||
|
|
||||||
// These are the same as the regular regular MOVZX32rr8 and MOVZX32rm8
|
// These are the same as the regular MOVZX32rr8 and MOVZX32rm8
|
||||||
// except that they use GR32_NOREX for the output operand register class
|
// except that they use GR32_NOREX for the output operand register class
|
||||||
// instead of GR32. This allows them to operate on h registers on x86-64.
|
// instead of GR32. This allows them to operate on h registers on x86-64.
|
||||||
def MOVZX32_NOREXrr8 : I<0xB6, MRMSrcReg,
|
def MOVZX32_NOREXrr8 : I<0xB6, MRMSrcReg,
|
||||||
|
@ -686,7 +686,7 @@ def LDAP_lu10_ba : _FLU10<(outs),
|
|||||||
[(set R11, (pcrelwrapper tblockaddress:$addr))]>;
|
[(set R11, (pcrelwrapper tblockaddress:$addr))]>;
|
||||||
|
|
||||||
let isCall=1,
|
let isCall=1,
|
||||||
// All calls clobber the the link register and the non-callee-saved registers:
|
// All calls clobber the link register and the non-callee-saved registers:
|
||||||
Defs = [R0, R1, R2, R3, R11, LR] in {
|
Defs = [R0, R1, R2, R3, R11, LR] in {
|
||||||
def BL_u10 : _FU10<
|
def BL_u10 : _FU10<
|
||||||
(outs),
|
(outs),
|
||||||
@ -779,7 +779,7 @@ def ECALLF_1r : _F1R<(outs), (ins GRRegs:$src),
|
|||||||
[]>;
|
[]>;
|
||||||
|
|
||||||
let isCall=1,
|
let isCall=1,
|
||||||
// All calls clobber the the link register and the non-callee-saved registers:
|
// All calls clobber the link register and the non-callee-saved registers:
|
||||||
Defs = [R0, R1, R2, R3, R11, LR] in {
|
Defs = [R0, R1, R2, R3, R11, LR] in {
|
||||||
def BLA_1r : _F1R<(outs), (ins GRRegs:$addr, variable_ops),
|
def BLA_1r : _F1R<(outs), (ins GRRegs:$addr, variable_ops),
|
||||||
"bla $addr",
|
"bla $addr",
|
||||||
|
@ -247,7 +247,7 @@ static bool PrefixIn(const ArgPromotion::IndicesVector &Indices,
|
|||||||
return Low != Set.end() && IsPrefix(*Low, Indices);
|
return Low != Set.end() && IsPrefix(*Low, Indices);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Mark the given indices (ToMark) as safe in the the given set of indices
|
/// Mark the given indices (ToMark) as safe in the given set of indices
|
||||||
/// (Safe). Marking safe usually means adding ToMark to Safe. However, if there
|
/// (Safe). Marking safe usually means adding ToMark to Safe. However, if there
|
||||||
/// is already a prefix of Indices in Safe, Indices are implicitely marked safe
|
/// is already a prefix of Indices in Safe, Indices are implicitely marked safe
|
||||||
/// already. Furthermore, any indices that Indices is itself a prefix of, are
|
/// already. Furthermore, any indices that Indices is itself a prefix of, are
|
||||||
|
@ -117,7 +117,7 @@ Function* PartialInliner::unswitchFunction(Function* F) {
|
|||||||
DominatorTree DT;
|
DominatorTree DT;
|
||||||
DT.runOnFunction(*duplicateFunction);
|
DT.runOnFunction(*duplicateFunction);
|
||||||
|
|
||||||
// Extract the body of the the if.
|
// Extract the body of the if.
|
||||||
Function* extractedFunction = ExtractCodeRegion(DT, toExtract);
|
Function* extractedFunction = ExtractCodeRegion(DT, toExtract);
|
||||||
|
|
||||||
// Inline the top-level if test into all callers.
|
// Inline the top-level if test into all callers.
|
||||||
|
@ -546,7 +546,7 @@ Instruction *InstCombiner::FoldAndOfICmps(Instruction &I,
|
|||||||
std::swap(LHSCC, RHSCC);
|
std::swap(LHSCC, RHSCC);
|
||||||
}
|
}
|
||||||
|
|
||||||
// At this point, we know we have have two icmp instructions
|
// At this point, we know we have two icmp instructions
|
||||||
// comparing a value against two constants and and'ing the result
|
// comparing a value against two constants and and'ing the result
|
||||||
// together. Because of the above check, we know that we only have
|
// together. Because of the above check, we know that we only have
|
||||||
// icmp eq, icmp ne, icmp [su]lt, and icmp [SU]gt here. We also know
|
// icmp eq, icmp ne, icmp [su]lt, and icmp [SU]gt here. We also know
|
||||||
@ -1226,7 +1226,7 @@ Instruction *InstCombiner::FoldOrOfICmps(Instruction &I,
|
|||||||
std::swap(LHSCC, RHSCC);
|
std::swap(LHSCC, RHSCC);
|
||||||
}
|
}
|
||||||
|
|
||||||
// At this point, we know we have have two icmp instructions
|
// At this point, we know we have two icmp instructions
|
||||||
// comparing a value against two constants and or'ing the result
|
// comparing a value against two constants and or'ing the result
|
||||||
// together. Because of the above check, we know that we only have
|
// together. Because of the above check, we know that we only have
|
||||||
// ICMP_EQ, ICMP_NE, ICMP_LT, and ICMP_GT here. We also know (from the
|
// ICMP_EQ, ICMP_NE, ICMP_LT, and ICMP_GT here. We also know (from the
|
||||||
|
@ -380,7 +380,7 @@ bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) {
|
|||||||
NeedCannIV = true;
|
NeedCannIV = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now that we know the largest of of the induction variable expressions
|
// Now that we know the largest of the induction variable expressions
|
||||||
// in this loop, insert a canonical induction variable of the largest size.
|
// in this loop, insert a canonical induction variable of the largest size.
|
||||||
Value *IndVar = 0;
|
Value *IndVar = 0;
|
||||||
if (NeedCannIV) {
|
if (NeedCannIV) {
|
||||||
|
@ -249,7 +249,7 @@ void Reassociate::LinearizeExpr(BinaryOperator *I) {
|
|||||||
|
|
||||||
/// LinearizeExprTree - Given an associative binary expression tree, traverse
|
/// LinearizeExprTree - Given an associative binary expression tree, traverse
|
||||||
/// all of the uses putting it into canonical form. This forces a left-linear
|
/// all of the uses putting it into canonical form. This forces a left-linear
|
||||||
/// form of the the expression (((a+b)+c)+d), and collects information about the
|
/// form of the expression (((a+b)+c)+d), and collects information about the
|
||||||
/// rank of the non-tree operands.
|
/// rank of the non-tree operands.
|
||||||
///
|
///
|
||||||
/// NOTE: These intentionally destroys the expression tree operands (turning
|
/// NOTE: These intentionally destroys the expression tree operands (turning
|
||||||
@ -299,7 +299,7 @@ void Reassociate::LinearizeExprTree(BinaryOperator *I,
|
|||||||
Success = false;
|
Success = false;
|
||||||
MadeChange = true;
|
MadeChange = true;
|
||||||
} else if (RHSBO) {
|
} else if (RHSBO) {
|
||||||
// Turn (A+B)+(C+D) -> (((A+B)+C)+D). This guarantees the the RHS is not
|
// Turn (A+B)+(C+D) -> (((A+B)+C)+D). This guarantees the RHS is not
|
||||||
// part of the expression tree.
|
// part of the expression tree.
|
||||||
LinearizeExpr(I);
|
LinearizeExpr(I);
|
||||||
LHS = LHSBO = cast<BinaryOperator>(I->getOperand(0));
|
LHS = LHSBO = cast<BinaryOperator>(I->getOperand(0));
|
||||||
|
@ -68,7 +68,7 @@ InlineHalfPowrs(const std::vector<Instruction *> &HalfPowrs,
|
|||||||
Function *Callee = Call->getCalledFunction();
|
Function *Callee = Call->getCalledFunction();
|
||||||
|
|
||||||
// Minimally sanity-check the CFG of half_powr to ensure that it contains
|
// Minimally sanity-check the CFG of half_powr to ensure that it contains
|
||||||
// the the kind of code we expect. If we're running this pass, we have
|
// the kind of code we expect. If we're running this pass, we have
|
||||||
// reason to believe it will be what we expect.
|
// reason to believe it will be what we expect.
|
||||||
Function::iterator I = Callee->begin();
|
Function::iterator I = Callee->begin();
|
||||||
BasicBlock *Prologue = I++;
|
BasicBlock *Prologue = I++;
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
/// CreateGlobalString - Make a new global variable with an initializer that
|
/// CreateGlobalString - Make a new global variable with an initializer that
|
||||||
/// has array of i8 type filled in the the nul terminated string value
|
/// has array of i8 type filled in the nul terminated string value
|
||||||
/// specified. If Name is specified, it is the name of the global variable
|
/// specified. If Name is specified, it is the name of the global variable
|
||||||
/// created.
|
/// created.
|
||||||
Value *IRBuilderBase::CreateGlobalString(const char *Str, const Twine &Name) {
|
Value *IRBuilderBase::CreateGlobalString(const char *Str, const Twine &Name) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user