Refactor common code for PPC fast isel load immediate selection.

llvm-svn: 259178
This commit is contained in:
Eric Christopher 2016-01-29 07:20:30 +00:00
parent 5a2429e239
commit 7d9b9b2d7d
1 changed files with 5 additions and 9 deletions

View File

@ -2092,20 +2092,16 @@ unsigned PPCFastISel::PPCMaterializeInt(const ConstantInt *CI, MVT VT,
((VT == MVT::i64) ? &PPC::G8RCRegClass : &PPC::GPRCRegClass);
// If the constant is in range, use a load-immediate.
if (UseSExt && isInt<16>(CI->getSExtValue())) {
// Since LI will sign extend the constant we need to make sure that for
// our zeroext constants that the sign extended constant fits into 16-bits -
// a range of 0..0x7fff.
if ((UseSExt && isInt<16>(CI->getSExtValue())) ||
(!UseSExt && isUInt<16>(CI->getSExtValue()))) {
unsigned Opc = (VT == MVT::i64) ? PPC::LI8 : PPC::LI;
unsigned ImmReg = createResultReg(RC);
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Opc), ImmReg)
.addImm(CI->getSExtValue());
return ImmReg;
} else if (!UseSExt && isUInt<16>(CI->getSExtValue())) {
// Since LI will sign extend the constant we need to make sure that for
// our zeroext constants that the sign extended constant fits into 16-bits.
unsigned Opc = (VT == MVT::i64) ? PPC::LI8 : PPC::LI;
unsigned ImmReg = createResultReg(RC);
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, TII.get(Opc), ImmReg)
.addImm(CI->getZExtValue());
return ImmReg;
}
// Construct the constant piecewise.