[PATCH] Machine Level IR Serialization: print and parse LLVM IR.

Duncan P. N. Exon Smith dexonsmith at apple.com
Thu May 21 10:59:13 PDT 2015


> On 2015 May 20, at 14:57, Alex L <arphaman at gmail.com> wrote:
> 
> I would like to resubmit the reverted commit now that I committed the AsmParser change in r237833.
> 
> I've attached an updated patch and a smaller patch that shows the change between the reverted commit and the 
> updated patch.
> 
> The updated patch adds a terminating null character to the LLVM IR sourced that's passed from MIRParser 
> to LLParser.
> 

I don't think you should make a new copy of the string here.  Instead,
null-terminate the source string when it's created.

Here's the code that creates the source string:

    case Token::TK_BlockScalar: {
      getNext();
      StringRef StrCopy = StringRef(T.Value).copy(NodeAllocator);
      return new (NodeAllocator)
          BlockScalarNode(stream.CurrentDoc, AnchorInfo.Range.substr(1),
                          TagInfo.Range, StrCopy, T.Range);
    }

Just change this code to:

    case Token::TK_BlockScalar: {
      getNext();
      StringRef NullStr(T.Value.c_str(), T.Value.length() + 1);
      StringRef StrCopy = NullStr.copy(NodeAllocator).drop_back();
      return new (NodeAllocator)
          BlockScalarNode(stream.CurrentDoc, AnchorInfo.Range.substr(1),
                          TagInfo.Range, StrCopy, T.Range);
    }

You can commit this ahead of time and write a unit test for it, then
commit your previously LGTM'ed patch.

(BTW, I used `std::string::c_str()` up above, which has always
guaranteed a null-terminated string.  Since C++11, `std::string::data()`
should be identical, but I don't know if all our standard libraries are
up-to-date.)

> Thanks,
> Alex
> 
> 2015-05-19 11:21 GMT-07:00 Alex Lorenz <arphaman at gmail.com>:
> REPOSITORY
>   rL LLVM
> 
> http://reviews.llvm.org/D9616
> 
> Files:
>   llvm/trunk/include/llvm/CodeGen/MIR/MIRParser.h
>   llvm/trunk/include/llvm/CodeGen/Passes.h
>   llvm/trunk/include/llvm/InitializePasses.h
>   llvm/trunk/include/llvm/Support/YAMLTraits.h
>   llvm/trunk/lib/CodeGen/CMakeLists.txt
>   llvm/trunk/lib/CodeGen/LLVMBuild.txt
>   llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp
>   llvm/trunk/lib/CodeGen/MIR/CMakeLists.txt
>   llvm/trunk/lib/CodeGen/MIR/LLVMBuild.txt
>   llvm/trunk/lib/CodeGen/MIR/MIRParser.cpp
>   llvm/trunk/lib/CodeGen/MIR/MIRPrinter.cpp
>   llvm/trunk/lib/CodeGen/MIR/MIRPrinter.h
>   llvm/trunk/lib/CodeGen/MIR/MIRPrintingPass.cpp
>   llvm/trunk/lib/CodeGen/MIR/Makefile
>   llvm/trunk/lib/CodeGen/Makefile
>   llvm/trunk/lib/Support/YAMLTraits.cpp
>   llvm/trunk/test/CodeGen/Generic/stop-after.ll
>   llvm/trunk/test/CodeGen/MIR/lit.local.cfg
>   llvm/trunk/test/CodeGen/MIR/llvmIR.mir
>   llvm/trunk/test/CodeGen/MIR/llvmIRMissing.mir
>   llvm/trunk/tools/llc/llc.cpp
> 
> EMAIL PREFERENCES
>   http://reviews.llvm.org/settings/panel/emailpreferences/
> 
> <MIR.patch><MIR_Revert_vs_Update.patch>





More information about the llvm-commits mailing list