From c01e4cbccc892abac9ef852e6aa610f34252c044 Mon Sep 17 00:00:00 2001 From: Teresa Johnson Date: Thu, 17 Sep 2015 14:37:35 +0000 Subject: [PATCH] Refactor string encoding checks in BitcodeWriter (NFC) llvm-svn: 247891 --- llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 37 ++++++++++++++--------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index 9986718f08b0..1090234fefe3 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -2073,6 +2073,24 @@ static void WriteInstruction(const Instruction &I, unsigned InstID, Vals.clear(); } +enum StringEncoding { SE_Char6, SE_Fixed7, SE_Fixed8 }; + +/// Determine the encoding to use for the given string name and length. +static StringEncoding getStringEncoding(const char *Str, unsigned StrLen) { + bool isChar6 = true; + for (const char *C = Str, *E = C + StrLen; C != E; ++C) { + if (isChar6) + isChar6 = BitCodeAbbrevOp::isChar6(*C); + if ((unsigned char)*C & 128) + // don't bother scanning the rest. + return SE_Fixed8; + } + if (isChar6) + return SE_Char6; + else + return SE_Fixed7; +} + // Emit names for globals/functions etc. static void WriteValueSymbolTable(const ValueSymbolTable &VST, const ValueEnumerator &VE, @@ -2087,17 +2105,8 @@ static void WriteValueSymbolTable(const ValueSymbolTable &VST, for (const ValueName &Name : VST) { // Figure out the encoding to use for the name. - bool is7Bit = true; - bool isChar6 = true; - for (const char *C = Name.getKeyData(), *E = C+Name.getKeyLength(); - C != E; ++C) { - if (isChar6) - isChar6 = BitCodeAbbrevOp::isChar6(*C); - if ((unsigned char)*C & 128) { - is7Bit = false; - break; // don't bother scanning the rest. - } - } + StringEncoding Bits = + getStringEncoding(Name.getKeyData(), Name.getKeyLength()); unsigned AbbrevToUse = VST_ENTRY_8_ABBREV; @@ -2106,13 +2115,13 @@ static void WriteValueSymbolTable(const ValueSymbolTable &VST, unsigned Code; if (isa(Name.getValue())) { Code = bitc::VST_CODE_BBENTRY; - if (isChar6) + if (Bits == SE_Char6) AbbrevToUse = VST_BBENTRY_6_ABBREV; } else { Code = bitc::VST_CODE_ENTRY; - if (isChar6) + if (Bits == SE_Char6) AbbrevToUse = VST_ENTRY_6_ABBREV; - else if (is7Bit) + else if (Bits == SE_Fixed7) AbbrevToUse = VST_ENTRY_7_ABBREV; }