//
//===----------------------------------------------------------------------===//
-
#ifndef LLVM_TYPE_H
#define LLVM_TYPE_H
#include "llvm/AbstractTypeUser.h"
-#include "llvm/LLVMContext.h"
#include "llvm/Support/Casting.h"
-#include "llvm/Support/DataTypes.h"
-#include "llvm/System/Atomic.h"
+#include "llvm/System/DataTypes.h"
#include "llvm/ADT/GraphTraits.h"
#include <string>
#include <vector>
class TypeMapBase;
class raw_ostream;
class Module;
+class LLVMContext;
/// This file contains the declaration of the Type class. For more "Type" type
/// stuff, look in DerivedTypes.h.
/// has no AbstractTypeUsers, the type is deleted. This is only sensical for
/// derived types.
///
- mutable sys::cas_flag RefCount;
+ mutable unsigned RefCount;
/// Context - This refers to the LLVMContext in which this type was uniqued.
LLVMContext &Context;
///
bool isInteger() const { return ID == IntegerTyID; }
+ /// isInteger - Return true if this is an IntegerType of the specified width.
+ bool isInteger(unsigned Bitwidth) const;
+
/// isIntOrIntVector - Return true if this is an integer type or a vector of
/// integer types.
///
void addRef() const {
assert(isAbstract() && "Cannot add a reference to a non-abstract type!");
- sys::AtomicIncrement(&RefCount);
+ ++RefCount;
}
void dropRef() const {
// If this is the last PATypeHolder using this object, and there are no
// PATypeHandles using it, the type is dead, delete it now.
- sys::cas_flag OldCount = sys::AtomicDecrement(&RefCount);
- if (OldCount == 0 && AbstractTypeUsers.empty())
+ if (--RefCount == 0 && AbstractTypeUsers.empty())
this->destroy();
}