1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 03:02:36 +01: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.

llvm-svn: 202799
This commit is contained in:
Chandler Carruth 2014-03-04 08:53:41 +00:00
parent 8dc193e62a
commit b64f1b4fc0
2 changed files with 55 additions and 71 deletions

View File

@ -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> {

View File

@ -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;
}
}
}