Fix a FIXME by moving the fast-isel implementation of the objectsize intrinsic from the x86 code to the generic code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131332 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eli Friedman 2011-05-14 00:47:51 +00:00
parent a3f88148e6
commit d0118a2371
2 changed files with 10 additions and 23 deletions

View File

@ -628,6 +628,16 @@ bool FastISel::SelectCall(const User *I) {
return true;
}
case Intrinsic::objectsize: {
ConstantInt *CI = cast<ConstantInt>(Call->getArgOperand(1));
unsigned long long Res = CI->isZero() ? -1ULL : 0;
Constant *ResCI = ConstantInt::get(Call->getType(), Res);
unsigned ResultReg = getRegForValue(ResCI);
if (ResultReg == 0)
return false;
UpdateValueMap(Call, ResultReg);
return true;
}
}
// An arbitrary call. Bail.

View File

@ -1369,29 +1369,6 @@ bool X86FastISel::X86VisitIntrinsicCall(const IntrinsicInst &I) {
if (!X86FastEmitStore(PtrTy, Op1, AM)) return false;
return true;
}
case Intrinsic::objectsize: {
// FIXME: This should be moved to generic code!
ConstantInt *CI = cast<ConstantInt>(I.getArgOperand(1));
const Type *Ty = I.getCalledFunction()->getReturnType();
MVT VT;
if (!isTypeLegal(Ty, VT))
return false;
unsigned OpC = 0;
if (VT == MVT::i32)
OpC = X86::MOV32ri;
else if (VT == MVT::i64)
OpC = X86::MOV64ri;
else
return false;
unsigned ResultReg = createResultReg(TLI.getRegClassFor(VT));
BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(OpC), ResultReg).
addImm(CI->isZero() ? -1ULL : 0);
UpdateValueMap(&I, ResultReg);
return true;
}
case Intrinsic::dbg_declare: {
const DbgDeclareInst *DI = cast<DbgDeclareInst>(&I);
X86AddressMode AM;