diff options
author | Chris Lattner <sabre@nondot.org> | 2003-08-05 15:34:45 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-08-05 15:34:45 +0000 |
commit | 7a012299ced5cff02cec47055a63d3b2a78bb36f (patch) | |
tree | 9682b8a0c3d65d7337f29be572cf1710968249ad | |
parent | a493ae300b01bae69b66d961b5d67be5d64e129a (diff) |
Implement TODO: print out short form of Invoke if possible
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7595 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/VMCore/AsmWriter.cpp | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index 2ebce7243b..e8feb72500 100644 --- a/lib/VMCore/AsmWriter.cpp +++ b/lib/VMCore/AsmWriter.cpp @@ -777,15 +777,15 @@ void AssemblyWriter::printInstruction(const Instruction &I) { } else if (isa<ReturnInst>(I) && !Operand) { Out << " void"; } else if (isa<CallInst>(I)) { - const PointerType *PTy = dyn_cast<PointerType>(Operand->getType()); - const FunctionType*MTy = PTy ? dyn_cast<FunctionType>(PTy->getElementType()):0; - const Type *RetTy = MTy ? MTy->getReturnType() : 0; + const PointerType *PTy = cast<PointerType>(Operand->getType()); + const FunctionType *FTy = cast<FunctionType>(PTy->getElementType()); + const Type *RetTy = FTy->getReturnType(); - // If possible, print out the short form of the call instruction, but we can + // If possible, print out the short form of the call instruction. We can // only do this if the first argument is a pointer to a nonvararg function, - // and if the value returned is not a pointer to a function. + // and if the return type is not a pointer to a function. // - if (RetTy && MTy && !MTy->isVarArg() && + if (!FTy->isVarArg() && (!isa<PointerType>(RetTy) || !isa<FunctionType>(cast<PointerType>(RetTy)->getElementType()))) { Out << " "; printType(RetTy); @@ -802,8 +802,23 @@ void AssemblyWriter::printInstruction(const Instruction &I) { Out << " )"; } else if (const InvokeInst *II = dyn_cast<InvokeInst>(&I)) { - // TODO: Should try to print out short form of the Invoke instruction - writeOperand(Operand, true); + const PointerType *PTy = cast<PointerType>(Operand->getType()); + const FunctionType *FTy = cast<FunctionType>(PTy->getElementType()); + const Type *RetTy = FTy->getReturnType(); + + // If possible, print out the short form of the invoke instruction. We can + // only do this if the first argument is a pointer to a nonvararg function, + // and if the return type is not a pointer to a function. + // + if (!FTy->isVarArg() && + (!isa<PointerType>(RetTy) || + !isa<FunctionType>(cast<PointerType>(RetTy)->getElementType()))) { + Out << " "; printType(RetTy); + writeOperand(Operand, false); + } else { + writeOperand(Operand, true); + } + Out << "("; if (I.getNumOperands() > 3) writeOperand(I.getOperand(3), true); for (unsigned op = 4, Eop = I.getNumOperands(); op < Eop; ++op) { |