[llvm-dev] Backend emitting to string instead of file

Frank Winter via llvm-dev llvm-dev at lists.llvm.org
Tue Apr 14 19:07:58 PDT 2020

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 

The used command line was

llc -march=amdgcn -mcpu=gfx906 < module.ll

Anyone see what's wrong with the code?


More information about the llvm-dev mailing list