mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-07 12:28:24 +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:
@@ -720,6 +720,7 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 61: // tail call
|
||||||
case Instruction::Call: {
|
case Instruction::Call: {
|
||||||
if (Oprnds.size() == 0)
|
if (Oprnds.size() == 0)
|
||||||
error("Invalid call instruction encountered!");
|
error("Invalid call instruction encountered!");
|
||||||
@@ -765,6 +766,7 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Result = new CallInst(F, Params);
|
Result = new CallInst(F, Params);
|
||||||
|
if (Opcode == 61) cast<CallInst>(Result)->setTailCall(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Instruction::Invoke: {
|
case Instruction::Invoke: {
|
||||||
|
@@ -606,7 +606,10 @@ void BytecodeWriter::outputInstruction(const Instruction &I) {
|
|||||||
unsigned Opcode = I.getOpcode();
|
unsigned Opcode = I.getOpcode();
|
||||||
unsigned NumOperands = I.getNumOperands();
|
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())
|
if (isa<LoadInst>(I) && cast<LoadInst>(I).isVolatile())
|
||||||
Opcode = 62;
|
Opcode = 62;
|
||||||
if (isa<StoreInst>(I) && cast<StoreInst>(I).isVolatile())
|
if (isa<StoreInst>(I) && cast<StoreInst>(I).isVolatile())
|
||||||
|
Reference in New Issue
Block a user