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 | 463d6a5e7c680448157bca1ccc2db77f751f5047 (patch) | |
| tree | 448090c7da68eea572dcb833de4b74a722c208bb /llvm/lib/VMCore | |
| parent | 689398fe76c7881c5a28ae9eab8ad1ebba7fc1ea (diff) | |
| download | bcm5719-llvm-463d6a5e7c680448157bca1ccc2db77f751f5047.tar.gz bcm5719-llvm-463d6a5e7c680448157bca1ccc2db77f751f5047.zip  | |
Implement TODO: print out short form of Invoke if possible
llvm-svn: 7595
Diffstat (limited to 'llvm/lib/VMCore')
| -rw-r--r-- | llvm/lib/VMCore/AsmWriter.cpp | 31 | 
1 files changed, 23 insertions, 8 deletions
diff --git a/llvm/lib/VMCore/AsmWriter.cpp b/llvm/lib/VMCore/AsmWriter.cpp index 2ebce7243bc..e8feb725005 100644 --- a/llvm/lib/VMCore/AsmWriter.cpp +++ b/llvm/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) {  | 

