Skip to content

Commit 6a8009d

Browse files
committed
Merge branch 'sotoc-issue-25' into 'aurora_offloading_prototype'
Remove the use of Rewriter in code generation Closes llvm#25 See merge request NEC-RWTH-Projects/clang!20
2 parents cbc5483 + dd2f3d7 commit 6a8009d

File tree

2 files changed

+10
-25
lines changed

2 files changed

+10
-25
lines changed

clang/tools/sotoc/src/TargetCode.cpp

+8-23
Original file line numberDiff line numberDiff line change
@@ -74,21 +74,15 @@ void TargetCode::generateCode(llvm::raw_ostream &Out) {
7474
std::shared_ptr<TargetCodeFragment> Frag = *i;
7575
auto *TCR = llvm::dyn_cast<TargetCodeRegion>(Frag.get());
7676

77-
auto PrettyCode = Frag->PrintPretty();
78-
79-
// This is a workaround, since "Decl::print" includes "pragma omp declare".
80-
if (PrettyCode != "")
81-
TargetCodeRewriter.ReplaceText(Frag->getSpellingRange(), PrettyCode);
82-
8377
if (TCR) {
84-
generateFunctionPrologue(TCR);
78+
generateFunctionPrologue(TCR, Out);
8579
}
80+
81+
Out << Frag->PrintPretty();
8682

8783
if (TCR) {
88-
generateFunctionEpilogue(TCR);
84+
generateFunctionEpilogue(TCR, Out);
8985
}
90-
Out << "\n";
91-
Out << TargetCodeRewriter.getRewrittenText(Frag->getSpellingRange());
9286

9387
if (Frag->NeedsSemicolon) {
9488
Out << ";";
@@ -97,12 +91,10 @@ void TargetCode::generateCode(llvm::raw_ostream &Out) {
9791
}
9892
}
9993

100-
void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR) {
94+
void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR,
95+
llvm::raw_ostream &Out) {
10196

10297
std::string Prologue;
103-
llvm::raw_string_ostream Out(Prologue);
104-
105-
auto tmpSL = TCR->getStartLoc();
10698

10799
std::list<int> nDim;
108100
std::list<std::string> DimString;
@@ -204,15 +196,10 @@ void TargetCode::generateFunctionPrologue(TargetCodeRegion *TCR) {
204196
}
205197
}
206198
Out << "\n";
207-
208-
if (TargetCodeRewriter.InsertTextBefore(tmpSL, Out.str()) == true)
209-
llvm::errs() << "ERROR: Prologue was not written\n";
210199
}
211200

212-
void TargetCode::generateFunctionEpilogue(TargetCodeRegion *TCR) {
213-
std::stringstream Out;
214-
auto tmpSL = TCR->getEndLoc();
215-
201+
void TargetCode::generateFunctionEpilogue(TargetCodeRegion *TCR,
202+
llvm::raw_ostream &Out) {
216203
if (OmpPragma(TCR).needsStructuredBlock()) {
217204
Out << "\n}";
218205
}
@@ -244,8 +231,6 @@ void TargetCode::generateFunctionEpilogue(TargetCodeRegion *TCR) {
244231
}
245232

246233
Out << "\n}\n";
247-
if (TargetCodeRewriter.InsertTextBefore(tmpSL, Out.str()) == true)
248-
llvm::errs() << "ERROR: Epilogue was not written\n";
249234
}
250235

251236
std::string TargetCode::generateFunctionName(TargetCodeRegion *TCR) {

clang/tools/sotoc/src/TargetCode.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@ class TargetCode {
6767
/// Generates a function prologue for a target region.
6868
/// This prologue consists of a function declaration and code to copy local
6969
/// variables into scope.
70-
void generateFunctionPrologue(TargetCodeRegion *TCR);
70+
void generateFunctionPrologue(TargetCodeRegion *TCR, llvm::raw_ostream &Out);
7171
/// Generates a function epilogue for a target region.
7272
/// This prologue consists of a code to copy variables from the local scope
7373
/// back.
74-
void generateFunctionEpilogue(TargetCodeRegion *TCR);
74+
void generateFunctionEpilogue(TargetCodeRegion *TCR, llvm::raw_ostream &Out);
7575
/// Generate a function name for a target region.
7676
std::string generateFunctionName(TargetCodeRegion *TCR);
7777

0 commit comments

Comments
 (0)