mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-30 07:00:57 +00:00
[AVX] Make BitsInit Unique
Make BitsInit a FoldingSetNode so we can unique it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136489 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0ffd167a01
commit
726bbde3c4
@ -16,6 +16,8 @@
|
||||
#include "Error.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include "llvm/Support/Format.h"
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/FoldingSet.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/ADT/STLExtras.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
@ -455,8 +457,36 @@ const BitInit *BitInit::get(bool V) {
|
||||
return V ? &True : &False;
|
||||
}
|
||||
|
||||
static void
|
||||
ProfileBitsInit(FoldingSetNodeID &ID, ArrayRef<const Init *> Range) {
|
||||
ID.AddInteger(Range.size());
|
||||
|
||||
for (ArrayRef<const Init *>::iterator i = Range.begin(),
|
||||
iend = Range.end();
|
||||
i != iend;
|
||||
++i)
|
||||
ID.AddPointer(*i);
|
||||
}
|
||||
|
||||
const BitsInit *BitsInit::get(ArrayRef<const Init *> Range) {
|
||||
return new BitsInit(Range);
|
||||
typedef FoldingSet<BitsInit> Pool;
|
||||
static Pool ThePool;
|
||||
|
||||
FoldingSetNodeID ID;
|
||||
ProfileBitsInit(ID, Range);
|
||||
|
||||
void *IP = 0;
|
||||
if (const BitsInit *I = ThePool.FindNodeOrInsertPos(ID, IP))
|
||||
return I;
|
||||
|
||||
BitsInit *I = new BitsInit(Range);
|
||||
ThePool.InsertNode(I, IP);
|
||||
|
||||
return I;
|
||||
}
|
||||
|
||||
void BitsInit::Profile(FoldingSetNodeID &ID) const {
|
||||
ProfileBitsInit(ID, Bits);
|
||||
}
|
||||
|
||||
const Init *
|
||||
|
@ -16,6 +16,7 @@
|
||||
#define RECORD_H
|
||||
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/FoldingSet.h"
|
||||
#include "llvm/Support/Allocator.h"
|
||||
#include "llvm/Support/SourceMgr.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
@ -648,11 +649,9 @@ public:
|
||||
/// BitsInit - { a, b, c } - Represents an initializer for a BitsRecTy value.
|
||||
/// It contains a vector of bits, whose size is determined by the type.
|
||||
///
|
||||
class BitsInit : public Init {
|
||||
class BitsInit : public Init, public FoldingSetNode {
|
||||
std::vector<const Init*> Bits;
|
||||
|
||||
BitsInit(unsigned Size) : Bits(Size) {}
|
||||
|
||||
BitsInit(ArrayRef<const Init *> Range) : Bits(Range.begin(), Range.end()) {}
|
||||
|
||||
BitsInit(const BitsInit &Other); // Do not define.
|
||||
@ -661,6 +660,8 @@ class BitsInit : public Init {
|
||||
public:
|
||||
static const BitsInit *get(ArrayRef<const Init *> Range);
|
||||
|
||||
void Profile(FoldingSetNodeID &ID) const;
|
||||
|
||||
unsigned getNumBits() const { return Bits.size(); }
|
||||
|
||||
const Init *getBit(unsigned Bit) const {
|
||||
|
Loading…
Reference in New Issue
Block a user