File tree Expand file tree Collapse file tree 5 files changed +29
-7
lines changed Expand file tree Collapse file tree 5 files changed +29
-7
lines changed Original file line number Diff line number Diff line change @@ -523,9 +523,7 @@ class SILModule {
523
523
swift::SILRemarkStreamer *getSILRemarkStreamer () {
524
524
return silRemarkStreamer.get ();
525
525
}
526
- std::unique_ptr<swift::SILRemarkStreamer> takeSILRemarkStreamer () {
527
- return std::move (silRemarkStreamer);
528
- }
526
+
529
527
void installSILRemarkStreamer ();
530
528
531
529
// This is currently limited to VarDecl because the visibility of global
Original file line number Diff line number Diff line change @@ -26,10 +26,19 @@ namespace swift {
26
26
27
27
class SILRemarkStreamer {
28
28
private:
29
+ enum class Owner {
30
+ SILModule,
31
+ LLVM,
32
+ } owner;
33
+
29
34
// / The underlying LLVM streamer.
30
35
// /
31
36
// / If owned by a SILModule, this will be non-null.
32
37
std::unique_ptr<llvm::remarks::RemarkStreamer> streamer;
38
+ // / The owning LLVM context.
39
+ // /
40
+ // / If owned by LLVM, this will be non-null.
41
+ llvm::LLVMContext *context;
33
42
34
43
// / The remark output stream used to record SIL remarks to a file.
35
44
std::unique_ptr<llvm::raw_fd_ostream> remarkStream;
Original file line number Diff line number Diff line change @@ -911,8 +911,8 @@ static void initLLVMModule(const IRGenModule &IGM, SILModule &SIL) {
911
911
" standard-library" ),
912
912
llvm::ConstantAsMetadata::get (Value)}));
913
913
914
- if (auto streamer = SIL.takeSILRemarkStreamer ()) {
915
- std::move ( streamer) ->intoLLVMContext (Module->getContext ());
914
+ if (auto * streamer = SIL.getSILRemarkStreamer ()) {
915
+ streamer->intoLLVMContext (Module->getContext ());
916
916
}
917
917
}
918
918
Original file line number Diff line number Diff line change @@ -19,20 +19,35 @@ using namespace swift;
19
19
SILRemarkStreamer::SILRemarkStreamer (
20
20
std::unique_ptr<llvm::remarks::RemarkStreamer> &&streamer,
21
21
std::unique_ptr<llvm::raw_fd_ostream> &&stream, const ASTContext &Ctx)
22
- : streamer(std::move(streamer)),
22
+ : owner(Owner::SILModule), streamer(std::move(streamer)), context( nullptr ),
23
23
remarkStream(std::move(stream)), ctx(Ctx) { }
24
24
25
25
llvm::remarks::RemarkStreamer &SILRemarkStreamer::getLLVMStreamer () {
26
+ switch (owner) {
27
+ case Owner::SILModule:
28
+ return *streamer.get ();
29
+ case Owner::LLVM:
30
+ return *context->getMainRemarkStreamer ();
31
+ }
26
32
return *streamer.get ();
27
33
}
28
34
29
35
const llvm::remarks::RemarkStreamer &
30
36
SILRemarkStreamer::getLLVMStreamer () const {
37
+ switch (owner) {
38
+ case Owner::SILModule:
39
+ return *streamer.get ();
40
+ case Owner::LLVM:
41
+ return *context->getMainRemarkStreamer ();
42
+ }
31
43
return *streamer.get ();
32
44
}
33
45
34
46
void SILRemarkStreamer::intoLLVMContext (llvm::LLVMContext &Ctx) & {
47
+ assert (owner == Owner::SILModule);
35
48
Ctx.setMainRemarkStreamer (std::move (streamer));
49
+ context = &Ctx;
50
+ owner = Owner::LLVM;
36
51
}
37
52
38
53
std::unique_ptr<SILRemarkStreamer>
Original file line number Diff line number Diff line change @@ -461,7 +461,7 @@ int main(int argc, char **argv) {
461
461
if (CI.getSILModule ())
462
462
CI.getSILModule ()->setSerializeSILAction ([]{});
463
463
464
- if (RemarksFilename != " " ) {
464
+ if (!RemarksFilename. empty () ) {
465
465
llvm::Expected<llvm::remarks::Format> formatOrErr =
466
466
llvm::remarks::parseFormat (RemarksFormat);
467
467
if (llvm::Error E = formatOrErr.takeError ()) {
You can’t perform that action at this time.
0 commit comments