mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-19 18:24:00 +00:00
Add lengthof and endof templates that hide a lot of sizeof computations.
Patch by Sterling Stein! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41758 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <utility> // for std::pair
|
#include <utility> // for std::pair
|
||||||
|
#include <cstring> // for std::size_t
|
||||||
#include "llvm/ADT/iterator"
|
#include "llvm/ADT/iterator"
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
@ -199,6 +200,24 @@ inline tier<T1, T2> tie(T1& f, T2& s) {
|
|||||||
return tier<T1, T2>(f, s);
|
return tier<T1, T2>(f, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// Extra additions to arrays
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
/// Find where an array ends (for ending iterators)
|
||||||
|
/// This returns a pointer to the byte immediately
|
||||||
|
/// after the end of an array.
|
||||||
|
template<class T, std::size_t N>
|
||||||
|
inline T *array_endof(T (&x)[N]) {
|
||||||
|
return x+N;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Find the length of an array.
|
||||||
|
template<class T, std::size_t N>
|
||||||
|
inline size_t array_lengthof(T (&x)[N]) {
|
||||||
|
return N;
|
||||||
|
}
|
||||||
|
|
||||||
} // End llvm namespace
|
} // End llvm namespace
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include "llvm/CodeGen/SelectionDAGNodes.h"
|
#include "llvm/CodeGen/SelectionDAGNodes.h"
|
||||||
#include "llvm/CodeGen/RuntimeLibcalls.h"
|
#include "llvm/CodeGen/RuntimeLibcalls.h"
|
||||||
#include "llvm/ADT/APFloat.h"
|
#include "llvm/ADT/APFloat.h"
|
||||||
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -154,8 +155,7 @@ public:
|
|||||||
}
|
}
|
||||||
void setTypeAction(MVT::ValueType VT, LegalizeAction Action) {
|
void setTypeAction(MVT::ValueType VT, LegalizeAction Action) {
|
||||||
assert(!MVT::isExtendedVT(VT));
|
assert(!MVT::isExtendedVT(VT));
|
||||||
assert(unsigned(VT >> 4) <
|
assert(unsigned(VT >> 4) < array_lengthof(ValueTypeActions));
|
||||||
sizeof(ValueTypeActions)/sizeof(ValueTypeActions[0]));
|
|
||||||
ValueTypeActions[VT>>4] |= Action << ((VT*2) & 31);
|
ValueTypeActions[VT>>4] |= Action << ((VT*2) & 31);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -711,7 +711,7 @@ protected:
|
|||||||
/// with the specified type and indicate what to do about it.
|
/// with the specified type and indicate what to do about it.
|
||||||
void setOperationAction(unsigned Op, MVT::ValueType VT,
|
void setOperationAction(unsigned Op, MVT::ValueType VT,
|
||||||
LegalizeAction Action) {
|
LegalizeAction Action) {
|
||||||
assert(VT < 32 && Op < sizeof(OpActions)/sizeof(OpActions[0]) &&
|
assert(VT < 32 && Op < array_lengthof(OpActions) &&
|
||||||
"Table isn't big enough!");
|
"Table isn't big enough!");
|
||||||
OpActions[Op] &= ~(uint64_t(3UL) << VT*2);
|
OpActions[Op] &= ~(uint64_t(3UL) << VT*2);
|
||||||
OpActions[Op] |= (uint64_t)Action << VT*2;
|
OpActions[Op] |= (uint64_t)Action << VT*2;
|
||||||
@ -721,7 +721,7 @@ protected:
|
|||||||
/// work with the with specified type and indicate what to do about it.
|
/// work with the with specified type and indicate what to do about it.
|
||||||
void setLoadXAction(unsigned ExtType, MVT::ValueType VT,
|
void setLoadXAction(unsigned ExtType, MVT::ValueType VT,
|
||||||
LegalizeAction Action) {
|
LegalizeAction Action) {
|
||||||
assert(VT < 32 && ExtType < sizeof(LoadXActions)/sizeof(LoadXActions[0]) &&
|
assert(VT < 32 && ExtType < array_lengthof(LoadXActions) &&
|
||||||
"Table isn't big enough!");
|
"Table isn't big enough!");
|
||||||
LoadXActions[ExtType] &= ~(uint64_t(3UL) << VT*2);
|
LoadXActions[ExtType] &= ~(uint64_t(3UL) << VT*2);
|
||||||
LoadXActions[ExtType] |= (uint64_t)Action << VT*2;
|
LoadXActions[ExtType] |= (uint64_t)Action << VT*2;
|
||||||
@ -742,7 +742,7 @@ protected:
|
|||||||
void setIndexedLoadAction(unsigned IdxMode, MVT::ValueType VT,
|
void setIndexedLoadAction(unsigned IdxMode, MVT::ValueType VT,
|
||||||
LegalizeAction Action) {
|
LegalizeAction Action) {
|
||||||
assert(VT < 32 && IdxMode <
|
assert(VT < 32 && IdxMode <
|
||||||
sizeof(IndexedModeActions[0]) / sizeof(IndexedModeActions[0][0]) &&
|
array_lengthof(IndexedModeActions[0]) &&
|
||||||
"Table isn't big enough!");
|
"Table isn't big enough!");
|
||||||
IndexedModeActions[0][IdxMode] &= ~(uint64_t(3UL) << VT*2);
|
IndexedModeActions[0][IdxMode] &= ~(uint64_t(3UL) << VT*2);
|
||||||
IndexedModeActions[0][IdxMode] |= (uint64_t)Action << VT*2;
|
IndexedModeActions[0][IdxMode] |= (uint64_t)Action << VT*2;
|
||||||
@ -755,7 +755,7 @@ protected:
|
|||||||
void setIndexedStoreAction(unsigned IdxMode, MVT::ValueType VT,
|
void setIndexedStoreAction(unsigned IdxMode, MVT::ValueType VT,
|
||||||
LegalizeAction Action) {
|
LegalizeAction Action) {
|
||||||
assert(VT < 32 && IdxMode <
|
assert(VT < 32 && IdxMode <
|
||||||
sizeof(IndexedModeActions[1]) / sizeof(IndexedModeActions[1][0]) &&
|
array_lengthof(IndexedModeActions[1]) &&
|
||||||
"Table isn't big enough!");
|
"Table isn't big enough!");
|
||||||
IndexedModeActions[1][IdxMode] &= ~(uint64_t(3UL) << VT*2);
|
IndexedModeActions[1][IdxMode] &= ~(uint64_t(3UL) << VT*2);
|
||||||
IndexedModeActions[1][IdxMode] |= (uint64_t)Action << VT*2;
|
IndexedModeActions[1][IdxMode] |= (uint64_t)Action << VT*2;
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "llvm/ADT/SmallVector.h"
|
#include "llvm/ADT/SmallVector.h"
|
||||||
#include "llvm/ADT/StringMap.h"
|
#include "llvm/ADT/StringMap.h"
|
||||||
#include "llvm/ADT/BitVector.h"
|
#include "llvm/ADT/BitVector.h"
|
||||||
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include "llvm/Support/Compiler.h"
|
#include "llvm/Support/Compiler.h"
|
||||||
#include "llvm/Support/GetElementPtrTypeIterator.h"
|
#include "llvm/Support/GetElementPtrTypeIterator.h"
|
||||||
#include "llvm/Support/ManagedStatic.h"
|
#include "llvm/Support/ManagedStatic.h"
|
||||||
@ -890,13 +891,11 @@ BasicAliasAnalysis::getModRefBehavior(Function *F, CallSite CS,
|
|||||||
if (!Initialized) {
|
if (!Initialized) {
|
||||||
NoMemoryTable->insert(NoMemoryTable->end(),
|
NoMemoryTable->insert(NoMemoryTable->end(),
|
||||||
DoesntAccessMemoryFns,
|
DoesntAccessMemoryFns,
|
||||||
DoesntAccessMemoryFns+
|
array_endof(DoesntAccessMemoryFns));
|
||||||
sizeof(DoesntAccessMemoryFns)/sizeof(DoesntAccessMemoryFns[0]));
|
|
||||||
|
|
||||||
OnlyReadsMemoryTable->insert(OnlyReadsMemoryTable->end(),
|
OnlyReadsMemoryTable->insert(OnlyReadsMemoryTable->end(),
|
||||||
OnlyReadsMemoryFns,
|
OnlyReadsMemoryFns,
|
||||||
OnlyReadsMemoryFns+
|
array_endof(OnlyReadsMemoryFns));
|
||||||
sizeof(OnlyReadsMemoryFns)/sizeof(OnlyReadsMemoryFns[0]));
|
|
||||||
|
|
||||||
// Sort the table the first time through.
|
// Sort the table the first time through.
|
||||||
std::sort(NoMemoryTable->begin(), NoMemoryTable->end(), StringCompare());
|
std::sort(NoMemoryTable->begin(), NoMemoryTable->end(), StringCompare());
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "llvm/Support/Streams.h"
|
#include "llvm/Support/Streams.h"
|
||||||
#include "llvm/Target/TargetData.h"
|
#include "llvm/Target/TargetData.h"
|
||||||
#include "llvm/ADT/SmallVector.h"
|
#include "llvm/ADT/SmallVector.h"
|
||||||
|
#include "llvm/ADT/STLExtras.h"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
template <class ArgIt>
|
template <class ArgIt>
|
||||||
@ -421,7 +422,7 @@ static Instruction *LowerPartSelect(CallInst *CI) {
|
|||||||
CI->getOperand(2),
|
CI->getOperand(2),
|
||||||
CI->getOperand(3)
|
CI->getOperand(3)
|
||||||
};
|
};
|
||||||
return new CallInst(F, Args, Args+sizeof(Args)/sizeof(Args[0]), CI->getName(), CI);
|
return new CallInst(F, Args, array_endof(Args), CI->getName(), CI);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert the llvm.part.set.iX.iY.iZ intrinsic. This intrinsic takes
|
/// Convert the llvm.part.set.iX.iY.iZ intrinsic. This intrinsic takes
|
||||||
@ -587,7 +588,7 @@ static Instruction *LowerPartSet(CallInst *CI) {
|
|||||||
CI->getOperand(3),
|
CI->getOperand(3),
|
||||||
CI->getOperand(4)
|
CI->getOperand(4)
|
||||||
};
|
};
|
||||||
return new CallInst(F, Args, Args+sizeof(Args)/sizeof(Args[0]), CI->getName(), CI);
|
return new CallInst(F, Args, array_endof(Args), CI->getName(), CI);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include "llvm/DerivedTypes.h"
|
#include "llvm/DerivedTypes.h"
|
||||||
#include "llvm/CodeGen/SelectionDAG.h"
|
#include "llvm/CodeGen/SelectionDAG.h"
|
||||||
#include "llvm/ADT/StringExtras.h"
|
#include "llvm/ADT/StringExtras.h"
|
||||||
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include "llvm/Support/MathExtras.h"
|
#include "llvm/Support/MathExtras.h"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
@ -145,8 +146,7 @@ TargetLowering::TargetLowering(TargetMachine &tm)
|
|||||||
ShiftAmountTy = SetCCResultTy = PointerTy = getValueType(TD->getIntPtrType());
|
ShiftAmountTy = SetCCResultTy = PointerTy = getValueType(TD->getIntPtrType());
|
||||||
ShiftAmtHandling = Undefined;
|
ShiftAmtHandling = Undefined;
|
||||||
memset(RegClassForVT, 0,MVT::LAST_VALUETYPE*sizeof(TargetRegisterClass*));
|
memset(RegClassForVT, 0,MVT::LAST_VALUETYPE*sizeof(TargetRegisterClass*));
|
||||||
memset(TargetDAGCombineArray, 0,
|
memset(TargetDAGCombineArray, 0, array_lengthof(TargetDAGCombineArray));
|
||||||
sizeof(TargetDAGCombineArray)/sizeof(TargetDAGCombineArray[0]));
|
|
||||||
maxStoresPerMemset = maxStoresPerMemcpy = maxStoresPerMemmove = 8;
|
maxStoresPerMemset = maxStoresPerMemcpy = maxStoresPerMemmove = 8;
|
||||||
allowUnalignedMemoryAccesses = false;
|
allowUnalignedMemoryAccesses = false;
|
||||||
UseUnderscoreSetJmp = false;
|
UseUnderscoreSetJmp = false;
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "Unix.h"
|
#include "Unix.h"
|
||||||
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#if HAVE_EXECINFO_H
|
#if HAVE_EXECINFO_H
|
||||||
@ -40,7 +41,7 @@ std::vector<sys::Path> *DirectoriesToRemove = 0;
|
|||||||
const int IntSigs[] = {
|
const int IntSigs[] = {
|
||||||
SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGTERM, SIGUSR1, SIGUSR2
|
SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGTERM, SIGUSR1, SIGUSR2
|
||||||
};
|
};
|
||||||
const int *IntSigsEnd = IntSigs + sizeof(IntSigs)/sizeof(IntSigs[0]);
|
const int *IntSigsEnd = array_endof(IntSigs);
|
||||||
|
|
||||||
// KillSigs - Signals that are synchronous with the program that will cause it
|
// KillSigs - Signals that are synchronous with the program that will cause it
|
||||||
// to die.
|
// to die.
|
||||||
@ -50,7 +51,7 @@ const int KillSigs[] = {
|
|||||||
, SIGEMT
|
, SIGEMT
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
const int *KillSigsEnd = KillSigs + sizeof(KillSigs)/sizeof(KillSigs[0]);
|
const int *KillSigsEnd = array_endof(KillSigs);
|
||||||
|
|
||||||
#ifdef HAVE_BACKTRACE
|
#ifdef HAVE_BACKTRACE
|
||||||
void* StackTrace[256];
|
void* StackTrace[256];
|
||||||
@ -68,7 +69,7 @@ void* StackTrace[256];
|
|||||||
void PrintStackTrace() {
|
void PrintStackTrace() {
|
||||||
#ifdef HAVE_BACKTRACE
|
#ifdef HAVE_BACKTRACE
|
||||||
// Use backtrace() to output a backtrace on Linux systems with glibc.
|
// Use backtrace() to output a backtrace on Linux systems with glibc.
|
||||||
int depth = backtrace(StackTrace, sizeof(StackTrace)/sizeof(StackTrace[0]));
|
int depth = backtrace(StackTrace, array_lengthof(StackTrace));
|
||||||
|
|
||||||
// Create a one-way unix pipe. The backtracing process writes to PipeFDs[1],
|
// Create a one-way unix pipe. The backtracing process writes to PipeFDs[1],
|
||||||
// the c++filt process reads from PipeFDs[0].
|
// the c++filt process reads from PipeFDs[0].
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "ARMAddressingModes.h"
|
#include "ARMAddressingModes.h"
|
||||||
#include "ARMGenInstrInfo.inc"
|
#include "ARMGenInstrInfo.inc"
|
||||||
#include "ARMMachineFunctionInfo.h"
|
#include "ARMMachineFunctionInfo.h"
|
||||||
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include "llvm/CodeGen/LiveVariables.h"
|
#include "llvm/CodeGen/LiveVariables.h"
|
||||||
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
||||||
#include "llvm/CodeGen/MachineJumpTableInfo.h"
|
#include "llvm/CodeGen/MachineJumpTableInfo.h"
|
||||||
@ -28,7 +29,7 @@ static cl::opt<bool> EnableARM3Addr("enable-arm-3-addr-conv", cl::Hidden,
|
|||||||
cl::desc("Enable ARM 2-addr to 3-addr conv"));
|
cl::desc("Enable ARM 2-addr to 3-addr conv"));
|
||||||
|
|
||||||
ARMInstrInfo::ARMInstrInfo(const ARMSubtarget &STI)
|
ARMInstrInfo::ARMInstrInfo(const ARMSubtarget &STI)
|
||||||
: TargetInstrInfo(ARMInsts, sizeof(ARMInsts)/sizeof(ARMInsts[0])),
|
: TargetInstrInfo(ARMInsts, array_lengthof(ARMInsts)),
|
||||||
RI(*this, STI) {
|
RI(*this, STI) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,11 +14,12 @@
|
|||||||
#include "Alpha.h"
|
#include "Alpha.h"
|
||||||
#include "AlphaInstrInfo.h"
|
#include "AlphaInstrInfo.h"
|
||||||
#include "AlphaGenInstrInfo.inc"
|
#include "AlphaGenInstrInfo.inc"
|
||||||
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
AlphaInstrInfo::AlphaInstrInfo()
|
AlphaInstrInfo::AlphaInstrInfo()
|
||||||
: TargetInstrInfo(AlphaInsts, sizeof(AlphaInsts)/sizeof(AlphaInsts[0])),
|
: TargetInstrInfo(AlphaInsts, array_lengthof(AlphaInsts)),
|
||||||
RI(*this) { }
|
RI(*this) { }
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include "Mips.h"
|
#include "Mips.h"
|
||||||
#include "MipsInstrInfo.h"
|
#include "MipsInstrInfo.h"
|
||||||
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
||||||
#include "MipsGenInstrInfo.inc"
|
#include "MipsGenInstrInfo.inc"
|
||||||
|
|
||||||
@ -20,7 +21,7 @@ using namespace llvm;
|
|||||||
|
|
||||||
// TODO: Add the subtarget support on this constructor
|
// TODO: Add the subtarget support on this constructor
|
||||||
MipsInstrInfo::MipsInstrInfo(MipsTargetMachine &tm)
|
MipsInstrInfo::MipsInstrInfo(MipsTargetMachine &tm)
|
||||||
: TargetInstrInfo(MipsInsts, sizeof(MipsInsts)/sizeof(MipsInsts[0])),
|
: TargetInstrInfo(MipsInsts, array_lengthof(MipsInsts)),
|
||||||
TM(tm), RI(*this) {}
|
TM(tm), RI(*this) {}
|
||||||
|
|
||||||
static bool isZeroImm(const MachineOperand &op) {
|
static bool isZeroImm(const MachineOperand &op) {
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "PPCPredicates.h"
|
#include "PPCPredicates.h"
|
||||||
#include "PPCTargetMachine.h"
|
#include "PPCTargetMachine.h"
|
||||||
#include "PPCPerfectShuffle.h"
|
#include "PPCPerfectShuffle.h"
|
||||||
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include "llvm/ADT/VectorExtras.h"
|
#include "llvm/ADT/VectorExtras.h"
|
||||||
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
|
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
|
||||||
#include "llvm/CodeGen/CallingConvLower.h"
|
#include "llvm/CodeGen/CallingConvLower.h"
|
||||||
@ -1264,9 +1265,9 @@ static SDOperand LowerFORMAL_ARGUMENTS(SDOperand Op, SelectionDAG &DAG,
|
|||||||
PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13
|
PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsigned Num_GPR_Regs = sizeof(GPR_32)/sizeof(GPR_32[0]);
|
const unsigned Num_GPR_Regs = array_lengthof(GPR_32);
|
||||||
const unsigned Num_FPR_Regs = isMachoABI ? 13 : 8;
|
const unsigned Num_FPR_Regs = isMachoABI ? 13 : 8;
|
||||||
const unsigned Num_VR_Regs = sizeof( VR)/sizeof( VR[0]);
|
const unsigned Num_VR_Regs = array_lengthof( VR);
|
||||||
|
|
||||||
unsigned GPR_idx = 0, FPR_idx = 0, VR_idx = 0;
|
unsigned GPR_idx = 0, FPR_idx = 0, VR_idx = 0;
|
||||||
|
|
||||||
@ -1583,9 +1584,9 @@ static SDOperand LowerCALL(SDOperand Op, SelectionDAG &DAG,
|
|||||||
PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8,
|
PPC::V2, PPC::V3, PPC::V4, PPC::V5, PPC::V6, PPC::V7, PPC::V8,
|
||||||
PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13
|
PPC::V9, PPC::V10, PPC::V11, PPC::V12, PPC::V13
|
||||||
};
|
};
|
||||||
const unsigned NumGPRs = sizeof(GPR_32)/sizeof(GPR_32[0]);
|
const unsigned NumGPRs = array_lengthof(GPR_32);
|
||||||
const unsigned NumFPRs = isMachoABI ? 13 : 8;
|
const unsigned NumFPRs = isMachoABI ? 13 : 8;
|
||||||
const unsigned NumVRs = sizeof( VR)/sizeof( VR[0]);
|
const unsigned NumVRs = array_lengthof( VR);
|
||||||
|
|
||||||
const unsigned *GPR = isPPC64 ? GPR_64 : GPR_32;
|
const unsigned *GPR = isPPC64 ? GPR_64 : GPR_32;
|
||||||
|
|
||||||
@ -2399,7 +2400,7 @@ static SDOperand LowerBUILD_VECTOR(SDOperand Op, SelectionDAG &DAG) {
|
|||||||
-8, 8, -9, 9, -10, 10, -11, 11, -12, 12, -13, 13, 14, -14, 15, -15, -16
|
-8, 8, -9, 9, -10, 10, -11, 11, -12, 12, -13, 13, 14, -14, 15, -15, -16
|
||||||
};
|
};
|
||||||
|
|
||||||
for (unsigned idx = 0; idx < sizeof(SplatCsts)/sizeof(SplatCsts[0]); ++idx){
|
for (unsigned idx = 0; idx < array_lengthof(SplatCsts); ++idx) {
|
||||||
// Indirect through the SplatCsts array so that we favor 'vsplti -1' for
|
// Indirect through the SplatCsts array so that we favor 'vsplti -1' for
|
||||||
// cases which are ambiguous (e.g. formation of 0x8000_0000). 'vsplti -1'
|
// cases which are ambiguous (e.g. formation of 0x8000_0000). 'vsplti -1'
|
||||||
int i = SplatCsts[idx];
|
int i = SplatCsts[idx];
|
||||||
|
@ -15,11 +15,12 @@
|
|||||||
#include "PPCPredicates.h"
|
#include "PPCPredicates.h"
|
||||||
#include "PPCGenInstrInfo.inc"
|
#include "PPCGenInstrInfo.inc"
|
||||||
#include "PPCTargetMachine.h"
|
#include "PPCTargetMachine.h"
|
||||||
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
PPCInstrInfo::PPCInstrInfo(PPCTargetMachine &tm)
|
PPCInstrInfo::PPCInstrInfo(PPCTargetMachine &tm)
|
||||||
: TargetInstrInfo(PPCInsts, sizeof(PPCInsts)/sizeof(PPCInsts[0])), TM(tm),
|
: TargetInstrInfo(PPCInsts, array_lengthof(PPCInsts)), TM(tm),
|
||||||
RI(*TM.getSubtargetImpl(), *this) {}
|
RI(*TM.getSubtargetImpl(), *this) {}
|
||||||
|
|
||||||
/// getPointerRegClass - Return the register class to use to hold pointers.
|
/// getPointerRegClass - Return the register class to use to hold pointers.
|
||||||
|
@ -13,12 +13,13 @@
|
|||||||
|
|
||||||
#include "SparcInstrInfo.h"
|
#include "SparcInstrInfo.h"
|
||||||
#include "Sparc.h"
|
#include "Sparc.h"
|
||||||
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
||||||
#include "SparcGenInstrInfo.inc"
|
#include "SparcGenInstrInfo.inc"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
SparcInstrInfo::SparcInstrInfo(SparcSubtarget &ST)
|
SparcInstrInfo::SparcInstrInfo(SparcSubtarget &ST)
|
||||||
: TargetInstrInfo(SparcInsts, sizeof(SparcInsts)/sizeof(SparcInsts[0])),
|
: TargetInstrInfo(SparcInsts, array_lengthof(SparcInsts)),
|
||||||
RI(ST, *this) {
|
RI(ST, *this) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -299,16 +299,13 @@ static int Lookup(const TableEntry *Table, unsigned N, unsigned Opcode) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ARRAY_SIZE(TABLE) \
|
|
||||||
(sizeof(TABLE)/sizeof(TABLE[0]))
|
|
||||||
|
|
||||||
#ifdef NDEBUG
|
#ifdef NDEBUG
|
||||||
#define ASSERT_SORTED(TABLE)
|
#define ASSERT_SORTED(TABLE)
|
||||||
#else
|
#else
|
||||||
#define ASSERT_SORTED(TABLE) \
|
#define ASSERT_SORTED(TABLE) \
|
||||||
{ static bool TABLE##Checked = false; \
|
{ static bool TABLE##Checked = false; \
|
||||||
if (!TABLE##Checked) { \
|
if (!TABLE##Checked) { \
|
||||||
assert(TableIsSorted(TABLE, ARRAY_SIZE(TABLE)) && \
|
assert(TableIsSorted(TABLE, array_lengthof(TABLE)) && \
|
||||||
"All lookup tables must be sorted for efficient access!"); \
|
"All lookup tables must be sorted for efficient access!"); \
|
||||||
TABLE##Checked = true; \
|
TABLE##Checked = true; \
|
||||||
} \
|
} \
|
||||||
@ -487,7 +484,7 @@ static const TableEntry OpcodeTable[] = {
|
|||||||
|
|
||||||
static unsigned getConcreteOpcode(unsigned Opcode) {
|
static unsigned getConcreteOpcode(unsigned Opcode) {
|
||||||
ASSERT_SORTED(OpcodeTable);
|
ASSERT_SORTED(OpcodeTable);
|
||||||
int Opc = Lookup(OpcodeTable, ARRAY_SIZE(OpcodeTable), Opcode);
|
int Opc = Lookup(OpcodeTable, array_lengthof(OpcodeTable), Opcode);
|
||||||
assert(Opc != -1 && "FP Stack instruction not in OpcodeTable!");
|
assert(Opc != -1 && "FP Stack instruction not in OpcodeTable!");
|
||||||
return Opc;
|
return Opc;
|
||||||
}
|
}
|
||||||
@ -535,7 +532,7 @@ void FPS::popStackAfter(MachineBasicBlock::iterator &I) {
|
|||||||
RegMap[Stack[--StackTop]] = ~0; // Update state
|
RegMap[Stack[--StackTop]] = ~0; // Update state
|
||||||
|
|
||||||
// Check to see if there is a popping version of this instruction...
|
// Check to see if there is a popping version of this instruction...
|
||||||
int Opcode = Lookup(PopTable, ARRAY_SIZE(PopTable), I->getOpcode());
|
int Opcode = Lookup(PopTable, array_lengthof(PopTable), I->getOpcode());
|
||||||
if (Opcode != -1) {
|
if (Opcode != -1) {
|
||||||
I->setInstrDescriptor(TII->get(Opcode));
|
I->setInstrDescriptor(TII->get(Opcode));
|
||||||
if (Opcode == X86::UCOM_FPPr)
|
if (Opcode == X86::UCOM_FPPr)
|
||||||
@ -830,7 +827,8 @@ void FPS::handleTwoArgFP(MachineBasicBlock::iterator &I) {
|
|||||||
InstTable = ReverseSTiTable;
|
InstTable = ReverseSTiTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Opcode = Lookup(InstTable, ARRAY_SIZE(ForwardST0Table), MI->getOpcode());
|
int Opcode = Lookup(InstTable, array_lengthof(ForwardST0Table),
|
||||||
|
MI->getOpcode());
|
||||||
assert(Opcode != -1 && "Unknown TwoArgFP pseudo instruction!");
|
assert(Opcode != -1 && "Unknown TwoArgFP pseudo instruction!");
|
||||||
|
|
||||||
// NotTOS - The register which is not on the top of stack...
|
// NotTOS - The register which is not on the top of stack...
|
||||||
|
@ -17,13 +17,14 @@
|
|||||||
#include "X86InstrBuilder.h"
|
#include "X86InstrBuilder.h"
|
||||||
#include "X86Subtarget.h"
|
#include "X86Subtarget.h"
|
||||||
#include "X86TargetMachine.h"
|
#include "X86TargetMachine.h"
|
||||||
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
||||||
#include "llvm/CodeGen/LiveVariables.h"
|
#include "llvm/CodeGen/LiveVariables.h"
|
||||||
#include "llvm/CodeGen/SSARegMap.h"
|
#include "llvm/CodeGen/SSARegMap.h"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
X86InstrInfo::X86InstrInfo(X86TargetMachine &tm)
|
X86InstrInfo::X86InstrInfo(X86TargetMachine &tm)
|
||||||
: TargetInstrInfo(X86Insts, sizeof(X86Insts)/sizeof(X86Insts[0])),
|
: TargetInstrInfo(X86Insts, array_lengthof(X86Insts)),
|
||||||
TM(tm), RI(tm, *this) {
|
TM(tm), RI(tm, *this) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -392,16 +392,13 @@ static const TableEntry *TableLookup(const TableEntry *Table, unsigned N,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ARRAY_SIZE(TABLE) \
|
|
||||||
(sizeof(TABLE)/sizeof(TABLE[0]))
|
|
||||||
|
|
||||||
#ifdef NDEBUG
|
#ifdef NDEBUG
|
||||||
#define ASSERT_SORTED(TABLE)
|
#define ASSERT_SORTED(TABLE)
|
||||||
#else
|
#else
|
||||||
#define ASSERT_SORTED(TABLE) \
|
#define ASSERT_SORTED(TABLE) \
|
||||||
{ static bool TABLE##Checked = false; \
|
{ static bool TABLE##Checked = false; \
|
||||||
if (!TABLE##Checked) { \
|
if (!TABLE##Checked) { \
|
||||||
assert(TableIsSorted(TABLE, ARRAY_SIZE(TABLE)) && \
|
assert(TableIsSorted(TABLE, array_lengthof(TABLE)) && \
|
||||||
"All lookup tables must be sorted for efficient access!"); \
|
"All lookup tables must be sorted for efficient access!"); \
|
||||||
TABLE##Checked = true; \
|
TABLE##Checked = true; \
|
||||||
} \
|
} \
|
||||||
@ -590,7 +587,7 @@ X86RegisterInfo::foldMemoryOperand(MachineInstr *MI, unsigned i,
|
|||||||
};
|
};
|
||||||
ASSERT_SORTED(OpcodeTable);
|
ASSERT_SORTED(OpcodeTable);
|
||||||
OpcodeTablePtr = OpcodeTable;
|
OpcodeTablePtr = OpcodeTable;
|
||||||
OpcodeTableSize = ARRAY_SIZE(OpcodeTable);
|
OpcodeTableSize = array_lengthof(OpcodeTable);
|
||||||
isTwoAddrFold = true;
|
isTwoAddrFold = true;
|
||||||
} else if (i == 0) { // If operand 0
|
} else if (i == 0) { // If operand 0
|
||||||
if (MI->getOpcode() == X86::MOV16r0)
|
if (MI->getOpcode() == X86::MOV16r0)
|
||||||
@ -675,7 +672,7 @@ X86RegisterInfo::foldMemoryOperand(MachineInstr *MI, unsigned i,
|
|||||||
|
|
||||||
ASSERT_SORTED(OpcodeTable);
|
ASSERT_SORTED(OpcodeTable);
|
||||||
OpcodeTablePtr = OpcodeTable;
|
OpcodeTablePtr = OpcodeTable;
|
||||||
OpcodeTableSize = ARRAY_SIZE(OpcodeTable);
|
OpcodeTableSize = array_lengthof(OpcodeTable);
|
||||||
} else if (i == 1) {
|
} else if (i == 1) {
|
||||||
static const TableEntry OpcodeTable[] = {
|
static const TableEntry OpcodeTable[] = {
|
||||||
{ X86::CMP16rr, X86::CMP16rm },
|
{ X86::CMP16rr, X86::CMP16rm },
|
||||||
@ -784,7 +781,7 @@ X86RegisterInfo::foldMemoryOperand(MachineInstr *MI, unsigned i,
|
|||||||
|
|
||||||
ASSERT_SORTED(OpcodeTable);
|
ASSERT_SORTED(OpcodeTable);
|
||||||
OpcodeTablePtr = OpcodeTable;
|
OpcodeTablePtr = OpcodeTable;
|
||||||
OpcodeTableSize = ARRAY_SIZE(OpcodeTable);
|
OpcodeTableSize = array_lengthof(OpcodeTable);
|
||||||
} else if (i == 2) {
|
} else if (i == 2) {
|
||||||
static const TableEntry OpcodeTable[] = {
|
static const TableEntry OpcodeTable[] = {
|
||||||
{ X86::ADC32rr, X86::ADC32rm },
|
{ X86::ADC32rr, X86::ADC32rm },
|
||||||
@ -979,7 +976,7 @@ X86RegisterInfo::foldMemoryOperand(MachineInstr *MI, unsigned i,
|
|||||||
|
|
||||||
ASSERT_SORTED(OpcodeTable);
|
ASSERT_SORTED(OpcodeTable);
|
||||||
OpcodeTablePtr = OpcodeTable;
|
OpcodeTablePtr = OpcodeTable;
|
||||||
OpcodeTableSize = ARRAY_SIZE(OpcodeTable);
|
OpcodeTableSize = array_lengthof(OpcodeTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If table selected...
|
// If table selected...
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "llvm/Support/Mangler.h"
|
#include "llvm/Support/Mangler.h"
|
||||||
#include "llvm/DerivedTypes.h"
|
#include "llvm/DerivedTypes.h"
|
||||||
#include "llvm/Module.h"
|
#include "llvm/Module.h"
|
||||||
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include "llvm/ADT/StringExtras.h"
|
#include "llvm/ADT/StringExtras.h"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
@ -185,9 +186,7 @@ void Mangler::InsertName(GlobalValue *GV,
|
|||||||
Mangler::Mangler(Module &M, const char *prefix)
|
Mangler::Mangler(Module &M, const char *prefix)
|
||||||
: Prefix(prefix), UseQuotes(false), PreserveAsmNames(false),
|
: Prefix(prefix), UseQuotes(false), PreserveAsmNames(false),
|
||||||
Count(0), TypeCounter(0) {
|
Count(0), TypeCounter(0) {
|
||||||
std::fill(AcceptableChars,
|
std::fill(AcceptableChars, array_endof(AcceptableChars), 0);
|
||||||
AcceptableChars+sizeof(AcceptableChars)/sizeof(AcceptableChars[0]),
|
|
||||||
0);
|
|
||||||
|
|
||||||
// Letters and numbers are acceptable.
|
// Letters and numbers are acceptable.
|
||||||
for (unsigned char X = 'a'; X <= 'z'; ++X)
|
for (unsigned char X = 'a'; X <= 'z'; ++X)
|
||||||
|
Reference in New Issue
Block a user