Handle improper cast.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34535 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jim Laskey
2007-02-23 21:45:01 +00:00
parent da2295e631
commit 1da20a71d1

View File

@@ -484,7 +484,9 @@ public:
unsigned Opc); unsigned Opc);
bool isExportableFromCurrentBlock(Value *V, const BasicBlock *FromBB); bool isExportableFromCurrentBlock(Value *V, const BasicBlock *FromBB);
void ExportFromCurrentBlock(Value *V); void ExportFromCurrentBlock(Value *V);
void LowerCallTo(CallInst &I, SDOperand Callee, unsigned OpIdx); void LowerCallTo(Instruction &I,
const Type *CalledValueTy, unsigned CallingConv,
bool IsTailCall, SDOperand Callee, unsigned OpIdx);
// Terminator instructions. // Terminator instructions.
void visitRet(ReturnInst &I); void visitRet(ReturnInst &I);
@@ -1118,7 +1120,11 @@ void SelectionDAGLowering::visitInvoke(InvokeInst &I) {
DAG.setRoot(DAG.getNode(ISD::LABEL, MVT::Other, getRoot(), DAG.setRoot(DAG.getNode(ISD::LABEL, MVT::Other, getRoot(),
DAG.getConstant(BeginLabel, MVT::i32))); DAG.getConstant(BeginLabel, MVT::i32)));
LowerCallTo((CallInst&)I, getValue(I.getOperand(0)), 3); LowerCallTo(I, I.getCalledValue()->getType(),
I.getCallingConv(),
false,
getValue(I.getOperand(0)),
3);
// Insert a label before the invoke call to mark the try range. // Insert a label before the invoke call to mark the try range.
// This can be used to detect deletion of the invoke via the // This can be used to detect deletion of the invoke via the
@@ -2246,9 +2252,12 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
} }
void SelectionDAGLowering::LowerCallTo(CallInst &I, void SelectionDAGLowering::LowerCallTo(Instruction &I,
const Type *CalledValueTy,
unsigned CallingConv,
bool IsTailCall,
SDOperand Callee, unsigned OpIdx) { SDOperand Callee, unsigned OpIdx) {
const PointerType *PT = cast<PointerType>(I.getCalledValue()->getType()); const PointerType *PT = cast<PointerType>(CalledValueTy);
const FunctionType *FTy = cast<FunctionType>(PT->getElementType()); const FunctionType *FTy = cast<FunctionType>(PT->getElementType());
TargetLowering::ArgListTy Args; TargetLowering::ArgListTy Args;
@@ -2267,7 +2276,7 @@ void SelectionDAGLowering::LowerCallTo(CallInst &I,
std::pair<SDOperand,SDOperand> Result = std::pair<SDOperand,SDOperand> Result =
TLI.LowerCallTo(getRoot(), I.getType(), TLI.LowerCallTo(getRoot(), I.getType(),
FTy->paramHasAttr(0,FunctionType::SExtAttribute), FTy->paramHasAttr(0,FunctionType::SExtAttribute),
FTy->isVarArg(), I.getCallingConv(), I.isTailCall(), FTy->isVarArg(), CallingConv, IsTailCall,
Callee, Args, DAG); Callee, Args, DAG);
if (I.getType() != Type::VoidTy) if (I.getType() != Type::VoidTy)
setValue(&I, Result.first); setValue(&I, Result.first);
@@ -2333,7 +2342,11 @@ void SelectionDAGLowering::visitCall(CallInst &I) {
else else
Callee = DAG.getExternalSymbol(RenameFn, TLI.getPointerTy()); Callee = DAG.getExternalSymbol(RenameFn, TLI.getPointerTy());
LowerCallTo(I, Callee, 1); LowerCallTo(I, I.getCalledValue()->getType(),
I.getCallingConv(),
I.isTailCall(),
Callee,
1);
} }