Skip to content

Commit 8247f59

Browse files
committed
[NFC][Comgr][Cache] Expose helper functions
Change-Id: I0b4d065936e233aca97fd067156608f4f3b9e75b
1 parent 0af654e commit 8247f59

File tree

2 files changed

+61
-37
lines changed

2 files changed

+61
-37
lines changed

amd/comgr/src/comgr-cache-command.cpp

Lines changed: 54 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,6 @@ bool hasDebugOrProfileInfo(ArrayRef<const char *> Args) {
6868
return false;
6969
}
7070

71-
void addString(CachedCommandAdaptor::HashAlgorithm &H, StringRef S) {
72-
// hash size + contents to avoid collisions
73-
// for example, we have to ensure that the result of hashing "AA" "BB" is
74-
// different from "A" "ABB"
75-
H.update(S.size());
76-
H.update(S);
77-
}
78-
7971
Error addFile(CachedCommandAdaptor::HashAlgorithm &H, StringRef Path) {
8072
auto BufOrError = MemoryBuffer::getFile(Path);
8173
if (std::error_code EC = BufOrError.getError()) {
@@ -151,6 +143,15 @@ void CachedCommandAdaptor::addFileContents(
151143
}
152144
}
153145

146+
void CachedCommandAdaptor::addString(CachedCommandAdaptor::HashAlgorithm &H,
147+
StringRef S) {
148+
// hash size + contents to avoid collisions
149+
// for example, we have to ensure that the result of hashing "AA" "BB" is
150+
// different from "A" "ABB"
151+
H.update(S.size());
152+
H.update(S);
153+
}
154+
154155
Expected<CachedCommandAdaptor::Identifier>
155156
CachedCommandAdaptor::getIdentifier() const {
156157
CachedCommandAdaptor::HashAlgorithm H;
@@ -170,10 +171,45 @@ CachedCommandAdaptor::getIdentifier() const {
170171
return Id;
171172
}
172173

174+
llvm::Error
175+
CachedCommandAdaptor::writeUniqueExecuteOutput(StringRef OutputFilename,
176+
StringRef CachedBuffer) {
177+
std::error_code EC;
178+
raw_fd_ostream Out(OutputFilename, EC);
179+
if (EC) {
180+
Error E = createStringError(EC, Twine("Failed to open ") + OutputFilename +
181+
" : " + EC.message() + "\n");
182+
return E;
183+
}
184+
185+
Out.write(CachedBuffer.data(), CachedBuffer.size());
186+
Out.close();
187+
if (Out.has_error()) {
188+
Error E = createStringError(EC, Twine("Failed to write ") + OutputFilename +
189+
" : " + EC.message() + "\n");
190+
return E;
191+
}
192+
193+
return Error::success();
194+
}
195+
196+
Expected<std::unique_ptr<MemoryBuffer>>
197+
CachedCommandAdaptor::readUniqueExecuteOutput(StringRef OutputFilename) {
198+
ErrorOr<std::unique_ptr<MemoryBuffer>> MBOrErr =
199+
MemoryBuffer::getFile(OutputFilename);
200+
if (!MBOrErr) {
201+
std::error_code EC = MBOrErr.getError();
202+
return createStringError(EC, Twine("Failed to open ") + OutputFilename +
203+
" : " + EC.message() + "\n");
204+
}
205+
206+
return std::move(*MBOrErr);
207+
}
208+
173209
ClangCommand::ClangCommand(driver::Command &Command,
174-
DiagnosticOptions &DiagOpts,
175-
llvm::vfs::FileSystem &VFS,
176-
ExecuteFnTy &&ExecuteImpl)
210+
DiagnosticOptions &DiagOpts,
211+
llvm::vfs::FileSystem &VFS,
212+
ExecuteFnTy &&ExecuteImpl)
177213
: Command(Command), DiagOpts(DiagOpts), VFS(VFS),
178214
ExecuteImpl(std::move(ExecuteImpl)) {}
179215

@@ -250,35 +286,16 @@ bool ClangCommand::canCache() const {
250286

251287
Error ClangCommand::writeExecuteOutput(StringRef CachedBuffer) {
252288
StringRef OutputFilename = Command.getOutputFilenames().front();
253-
std::error_code EC;
254-
raw_fd_ostream Out(OutputFilename, EC);
255-
if (EC) {
256-
Error E = createStringError(EC, Twine("Failed to open ") + OutputFilename +
257-
" : " + EC.message() + "\n");
258-
return E;
259-
}
260-
261-
Out.write(CachedBuffer.data(), CachedBuffer.size());
262-
Out.close();
263-
if (Out.has_error()) {
264-
Error E = createStringError(EC, Twine("Failed to write ") + OutputFilename +
265-
" : " + EC.message() + "\n");
266-
return E;
267-
}
268-
269-
return Error::success();
289+
return CachedCommandAdaptor::writeUniqueExecuteOutput(OutputFilename,
290+
CachedBuffer);
270291
}
271292

272293
Expected<StringRef> ClangCommand::readExecuteOutput() {
273-
StringRef OutputFilename = Command.getOutputFilenames().front();
274-
ErrorOr<std::unique_ptr<MemoryBuffer>> MBOrErr =
275-
MemoryBuffer::getFile(OutputFilename);
276-
if (!MBOrErr) {
277-
std::error_code EC = MBOrErr.getError();
278-
return createStringError(EC, Twine("Failed to open ") + OutputFilename +
279-
" : " + EC.message() + "\n");
280-
}
281-
Output = std::move(*MBOrErr);
294+
auto MaybeBuffer = CachedCommandAdaptor::readUniqueExecuteOutput(
295+
Command.getOutputFilenames().front());
296+
if (!MaybeBuffer)
297+
return MaybeBuffer.takeError();
298+
Output = std::move(*MaybeBuffer);
282299
return Output->getBuffer();
283300
}
284301

amd/comgr/src/comgr-cache-command.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,13 @@ class CachedCommandAdaptor {
7373

7474
// helper to work around the comgr-xxxxx string appearing in files
7575
static void addFileContents(HashAlgorithm &H, llvm::StringRef Buf);
76+
static void addString(HashAlgorithm &H, llvm::StringRef Buf);
77+
78+
// helper since several command types just write to a single output file
79+
static llvm::Error writeUniqueExecuteOutput(llvm::StringRef OutputFilename,
80+
llvm::StringRef CachedBuffer);
81+
static llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>>
82+
readUniqueExecuteOutput(llvm::StringRef OutputFilename);
7683

7784
protected:
7885
virtual ActionClass getClass() const = 0;

0 commit comments

Comments
 (0)