Skip to content

Commit 3309e50

Browse files
jmmartinezkzhuravl
authored andcommitted
[NFC][Comgr][Cache] Expose helper functions
1 parent 8541fb1 commit 3309e50

File tree

2 files changed

+58
-34
lines changed

2 files changed

+58
-34
lines changed

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

Lines changed: 51 additions & 34 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,6 +171,41 @@ 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
CachedCommand::CachedCommand(driver::Command &Command,
174210
DiagnosticOptions &DiagOpts,
175211
ExecuteFnTy &&ExecuteImpl)
@@ -249,35 +285,16 @@ bool CachedCommand::canCache() const {
249285

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

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

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

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

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

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

0 commit comments

Comments
 (0)