[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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136495 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Greene 2011-07-29 19:07:19 +00:00
parent 6f03b636d2
commit 65a5b8cb3b

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 {