mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
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
This commit is contained in:
parent
a493ae300b
commit
7a012299ce
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user