forked from OSchip/llvm-project
add bytecode reader support for tail calls
llvm-svn: 21727
This commit is contained in:
parent
abb5bd78ca
commit
fb6f1746f4
|
@ -720,6 +720,7 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds,
|
|||
break;
|
||||
}
|
||||
|
||||
case 61: // tail call
|
||||
case Instruction::Call: {
|
||||
if (Oprnds.size() == 0)
|
||||
error("Invalid call instruction encountered!");
|
||||
|
@ -765,6 +766,7 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds,
|
|||
}
|
||||
|
||||
Result = new CallInst(F, Params);
|
||||
if (Opcode == 61) cast<CallInst>(Result)->setTailCall(true);
|
||||
break;
|
||||
}
|
||||
case Instruction::Invoke: {
|
||||
|
|
|
@ -606,7 +606,10 @@ void BytecodeWriter::outputInstruction(const Instruction &I) {
|
|||
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())
|
||||
|
|
Loading…
Reference in New Issue