summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Bytecode
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2006-12-06 04:27:07 +0000
committerReid Spencer <rspencer@reidspencer.com>2006-12-06 04:27:07 +0000
commit40f04928ea517908bb5ef9cfca76f4785bb2ea42 (patch)
treee3dc0410ae4aeb24b41a617e859c438d92a430ee /llvm/lib/Bytecode
parentec589036234d4633b820e43e3e284be7bc2b6551 (diff)
downloadbcm5719-llvm-40f04928ea517908bb5ef9cfca76f4785bb2ea42.tar.gz
bcm5719-llvm-40f04928ea517908bb5ef9cfca76f4785bb2ea42.zip
Fix a CmpInst writing bug by removing merge cruft that I *know* I've removed
before. Also, make sure we write the predicate value for Cmp instructions using instruction format 0. llvm-svn: 32253
Diffstat (limited to 'llvm/lib/Bytecode')
-rw-r--r--llvm/lib/Bytecode/Writer/Writer.cpp13
1 files changed, 4 insertions, 9 deletions
diff --git a/llvm/lib/Bytecode/Writer/Writer.cpp b/llvm/lib/Bytecode/Writer/Writer.cpp
index fdd0f3ca427..b8f57f7f72f 100644
--- a/llvm/lib/Bytecode/Writer/Writer.cpp
+++ b/llvm/lib/Bytecode/Writer/Writer.cpp
@@ -449,8 +449,8 @@ void BytecodeWriter::outputInstructionFormat0(const Instruction *I,
output_typeid(Type); // Result type
unsigned NumArgs = I->getNumOperands();
- output_vbr(NumArgs + (isa<CastInst>(I) || isa<InvokeInst>(I) ||
- isa<VAArgInst>(I) || Opcode == 58));
+ output_vbr(NumArgs + (isa<CastInst>(I) || isa<InvokeInst>(I) ||
+ isa<CmpInst>(I) || isa<VAArgInst>(I) || Opcode == 58));
if (!isa<GetElementPtrInst>(&I)) {
for (unsigned i = 0; i < NumArgs; ++i) {
@@ -463,6 +463,8 @@ void BytecodeWriter::outputInstructionFormat0(const Instruction *I,
int Slot = Table.getSlot(I->getType());
assert(Slot != -1 && "Cast return type unknown?");
output_typeid((unsigned)Slot);
+ } else if (isa<CmpInst>(I)) {
+ output_vbr(unsigned(cast<CmpInst>(I)->getPredicate()));
} else if (isa<InvokeInst>(I)) {
output_vbr(cast<InvokeInst>(I)->getCallingConv());
} else if (Opcode == 58) { // Call escape sequence
@@ -793,13 +795,6 @@ void BytecodeWriter::outputInstruction(const Instruction &I) {
}
}
- // In the weird case of the ICmp or FCmp instructions, we need to also put
- // out the instruction's predicate value. We do that here, after the
- // instruction's type and operands have been written so we can reuse the
- // code above.
- if (const CmpInst* CI = dyn_cast<CmpInst>(&I))
- output_vbr((unsigned)CI->getPredicate());
-
// If we weren't handled before here, we either have a large number of
// operands or a large operand index that we are referring to.
outputInstructionFormat0(&I, Opcode, Table, Type);
OpenPOWER on IntegriCloud