forked from OSchip/llvm-project
Refactor common code for PPC fast isel load immediate selection.
llvm-svn: 259178
This commit is contained in:
parent
5a2429e239
commit
7d9b9b2d7d
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue