diff --git a/clang/tools/sotoc/src/TargetCode.cpp b/clang/tools/sotoc/src/TargetCode.cpp index b9430750b58e4..28978926065db 100644 --- a/clang/tools/sotoc/src/TargetCode.cpp +++ b/clang/tools/sotoc/src/TargetCode.cpp @@ -74,21 +74,15 @@ void TargetCode::generateCode(llvm::raw_ostream &Out) { std::shared_ptr Frag = *i; auto *TCR = llvm::dyn_cast(Frag.get()); - auto PrettyCode = Frag->PrintPretty(); - - // This is a workaround, since "Decl::print" includes "pragma omp declare". - if (PrettyCode != "") - TargetCodeRewriter.ReplaceText(Frag->getSpellingRange(), PrettyCode); - if (TCR) { - generateFunctionPrologue(TCR); + generateFunctionPrologue(TCR, Out); } + + Out << Frag->PrintPretty(); if (TCR) { - generateFunctionEpilogue(TCR); + generateFunctionEpilogue(TCR, Out); } - Out << "\n"; - Out << TargetCodeRewriter.getRewrittenText(Frag->getSpellingRange()); if (Frag->NeedsSemicolon) { Out << ";"; @@ -97,12 +91,10 @@ void TargetCode::generateCode(llvm::raw_ostream &Out) { } } -void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR) { +void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR, + llvm::raw_ostream &Out) { std::string Prologue; - llvm::raw_string_ostream Out(Prologue); - - auto tmpSL = TCR->getStartLoc(); std::list nDim; std::list DimString; @@ -204,15 +196,10 @@ void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR) { } } Out << "\n"; - - if (TargetCodeRewriter.InsertTextBefore(tmpSL, Out.str()) == true) - llvm::errs() << "ERROR: Prologue was not written\n"; } -void TargetCode::generateFunctionEpilogue(TargetCodeRegion *TCR) { - std::stringstream Out; - auto tmpSL = TCR->getEndLoc(); - +void TargetCode::generateFunctionEpilogue(TargetCodeRegion *TCR, + llvm::raw_ostream &Out) { if (OmpPragma(TCR).needsStructuredBlock()) { Out << "\n}"; } @@ -244,8 +231,6 @@ void TargetCode::generateFunctionEpilogue(TargetCodeRegion *TCR) { } Out << "\n}\n"; - if (TargetCodeRewriter.InsertTextBefore(tmpSL, Out.str()) == true) - llvm::errs() << "ERROR: Epilogue was not written\n"; } std::string TargetCode::generateFunctionName(TargetCodeRegion *TCR) { diff --git a/clang/tools/sotoc/src/TargetCode.h b/clang/tools/sotoc/src/TargetCode.h index 6c597f4703bfa..1f7552f941e7d 100644 --- a/clang/tools/sotoc/src/TargetCode.h +++ b/clang/tools/sotoc/src/TargetCode.h @@ -67,11 +67,11 @@ class TargetCode { /// Generates a function prologue for a target region. /// This prologue consists of a function declaration and code to copy local /// variables into scope. - void generateFunctionPrologue(TargetCodeRegion *TCR); + void generateFunctionPrologue(TargetCodeRegion *TCR, llvm::raw_ostream &Out); /// Generates a function epilogue for a target region. /// This prologue consists of a code to copy variables from the local scope /// back. - void generateFunctionEpilogue(TargetCodeRegion *TCR); + void generateFunctionEpilogue(TargetCodeRegion *TCR, llvm::raw_ostream &Out); /// Generate a function name for a target region. std::string generateFunctionName(TargetCodeRegion *TCR);