+
+ // Maps to auto-CSE operations.
+ std::map<std::pair<unsigned, std::pair<SDOperand, MVT::ValueType> >,
+ SDNode *> UnaryOps;
+ std::map<std::pair<unsigned, std::pair<SDOperand, SDOperand> >,
+ SDNode *> BinaryOps;
+
+ std::map<std::pair<std::pair<SDOperand, SDOperand>, ISD::CondCode>,
+ SetCCSDNode*> SetCCs;
+
+ std::map<std::pair<SDOperand, std::pair<SDOperand, MVT::ValueType> >,
+ SDNode *> Loads;
+
+ std::map<const GlobalValue*, SDNode*> GlobalValues;
+ std::map<std::pair<uint64_t, MVT::ValueType>, SDNode*> Constants;
+ std::map<std::pair<double, MVT::ValueType>, SDNode*> ConstantFPs;
+ std::map<int, SDNode*> FrameIndices;
+ std::map<unsigned, SDNode*> ConstantPoolIndices;
+ std::map<MachineBasicBlock *, SDNode*> BBNodes;
+ std::map<std::string, SDNode*> ExternalSymbols;
+ struct EVTStruct {
+ unsigned Opcode;
+ MVT::ValueType VT, EVT;
+ std::vector<SDOperand> Ops;
+ bool operator<(const EVTStruct &RHS) const {
+ if (Opcode < RHS.Opcode) return true;
+ if (Opcode > RHS.Opcode) return false;
+ if (VT < RHS.VT) return true;
+ if (VT > RHS.VT) return false;
+ if (EVT < RHS.EVT) return true;
+ if (EVT > RHS.EVT) return false;
+ return Ops < RHS.Ops;
+ }
+ };
+ std::map<EVTStruct, SDNode*> MVTSDNodes;