[llvm-dev] Backend emitting to string instead of file
Craig Topper via llvm-dev
llvm-dev at lists.llvm.org
Tue Apr 14 19:27:37 PDT 2020
I think buffer_ostream has an internal buffer that doesn't flush until its
destructor runs. What happens
if you just pass "stream" instead of pstream?
~Craig
On Tue, Apr 14, 2020 at 7:08 PM Frank Winter via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> I can use llc to compile my IR module to amdgcn with some non-zero
> output. However, if try to write the output (assembly or object) to a
> string (via buffer_ostream) the resulting string has always zero length.
> Here the code changes I do:
>
> Original llc:
>
> if (Target->addPassesToEmitFile(PM, *OS,
> DwoOut ? &DwoOut->os() : nullptr,
> FileType, NoVerify, MMIWP))
>
>
> Now, with this tiny change I was hoping to write to a string instead of
> the output stream defined by the command line parameters:
>
> std::string outStr;
> raw_string_ostream stream(outStr);
> buffer_ostream pstream(stream);
> if (Target->addPassesToEmitFile(PM, pstream,
> DwoOut ? &DwoOut->os() : nullptr,
> FileType, NoVerify, MMIWP))
>
>
> later, e.g., after PM.run(*M), I check the string for content with
>
> WithColor::warning(errs(), argv[0]) << "with flush, output size: " <<
> outStr.length() << "\n";
>
>
> But this always yields "with flush, output size: 0"
>
> I tried to flush the raw_string_ostream before using the string, same
> result.
>
> The used command line was
>
> llc -march=amdgcn -mcpu=gfx906 < module.ll
>
>
> Anyone see what's wrong with the code?
>
>
> Frank
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200414/5ce7911d/attachment.html>
More information about the llvm-dev
mailing list