| Index: src/IceCfg.cpp
|
| diff --git a/src/IceCfg.cpp b/src/IceCfg.cpp
|
| index e8c74bacc3a08c3e44c460092ed950edfea76395..b5cc93b7a5cb897b499bc0250117a0f09fa77818 100644
|
| --- a/src/IceCfg.cpp
|
| +++ b/src/IceCfg.cpp
|
| @@ -56,6 +56,7 @@ Cfg::~Cfg() {
|
| void Cfg::setError(const IceString &Message) {
|
| HasError = true;
|
| ErrorMessage = Message;
|
| + OstreamLocker L(Ctx);
|
| Ctx->getStrDump() << "ICE translation error: " << ErrorMessage << "\n";
|
| }
|
|
|
| @@ -335,6 +336,7 @@ void Cfg::liveness(LivenessMode Mode) {
|
| bool Cfg::validateLiveness() const {
|
| TimerMarker T(TimerStack::TT_validateLiveness, this);
|
| bool Valid = true;
|
| + OstreamLocker L(Ctx);
|
| Ostream &Str = Ctx->getStrDump();
|
| for (CfgNode *Node : Nodes) {
|
| Inst *FirstInst = nullptr;
|
| @@ -442,6 +444,7 @@ void Cfg::emit() {
|
| liveness(Liveness_Basic);
|
| dump("After recomputing liveness for -decorate-asm");
|
| }
|
| + OstreamLocker L(Ctx);
|
| Ostream &Str = Ctx->getStrEmit();
|
| IceString MangledName = getContext()->mangleName(getFunctionName());
|
| emitTextHeader(MangledName);
|
| @@ -454,8 +457,9 @@ void Cfg::emitIAS() {
|
| TimerMarker T(TimerStack::TT_emit, this);
|
| assert(!Ctx->getFlags().DecorateAsm);
|
| IceString MangledName = getContext()->mangleName(getFunctionName());
|
| - if (!Ctx->getFlags().UseELFWriter)
|
| - emitTextHeader(MangledName);
|
| + // The emitIAS() routines emit into the internal assembler buffer,
|
| + // so there's no need to lock the streams until we're ready to call
|
| + // emitIASBytes().
|
| for (CfgNode *Node : Nodes)
|
| Node->emitIAS(this);
|
| // Now write the function to the file and track.
|
| @@ -464,6 +468,8 @@ void Cfg::emitIAS() {
|
| Ctx->getObjectWriter()->writeFunctionCode(MangledName, getInternal(),
|
| getAssembler<Assembler>());
|
| } else {
|
| + OstreamLocker L(Ctx);
|
| + emitTextHeader(MangledName);
|
| getAssembler<Assembler>()->emitIASBytes(Ctx);
|
| }
|
| }
|
| @@ -474,6 +480,7 @@ void Cfg::dump(const IceString &Message) {
|
| return;
|
| if (!Ctx->isVerbose())
|
| return;
|
| + OstreamLocker L(Ctx);
|
| Ostream &Str = Ctx->getStrDump();
|
| if (!Message.empty())
|
| Str << "================ " << Message << " ================\n";
|
|
|