break;
}
+ case 61: // tail call
case Instruction::Call: {
if (Oprnds.size() == 0)
error("Invalid call instruction encountered!");
}
Result = new CallInst(F, Params);
+ if (Opcode == 61) cast<CallInst>(Result)->setTailCall(true);
break;
}
case Instruction::Invoke: {
unsigned Opcode = I.getOpcode();
unsigned NumOperands = I.getNumOperands();
- // Encode 'volatile load' as 62 and 'volatile store' as 63.
+ // Encode 'tail call' as 61, 'volatile load' as 62, and 'volatile store' as
+ // 63.
+ if (isa<CallInst>(I) && cast<CallInst>(I).isTailCall())
+ Opcode = 61;
if (isa<LoadInst>(I) && cast<LoadInst>(I).isVolatile())
Opcode = 62;
if (isa<StoreInst>(I) && cast<StoreInst>(I).isVolatile())