- for (regclass_iterator I = regclass_begin(), E = regclass_end(); I != E; ++I)
- if ((VT == MVT::Other || (*I)->hasType(VT))
- && (*I)->contains(reg))
- return *I;
+ SmallVector<const TargetRegisterClass*, 4> RCs;
+ for (regclass_iterator I = regclass_begin(), E = regclass_end(); I != E; ++I){
+ if ((VT == MVT::Other || (*I)->hasType(VT)) && (*I)->contains(reg))
+ RCs.push_back(*I);
+ }
+
+ if (RCs.size() == 1)
+ return RCs[0];
+
+ if (RCs.size()) {
+ // Multiple compatible register classes. Get the super- class.
+ std::stable_sort(RCs.begin(), RCs.end(), RCCompare());
+ return RCs[0];
+ }
+