3.5 snapshot (which around 60% of them did).. r203025, r203050, r203054, r203281, r203581, r203719, r203818, r204155, r204304, r205067, r205630, r205738, r207990, r208501. ok matthew@
41 lines
1.8 KiB
Plaintext
41 lines
1.8 KiB
Plaintext
$OpenBSD: patch-lib_Target_ARM_A15SDOptimizer_cpp,v 1.1 2014/07/10 22:46:37 brad Exp $
|
|
|
|
r204304
|
|
Fix an assertion failure in A15SDOptimizer about DPair reg class by treating DPair as QPR.
|
|
|
|
--- lib/Target/ARM/A15SDOptimizer.cpp.orig Sun Mar 2 21:57:40 2014
|
|
+++ lib/Target/ARM/A15SDOptimizer.cpp Sat Jun 14 04:09:54 2014
|
|
@@ -416,7 +416,8 @@ SmallVector<unsigned, 8> A15SDOptimizer::getReadDPRs(M
|
|
if (!MO.isReg() || !MO.isUse())
|
|
continue;
|
|
if (!usesRegClass(MO, &ARM::DPRRegClass) &&
|
|
- !usesRegClass(MO, &ARM::QPRRegClass))
|
|
+ !usesRegClass(MO, &ARM::QPRRegClass) &&
|
|
+ !usesRegClass(MO, &ARM::DPairRegClass)) // Treat DPair as QPR
|
|
continue;
|
|
|
|
Defs.push_back(MO.getReg());
|
|
@@ -536,7 +537,10 @@ A15SDOptimizer::optimizeAllLanesPattern(MachineInstr *
|
|
InsertPt++;
|
|
unsigned Out;
|
|
|
|
- if (MRI->getRegClass(Reg)->hasSuperClassEq(&ARM::QPRRegClass)) {
|
|
+ // DPair has the same length as QPR and also has two DPRs as subreg.
|
|
+ // Treat DPair as QPR.
|
|
+ if (MRI->getRegClass(Reg)->hasSuperClassEq(&ARM::QPRRegClass) ||
|
|
+ MRI->getRegClass(Reg)->hasSuperClassEq(&ARM::DPairRegClass)) {
|
|
unsigned DSub0 = createExtractSubreg(MBB, InsertPt, DL, Reg,
|
|
ARM::dsub_0, &ARM::DPRRegClass);
|
|
unsigned DSub1 = createExtractSubreg(MBB, InsertPt, DL, Reg,
|
|
@@ -569,7 +573,9 @@ A15SDOptimizer::optimizeAllLanesPattern(MachineInstr *
|
|
default: llvm_unreachable("Unknown preferred lane!");
|
|
}
|
|
|
|
- bool UsesQPR = usesRegClass(MI->getOperand(0), &ARM::QPRRegClass);
|
|
+ // Treat DPair as QPR
|
|
+ bool UsesQPR = usesRegClass(MI->getOperand(0), &ARM::QPRRegClass) ||
|
|
+ usesRegClass(MI->getOperand(0), &ARM::DPairRegClass);
|
|
|
|
Out = createImplicitDef(MBB, InsertPt, DL);
|
|
Out = createInsertSubreg(MBB, InsertPt, DL, Out, PrefLane, Reg);
|