mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
[cleanup] Run clang-format over the Use code. It was *really*
inconsistent both with itself and with LLVM at large with formatting. The *s were on the wrong side, the indent was off, etc etc. This is much cleaner. Also, go clang-format laying out the array of tags in nice columns. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202799 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0a6057117e
commit
2bfe24c418
@ -37,16 +37,14 @@ namespace llvm {
|
||||
class Value;
|
||||
class User;
|
||||
class Use;
|
||||
template<typename>
|
||||
struct simplify_type;
|
||||
template <typename> struct simplify_type;
|
||||
|
||||
// Use** is only 4-byte aligned.
|
||||
template<>
|
||||
class PointerLikeTypeTraits<Use**> {
|
||||
template <> class PointerLikeTypeTraits<Use **> {
|
||||
public:
|
||||
static inline void *getAsVoidPointer(Use** P) { return P; }
|
||||
static inline void *getAsVoidPointer(Use **P) { return P; }
|
||||
static inline Use **getFromVoidPointer(void *P) {
|
||||
return static_cast<Use**>(P);
|
||||
return static_cast<Use **>(P);
|
||||
}
|
||||
enum { NumLowBitsAvailable = 2 };
|
||||
};
|
||||
@ -76,28 +74,24 @@ public:
|
||||
|
||||
// A type for the word following an array of hung-off Uses in memory, which is
|
||||
// a pointer back to their User with the bottom bit set.
|
||||
typedef PointerIntPair<User*, 1, unsigned> UserRef;
|
||||
typedef PointerIntPair<User *, 1, unsigned> UserRef;
|
||||
|
||||
private:
|
||||
Use(const Use &U) LLVM_DELETED_FUNCTION;
|
||||
|
||||
/// Destructor - Only for zap()
|
||||
~Use() {
|
||||
if (Val) removeFromList();
|
||||
if (Val)
|
||||
removeFromList();
|
||||
}
|
||||
|
||||
enum PrevPtrTag { zeroDigitTag
|
||||
, oneDigitTag
|
||||
, stopTag
|
||||
, fullStopTag };
|
||||
enum PrevPtrTag { zeroDigitTag, oneDigitTag, stopTag, fullStopTag };
|
||||
|
||||
/// Constructor
|
||||
Use(PrevPtrTag tag) : Val(0) {
|
||||
Prev.setInt(tag);
|
||||
}
|
||||
Use(PrevPtrTag tag) : Val(0) { Prev.setInt(tag); }
|
||||
|
||||
public:
|
||||
operator Value*() const { return Val; }
|
||||
operator Value *() const { return Val; }
|
||||
Value *get() const { return Val; }
|
||||
|
||||
/// \brief Returns the User that contains this Use.
|
||||
@ -117,7 +111,7 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
Value *operator->() { return Val; }
|
||||
Value *operator->() { return Val; }
|
||||
const Value *operator->() const { return Val; }
|
||||
|
||||
Use *getNext() const { return Next; }
|
||||
@ -133,25 +127,25 @@ public:
|
||||
static void zap(Use *Start, const Use *Stop, bool del = false);
|
||||
|
||||
private:
|
||||
const Use* getImpliedUser() const;
|
||||
const Use *getImpliedUser() const;
|
||||
|
||||
Value *Val;
|
||||
Use *Next;
|
||||
PointerIntPair<Use**, 2, PrevPtrTag> Prev;
|
||||
PointerIntPair<Use **, 2, PrevPtrTag> Prev;
|
||||
|
||||
void setPrev(Use **NewPrev) {
|
||||
Prev.setPointer(NewPrev);
|
||||
}
|
||||
void setPrev(Use **NewPrev) { Prev.setPointer(NewPrev); }
|
||||
void addToList(Use **List) {
|
||||
Next = *List;
|
||||
if (Next) Next->setPrev(&Next);
|
||||
if (Next)
|
||||
Next->setPrev(&Next);
|
||||
setPrev(List);
|
||||
*List = this;
|
||||
}
|
||||
void removeFromList() {
|
||||
Use **StrippedPrev = Prev.getPointer();
|
||||
*StrippedPrev = Next;
|
||||
if (Next) Next->setPrev(StrippedPrev);
|
||||
if (Next)
|
||||
Next->setPrev(StrippedPrev);
|
||||
}
|
||||
|
||||
friend class Value;
|
||||
@ -159,21 +153,15 @@ private:
|
||||
|
||||
/// \brief Allow clients to treat uses just like values when using
|
||||
/// casting operators.
|
||||
template<> struct simplify_type<Use> {
|
||||
typedef Value* SimpleType;
|
||||
static SimpleType getSimplifiedValue(Use &Val) {
|
||||
return Val.get();
|
||||
}
|
||||
template <> struct simplify_type<Use> {
|
||||
typedef Value *SimpleType;
|
||||
static SimpleType getSimplifiedValue(Use &Val) { return Val.get(); }
|
||||
};
|
||||
template<> struct simplify_type<const Use> {
|
||||
typedef /*const*/ Value* SimpleType;
|
||||
static SimpleType getSimplifiedValue(const Use &Val) {
|
||||
return Val.get();
|
||||
}
|
||||
template <> struct simplify_type<const Use> {
|
||||
typedef /*const*/ Value *SimpleType;
|
||||
static SimpleType getSimplifiedValue(const Use &Val) { return Val.get(); }
|
||||
};
|
||||
|
||||
|
||||
|
||||
template<typename UserTy> // UserTy == 'User' or 'const User'
|
||||
class value_use_iterator : public std::iterator<std::forward_iterator_tag,
|
||||
UserTy*, ptrdiff_t> {
|
||||
|
@ -40,10 +40,9 @@ void Use::swap(Use &RHS) {
|
||||
|
||||
User *Use::getUser() const {
|
||||
const Use *End = getImpliedUser();
|
||||
const UserRef *ref = reinterpret_cast<const UserRef*>(End);
|
||||
return ref->getInt()
|
||||
? ref->getPointer()
|
||||
: reinterpret_cast<User*>(const_cast<Use*>(End));
|
||||
const UserRef *ref = reinterpret_cast<const UserRef *>(End);
|
||||
return ref->getInt() ? ref->getPointer()
|
||||
: reinterpret_cast<User *>(const_cast<Use *>(End));
|
||||
}
|
||||
|
||||
// Sets up the waymarking algoritm's tags for a series of Uses. See the
|
||||
@ -51,31 +50,28 @@ User *Use::getUser() const {
|
||||
//
|
||||
// http://www.llvm.org/docs/ProgrammersManual.html#UserLayout
|
||||
//
|
||||
Use *Use::initTags(Use * const Start, Use *Stop) {
|
||||
Use *Use::initTags(Use *const Start, Use *Stop) {
|
||||
ptrdiff_t Done = 0;
|
||||
while (Done < 20) {
|
||||
if (Start == Stop--)
|
||||
return Start;
|
||||
static const PrevPtrTag tags[20] = { fullStopTag, oneDigitTag, stopTag,
|
||||
oneDigitTag, oneDigitTag, stopTag,
|
||||
zeroDigitTag, oneDigitTag, oneDigitTag,
|
||||
stopTag, zeroDigitTag, oneDigitTag,
|
||||
zeroDigitTag, oneDigitTag, stopTag,
|
||||
oneDigitTag, oneDigitTag, oneDigitTag,
|
||||
oneDigitTag, stopTag
|
||||
};
|
||||
new(Stop) Use(tags[Done++]);
|
||||
static const PrevPtrTag tags[20] = {
|
||||
fullStopTag, oneDigitTag, stopTag, oneDigitTag, oneDigitTag,
|
||||
stopTag, zeroDigitTag, oneDigitTag, oneDigitTag, stopTag,
|
||||
zeroDigitTag, oneDigitTag, zeroDigitTag, oneDigitTag, stopTag,
|
||||
oneDigitTag, oneDigitTag, oneDigitTag, oneDigitTag, stopTag};
|
||||
new (Stop) Use(tags[Done++]);
|
||||
}
|
||||
|
||||
ptrdiff_t Count = Done;
|
||||
while (Start != Stop) {
|
||||
--Stop;
|
||||
if (!Count) {
|
||||
new(Stop) Use(stopTag);
|
||||
new (Stop) Use(stopTag);
|
||||
++Done;
|
||||
Count = Done;
|
||||
} else {
|
||||
new(Stop) Use(PrevPtrTag(Count & 1));
|
||||
new (Stop) Use(PrevPtrTag(Count & 1));
|
||||
Count >>= 1;
|
||||
++Done;
|
||||
}
|
||||
@ -97,29 +93,29 @@ const Use *Use::getImpliedUser() const {
|
||||
while (true) {
|
||||
unsigned Tag = (Current++)->Prev.getInt();
|
||||
switch (Tag) {
|
||||
case zeroDigitTag:
|
||||
case oneDigitTag:
|
||||
continue;
|
||||
case zeroDigitTag:
|
||||
case oneDigitTag:
|
||||
continue;
|
||||
|
||||
case stopTag: {
|
||||
++Current;
|
||||
ptrdiff_t Offset = 1;
|
||||
while (true) {
|
||||
unsigned Tag = Current->Prev.getInt();
|
||||
switch (Tag) {
|
||||
case zeroDigitTag:
|
||||
case oneDigitTag:
|
||||
++Current;
|
||||
Offset = (Offset << 1) + Tag;
|
||||
continue;
|
||||
default:
|
||||
return Current + Offset;
|
||||
}
|
||||
case stopTag: {
|
||||
++Current;
|
||||
ptrdiff_t Offset = 1;
|
||||
while (true) {
|
||||
unsigned Tag = Current->Prev.getInt();
|
||||
switch (Tag) {
|
||||
case zeroDigitTag:
|
||||
case oneDigitTag:
|
||||
++Current;
|
||||
Offset = (Offset << 1) + Tag;
|
||||
continue;
|
||||
default:
|
||||
return Current + Offset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case fullStopTag:
|
||||
return Current;
|
||||
case fullStopTag:
|
||||
return Current;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user