mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
add bytecode reader support for tail calls
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21727 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
653488d166
commit
38287bdfde
@ -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
Block a user