summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Bytecode
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-05-06 06:13:34 +0000
committerChris Lattner <sabre@nondot.org>2005-05-06 06:13:34 +0000
commitfb6f1746f4c81f8c11abd55142d326a6189799fa (patch)
tree1fdbfb7123df0ecd40be1e5477a847a7be9e72d6 /llvm/lib/Bytecode
parentabb5bd78ca4b6aa1fa3f454885a56f16a074df72 (diff)
downloadbcm5719-llvm-fb6f1746f4c81f8c11abd55142d326a6189799fa.tar.gz
bcm5719-llvm-fb6f1746f4c81f8c11abd55142d326a6189799fa.zip
add bytecode reader support for tail calls
llvm-svn: 21727
Diffstat (limited to 'llvm/lib/Bytecode')
-rw-r--r--llvm/lib/Bytecode/Reader/Reader.cpp2
-rw-r--r--llvm/lib/Bytecode/Writer/Writer.cpp5
2 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/Bytecode/Reader/Reader.cpp b/llvm/lib/Bytecode/Reader/Reader.cpp
index 82a73fa5998..24875e42fd1 100644
--- a/llvm/lib/Bytecode/Reader/Reader.cpp
+++ b/llvm/lib/Bytecode/Reader/Reader.cpp
@@ -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: {
diff --git a/llvm/lib/Bytecode/Writer/Writer.cpp b/llvm/lib/Bytecode/Writer/Writer.cpp
index f6d09c82201..5f614fddf08 100644
--- a/llvm/lib/Bytecode/Writer/Writer.cpp
+++ b/llvm/lib/Bytecode/Writer/Writer.cpp
@@ -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())
OpenPOWER on IntegriCloud