diff options
author | Chris Lattner <sabre@nondot.org> | 2007-05-06 01:28:01 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-05-06 01:28:01 +0000 |
commit | cc6d4c9fc237b6260f0052fe08b57cad64812c7e (patch) | |
tree | 588fc9599972dbe8ae7d5845bc3442a17920dd13 /llvm/lib | |
parent | 9ee4836dde03a05af46a63553e7d4eb44c184c60 (diff) | |
download | bcm5719-llvm-cc6d4c9fc237b6260f0052fe08b57cad64812c7e.tar.gz bcm5719-llvm-cc6d4c9fc237b6260f0052fe08b57cad64812c7e.zip |
add some abbrevs for ret and unreachable, shrinking kc++ from 2717360->2705388
llvm-svn: 36823
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index 92475fc9e81..8e1c4d24749 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -43,7 +43,10 @@ enum { CONSTANTS_NULL_Abbrev, // FUNCTION_BLOCK abbrev id's. - FUNCTION_INST_LOAD_ABBREV = bitc::FIRST_APPLICATION_ABBREV + FUNCTION_INST_LOAD_ABBREV = bitc::FIRST_APPLICATION_ABBREV, + FUNCTION_INST_RET_VOID_ABBREV, + FUNCTION_INST_RET_VAL_ABBREV, + FUNCTION_INST_UNREACHABLE_ABBREV }; @@ -697,8 +700,10 @@ static void WriteInstruction(const Instruction &I, unsigned InstID, case Instruction::Ret: Code = bitc::FUNC_CODE_INST_RET; - if (I.getNumOperands()) - PushValueAndType(I.getOperand(0), InstID, Vals, VE); + if (!I.getNumOperands()) + AbbrevToUse = FUNCTION_INST_RET_VOID_ABBREV; + else if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE)) + AbbrevToUse = FUNCTION_INST_RET_VAL_ABBREV; break; case Instruction::Br: Code = bitc::FUNC_CODE_INST_BR; @@ -740,6 +745,7 @@ static void WriteInstruction(const Instruction &I, unsigned InstID, break; case Instruction::Unreachable: Code = bitc::FUNC_CODE_INST_UNREACHABLE; + AbbrevToUse = FUNCTION_INST_UNREACHABLE_ABBREV; break; case Instruction::PHI: @@ -1056,6 +1062,28 @@ static void WriteBlockInfo(const ValueEnumerator &VE, BitstreamWriter &Stream) { Abbv) != FUNCTION_INST_LOAD_ABBREV) assert(0 && "Unexpected abbrev ordering!"); } + { // INST_RET abbrev for FUNCTION_BLOCK. + BitCodeAbbrev *Abbv = new BitCodeAbbrev(); + Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET)); + if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, + Abbv) != FUNCTION_INST_RET_VOID_ABBREV) + assert(0 && "Unexpected abbrev ordering!"); + } + { // INST_RET abbrev for FUNCTION_BLOCK. + BitCodeAbbrev *Abbv = new BitCodeAbbrev(); + Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET)); + Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // ValID + if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, + Abbv) != FUNCTION_INST_RET_VAL_ABBREV) + assert(0 && "Unexpected abbrev ordering!"); + } + { // INST_UNREACHABLE abbrev for FUNCTION_BLOCK. + BitCodeAbbrev *Abbv = new BitCodeAbbrev(); + Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_UNREACHABLE)); + if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID, + Abbv) != FUNCTION_INST_UNREACHABLE_ABBREV) + assert(0 && "Unexpected abbrev ordering!"); + } Stream.ExitBlock(); } |