[AVX] Make BinOpInit Unique

Make sure BinOpInits are unique and created only once.  This will be
important for AVX/SIMD as many operators will be used to generate
patterns and other relevant data.

llvm-svn: 136495
This commit is contained in:
David Greene 2011-07-29 19:07:19 +00:00
parent 2b6c8b3794
commit 3acab9c5fe
1 changed files with 14 additions and 1 deletions

View File

@ -860,7 +860,20 @@ std::string UnOpInit::getAsString() const {
const BinOpInit *BinOpInit::get(BinaryOp opc, const Init *lhs,
const Init *rhs, RecTy *Type) {
return new BinOpInit(opc, lhs, rhs, Type);
typedef std::pair<
std::pair<std::pair<unsigned, const Init *>, const Init *>,
RecTy *
> Key;
typedef DenseMap<Key, BinOpInit *> Pool;
static Pool ThePool;
Key TheKey(std::make_pair(std::make_pair(std::make_pair(opc, lhs), rhs),
Type));
BinOpInit *&I = ThePool[TheKey];
if (!I) I = new BinOpInit(opc, lhs, rhs, Type);
return I;
}
const Init *BinOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) const {