Skip to content

Commit b1f567a

Browse files
Merge pull request #7305 from rastogishubham/EmitCASID
Added -fcas-emit-casid-file to emit a .casid file
2 parents ef7d808 + bd5fc55 commit b1f567a

File tree

12 files changed

+123
-48
lines changed

12 files changed

+123
-48
lines changed

clang/include/clang/Basic/CodeGenOptions.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,9 @@ ENUM_CODEGENOPT(ZeroCallUsedRegs, llvm::ZeroCallUsedRegs::ZeroCallUsedRegsKind,
516516
/// Whether to use CASID backend.
517517
CODEGENOPT(UseCASBackend, 1, 0)
518518

519+
/// Whether to emit a .casid File.
520+
CODEGENOPT(EmitCASIDFile, 1, 0)
521+
519522
/// The CASObjectFormat used when CAS output is used.
520523
ENUM_CODEGENOPT(CASObjMode, llvm::CASBackendMode,
521524
2, llvm::CASBackendMode::Native)

clang/include/clang/CodeGen/BackendUtil.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ namespace clang {
4848
const CASOptions &CASOpts, // MCCAS
4949
StringRef TDesc, llvm::Module *M, BackendAction Action,
5050
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS,
51-
std::unique_ptr<raw_pwrite_stream> OS);
51+
std::unique_ptr<raw_pwrite_stream> OS,
52+
std::unique_ptr<raw_pwrite_stream> CasidOS = nullptr);
5253

5354
void EmbedBitcode(llvm::Module *M, const CodeGenOptions &CGOpts,
5455
llvm::MemoryBufferRef Buf);

clang/include/clang/Driver/Options.td

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7855,6 +7855,11 @@ defm cas_backend : BoolFOption<"cas-backend",
78557855
PosFlag<SetTrue, [], [ClangOption], "Enable using CASBackend for object file output">,
78567856
NegFlag<SetFalse>>;
78577857

7858+
defm cas_emit_casid_file : BoolFOption<"cas-emit-casid-file",
7859+
CodeGenOpts<"EmitCASIDFile">, DefaultFalse,
7860+
PosFlag<SetTrue, [], [], "Emit .casid file next to object file when using cas backend">,
7861+
NegFlag<SetFalse>>;
7862+
78587863
def fcas_backend_mode : Joined<["-"], "fcas-backend-mode=">,
78597864
Group<f_Group>, MetaVarName<"<native|casid|verify>">,
78607865
HelpText<"CASBackendMode for output kind">,

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,8 @@ class EmitAssemblyHelper {
144144
///
145145
/// \return True on success.
146146
bool AddEmitPasses(legacy::PassManager &CodeGenPasses, BackendAction Action,
147-
raw_pwrite_stream &OS, raw_pwrite_stream *DwoOS);
147+
raw_pwrite_stream &OS, raw_pwrite_stream *DwoOS,
148+
raw_pwrite_stream *CasIDOS = nullptr);
148149

149150
std::unique_ptr<llvm::ToolOutputFile> openOutputFile(StringRef Path) {
150151
std::error_code EC;
@@ -163,7 +164,8 @@ class EmitAssemblyHelper {
163164
std::unique_ptr<llvm::ToolOutputFile> &ThinLinkOS);
164165
void RunCodegenPipeline(BackendAction Action,
165166
std::unique_ptr<raw_pwrite_stream> &OS,
166-
std::unique_ptr<llvm::ToolOutputFile> &DwoOS);
167+
std::unique_ptr<llvm::ToolOutputFile> &DwoOS,
168+
std::unique_ptr<raw_pwrite_stream> &CasIDOS);
167169

168170
/// Check whether we should emit a module summary for regular LTO.
169171
/// The module summary should be emitted by default for regular LTO
@@ -198,8 +200,8 @@ class EmitAssemblyHelper {
198200
std::unique_ptr<TargetMachine> TM;
199201

200202
// Emit output using the new pass manager for the optimization pipeline.
201-
void EmitAssembly(BackendAction Action,
202-
std::unique_ptr<raw_pwrite_stream> OS);
203+
void EmitAssembly(BackendAction Action, std::unique_ptr<raw_pwrite_stream> OS,
204+
std::unique_ptr<raw_pwrite_stream> CasIDOS = nullptr);
203205
};
204206
}
205207

@@ -590,7 +592,8 @@ void EmitAssemblyHelper::CreateTargetMachine(bool MustCreateTM) {
590592
bool EmitAssemblyHelper::AddEmitPasses(legacy::PassManager &CodeGenPasses,
591593
BackendAction Action,
592594
raw_pwrite_stream &OS,
593-
raw_pwrite_stream *DwoOS) {
595+
raw_pwrite_stream *DwoOS,
596+
raw_pwrite_stream *CasIDOS) {
594597
// Add LibraryInfo.
595598
std::unique_ptr<TargetLibraryInfoImpl> TLII(
596599
createTLII(TargetTriple, CodeGenOpts));
@@ -607,7 +610,8 @@ bool EmitAssemblyHelper::AddEmitPasses(legacy::PassManager &CodeGenPasses,
607610
CodeGenPasses.add(createObjCARCContractPass());
608611

609612
if (TM->addPassesToEmitFile(CodeGenPasses, OS, DwoOS, CGFT,
610-
/*DisableVerify=*/!CodeGenOpts.VerifyModule)) {
613+
/*DisableVerify=*/!CodeGenOpts.VerifyModule,
614+
nullptr, CasIDOS)) {
611615
Diags.Report(diag::err_fe_unable_to_interface_with_target);
612616
return false;
613617
}
@@ -1127,7 +1131,8 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
11271131

11281132
void EmitAssemblyHelper::RunCodegenPipeline(
11291133
BackendAction Action, std::unique_ptr<raw_pwrite_stream> &OS,
1130-
std::unique_ptr<llvm::ToolOutputFile> &DwoOS) {
1134+
std::unique_ptr<llvm::ToolOutputFile> &DwoOS,
1135+
std::unique_ptr<raw_pwrite_stream> &CasIDOS) {
11311136
// We still use the legacy PM to run the codegen pipeline since the new PM
11321137
// does not work with the codegen pipeline.
11331138
// FIXME: make the new PM work with the codegen pipeline.
@@ -1146,7 +1151,7 @@ void EmitAssemblyHelper::RunCodegenPipeline(
11461151
return;
11471152
}
11481153
if (!AddEmitPasses(CodeGenPasses, Action, *OS,
1149-
DwoOS ? &DwoOS->os() : nullptr))
1154+
DwoOS ? &DwoOS->os() : nullptr, CasIDOS.get()))
11501155
// FIXME: Should we handle this error differently?
11511156
return;
11521157
break;
@@ -1161,8 +1166,9 @@ void EmitAssemblyHelper::RunCodegenPipeline(
11611166
}
11621167
}
11631168

1164-
void EmitAssemblyHelper::EmitAssembly(BackendAction Action,
1165-
std::unique_ptr<raw_pwrite_stream> OS) {
1169+
void EmitAssemblyHelper::EmitAssembly(
1170+
BackendAction Action, std::unique_ptr<raw_pwrite_stream> OS,
1171+
std::unique_ptr<raw_pwrite_stream> CasIDOS) {
11661172
TimeRegion Region(CodeGenOpts.TimePasses ? &CodeGenerationTime : nullptr);
11671173
setCommandLineOpts(CodeGenOpts);
11681174

@@ -1179,7 +1185,7 @@ void EmitAssemblyHelper::EmitAssembly(BackendAction Action,
11791185

11801186
std::unique_ptr<llvm::ToolOutputFile> ThinLinkOS, DwoOS;
11811187
RunOptimizationPipeline(Action, OS, ThinLinkOS);
1182-
RunCodegenPipeline(Action, OS, DwoOS);
1188+
RunCodegenPipeline(Action, OS, DwoOS, CasIDOS);
11831189

11841190
if (ThinLinkOS)
11851191
ThinLinkOS->keep();
@@ -1302,7 +1308,8 @@ void clang::EmitBackendOutput(DiagnosticsEngine &Diags,
13021308
const CASOptions &CASOpts, // MCCAS
13031309
StringRef TDesc, Module *M, BackendAction Action,
13041310
IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS,
1305-
std::unique_ptr<raw_pwrite_stream> OS) {
1311+
std::unique_ptr<raw_pwrite_stream> OS,
1312+
std::unique_ptr<raw_pwrite_stream> CasIDOS) {
13061313

13071314
llvm::TimeTraceScope TimeScope("Backend");
13081315

@@ -1348,7 +1355,7 @@ void clang::EmitBackendOutput(DiagnosticsEngine &Diags,
13481355
EmitAssemblyHelper AsmHelper(Diags, HeaderOpts, CGOpts, TOpts, LOpts,
13491356
CASOpts, // MCCAS
13501357
M, VFS);
1351-
AsmHelper.EmitAssembly(Action, std::move(OS));
1358+
AsmHelper.EmitAssembly(Action, std::move(OS), std::move(CasIDOS));
13521359

13531360
// Verify clang's TargetInfo DataLayout against the LLVM TargetMachine's
13541361
// DataLayout.

clang/lib/CodeGen/CodeGenAction.cpp

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ namespace clang {
116116
const LangOptions &LangOpts;
117117
const CASOptions &CASOpts; // MCCAS
118118
std::unique_ptr<raw_pwrite_stream> AsmOutStream;
119+
std::unique_ptr<raw_pwrite_stream> CasIDStream;
119120
ASTContext *Context;
120121
IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS;
121122

@@ -160,11 +161,13 @@ namespace clang {
160161
const std::string &InFile,
161162
SmallVector<LinkModule, 4> LinkModules,
162163
std::unique_ptr<raw_pwrite_stream> OS, LLVMContext &C,
163-
CoverageSourceInfo *CoverageInfo = nullptr)
164+
CoverageSourceInfo *CoverageInfo = nullptr,
165+
std::unique_ptr<raw_pwrite_stream> CasIDOS = nullptr)
164166
: Diags(Diags), Action(Action), HeaderSearchOpts(HeaderSearchOpts),
165167
CodeGenOpts(CodeGenOpts), TargetOpts(TargetOpts), LangOpts(LangOpts),
166168
CASOpts(CASOpts), // MCCAS
167-
AsmOutStream(std::move(OS)), Context(nullptr), FS(VFS),
169+
AsmOutStream(std::move(OS)), CasIDStream(std::move(CasIDOS)),
170+
Context(nullptr), FS(VFS),
168171
LLVMIRGeneration("irgen", "LLVM IR Generation Time"),
169172
LLVMIRGenerationRefCount(0),
170173
Gen(CreateLLVMCodeGen(Diags, InFile, std::move(VFS), HeaderSearchOpts,
@@ -393,7 +396,8 @@ namespace clang {
393396
EmitBackendOutput(Diags, HeaderSearchOpts, CodeGenOpts, TargetOpts,
394397
LangOpts, CASOpts, // MCCAS
395398
C.getTargetInfo().getDataLayoutString(), getModule(),
396-
Action, FS, std::move(AsmOutStream));
399+
Action, FS, std::move(AsmOutStream),
400+
std::move(CasIDStream));
397401

398402
Ctx.setDiagnosticHandler(std::move(OldDiagnosticHandler));
399403

@@ -1079,8 +1083,20 @@ std::unique_ptr<ASTConsumer>
10791083
CodeGenAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) {
10801084
BackendAction BA = static_cast<BackendAction>(Act);
10811085
std::unique_ptr<raw_pwrite_stream> OS = CI.takeOutputStream();
1082-
if (!OS)
1086+
std::unique_ptr<raw_pwrite_stream> CasIDOS = nullptr;
1087+
if (!OS) {
10831088
OS = GetOutputStream(CI, InFile, BA);
1089+
auto OutputFile = StringRef(CI.getFrontendOpts().OutputFile);
1090+
if (CI.getCodeGenOpts().UseCASBackend &&
1091+
CI.getCodeGenOpts().EmitCASIDFile &&
1092+
CI.getCodeGenOpts().getCASObjMode() != llvm::CASBackendMode::CASID &&
1093+
BA == Backend_EmitObj && OutputFile != "-") {
1094+
std::string OutputPathCASIDFile = std::string(OutputFile);
1095+
OutputPathCASIDFile.append(".casid");
1096+
CasIDOS = CI.createOutputFile(OutputPathCASIDFile, true, true,
1097+
CI.getFrontendOpts().UseTemporary, false);
1098+
}
1099+
}
10841100

10851101
if (BA != Backend_EmitNothing && !OS)
10861102
return nullptr;
@@ -1101,7 +1117,8 @@ CodeGenAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) {
11011117
CI.getTargetOpts(), CI.getLangOpts(),
11021118
CI.getCASOpts(), // MCCAS
11031119
std::string(InFile), std::move(LinkModules), std::move(OS), *VMContext,
1104-
CoverageInfo));
1120+
CoverageInfo, std::move(CasIDOS)));
1121+
11051122
BEConsumer = Result.get();
11061123

11071124
// Enable generating macro debug info only when debug info is not disabled and

clang/test/CAS/cas-emit-casid.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// RUN: rm -rf %t && mkdir -p %t
2+
// RUN: %clang -c -Xclang -fcas-backend -Xclang -fcas-path -Xclang %t/cas -Xclang -fcas-backend-mode=native -Xclang -fcas-emit-casid-file %s -o %t/test.o
3+
// RUN: cat %t/test.o.casid | FileCheck %s --check-prefix=NATIVE_FILENAME
4+
// NATIVE_FILENAME: CASID:Jllvmcas://{{.*}}
5+
//
6+
// RUN: rm -rf %t && mkdir -p %t
7+
// RUN: %clang -c -Xclang -fcas-backend -Xclang -fcas-path -Xclang %t/cas -Xclang -fcas-backend-mode=verify -Xclang -fcas-emit-casid-file %s -o %t/test.o
8+
// RUN: cat %t/test.o.casid | FileCheck %s --check-prefix=VERIFY_FILENAME
9+
// VERIFY_FILENAME: CASID:Jllvmcas://{{.*}}
10+
//
11+
// RUN: rm -rf %t && mkdir -p %t
12+
// RUN: %clang -c -Xclang -fcas-backend -Xclang -fcas-path -Xclang %t/cas -Xclang -fcas-backend-mode=casid -Xclang -fcas-emit-casid-file %s -o %t/test.o
13+
// RUN: not cat %t/test.o.casid
14+
//
15+
// RUN: rm -rf %t && mkdir -p %t
16+
// RUN: %clang -c -Xclang -fcas-backend -Xclang -fcas-path -Xclang %t/cas -Xclang -fcas-backend-mode=native -Xclang -fcas-emit-casid-file %s -o -
17+
// RUN: not cat %t/test.o.casid
18+
//
19+
// RUN: rm -rf %t && mkdir -p %t
20+
// RUN: %clang -c -Xclang -fcas-backend -Xclang -fcas-path -Xclang %t/cas -Xclang -fcas-backend-mode=verify -Xclang -fcas-emit-casid-file %s -o -
21+
// RUN: not cat %t/test.o.casid
22+
//
23+
// RUN: rm -rf %t && mkdir -p %t
24+
// RUN: %clang -c -Xclang -fcas-backend -Xclang -fcas-path -Xclang %t/cas -Xclang -fcas-backend-mode=casid -Xclang -fcas-emit-casid-file %s -o -
25+
// RUN: not cat %t/test.o.casid
26+
27+
void test(void) {}
28+
29+
int test1(void) {
30+
return 0;
31+
}

llvm/include/llvm/MC/MCAsmBackend.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ class MCAsmBackend {
9090
const llvm::MCAsmLayout &, cas::ObjectStore &, raw_ostream *)>
9191
CreateFromMcAssembler,
9292
std::function<Error(cas::ObjectProxy, cas::ObjectStore &, raw_ostream &)>
93-
SerializeObjectFile) const;
93+
SerializeObjectFile,
94+
raw_pwrite_stream *CasIDOS = nullptr) const;
9495
// END MCCAS
9596

9697

llvm/include/llvm/MC/MCMachOCASWriter.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ class MachOCASWriter : public MCObjectWriter {
5252
CreateFromMcAssembler,
5353
std::function<Error(cas::ObjectProxy, cas::ObjectStore &, raw_ostream &)>
5454
SerializeObjectFile,
55-
std::optional<MCTargetOptions::ResultCallBackTy> CallBack);
55+
std::optional<MCTargetOptions::ResultCallBackTy> CallBack,
56+
raw_pwrite_stream *CasIDOS = nullptr);
5657

5758
void recordRelocation(MCAssembler &Asm, const MCAsmLayout &Layout,
5859
const MCFragment *Fragment, const MCFixup &Fixup,
@@ -122,6 +123,7 @@ class MachOCASWriter : public MCObjectWriter {
122123

123124
private:
124125
raw_pwrite_stream &OS;
126+
raw_pwrite_stream *CasIDOS;
125127

126128
SmallString<512> InternalBuffer;
127129
raw_svector_ostream InternalOS;
@@ -157,7 +159,8 @@ std::unique_ptr<MCObjectWriter> createMachOCASWriter(
157159
CreateFromMcAssembler,
158160
std::function<Error(cas::ObjectProxy, cas::ObjectStore &, raw_ostream &)>
159161
SerializeObjectFile,
160-
std::optional<MCTargetOptions::ResultCallBackTy> CallBack = std::nullopt);
162+
std::optional<MCTargetOptions::ResultCallBackTy> CallBack = std::nullopt,
163+
raw_pwrite_stream *CasIDOS = nullptr);
161164

162165
} // end namespace llvm
163166

llvm/include/llvm/Target/TargetMachine.h

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,8 @@ class TargetMachine {
377377
addPassesToEmitFile(PassManagerBase &, raw_pwrite_stream &,
378378
raw_pwrite_stream *, CodeGenFileType,
379379
bool /*DisableVerify*/ = true,
380-
MachineModuleInfoWrapperPass *MMIWP = nullptr) {
380+
MachineModuleInfoWrapperPass *MMIWP = nullptr,
381+
raw_pwrite_stream *CasIDOS = nullptr) {
381382
return true;
382383
}
383384

@@ -443,11 +444,11 @@ class LLVMTargetMachine : public TargetMachine {
443444
/// emitted. Typically this will involve several steps of code generation.
444445
/// \p MMIWP is an optional parameter that, if set to non-nullptr,
445446
/// will be used to set the MachineModuloInfo for this PM.
446-
bool
447-
addPassesToEmitFile(PassManagerBase &PM, raw_pwrite_stream &Out,
448-
raw_pwrite_stream *DwoOut, CodeGenFileType FileType,
449-
bool DisableVerify = true,
450-
MachineModuleInfoWrapperPass *MMIWP = nullptr) override;
447+
bool addPassesToEmitFile(PassManagerBase &PM, raw_pwrite_stream &Out,
448+
raw_pwrite_stream *DwoOut, CodeGenFileType FileType,
449+
bool DisableVerify = true,
450+
MachineModuleInfoWrapperPass *MMIWP = nullptr,
451+
raw_pwrite_stream *CasIDOS = nullptr) override;
451452

452453
virtual Error buildCodeGenPipeline(ModulePassManager &,
453454
MachineFunctionPassManager &,
@@ -482,11 +483,12 @@ class LLVMTargetMachine : public TargetMachine {
482483
/// machine code from the MI representation.
483484
bool addAsmPrinter(PassManagerBase &PM, raw_pwrite_stream &Out,
484485
raw_pwrite_stream *DwoOut, CodeGenFileType FileType,
485-
MCContext &Context);
486+
MCContext &Context, raw_pwrite_stream *CasIDOS = nullptr);
486487

487488
Expected<std::unique_ptr<MCStreamer>>
488489
createMCStreamer(raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut,
489-
CodeGenFileType FileType, MCContext &Ctx);
490+
CodeGenFileType FileType, MCContext &Ctx,
491+
raw_pwrite_stream *CasIDOS = nullptr);
490492

491493
/// True if the target uses physical regs (as nearly all targets do). False
492494
/// for stack machines such as WebAssembly and other virtual-register

llvm/lib/CodeGen/LLVMTargetMachine.cpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -124,13 +124,11 @@ addPassesToGenerateCode(LLVMTargetMachine &TM, PassManagerBase &PM,
124124
return PassConfig;
125125
}
126126

127-
bool LLVMTargetMachine::addAsmPrinter(PassManagerBase &PM,
128-
raw_pwrite_stream &Out,
129-
raw_pwrite_stream *DwoOut,
130-
CodeGenFileType FileType,
131-
MCContext &Context) {
127+
bool LLVMTargetMachine::addAsmPrinter(
128+
PassManagerBase &PM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut,
129+
CodeGenFileType FileType, MCContext &Context, raw_pwrite_stream *CasIDOS) {
132130
Expected<std::unique_ptr<MCStreamer>> MCStreamerOrErr =
133-
createMCStreamer(Out, DwoOut, FileType, Context);
131+
createMCStreamer(Out, DwoOut, FileType, Context, CasIDOS);
134132
if (auto Err = MCStreamerOrErr.takeError())
135133
return true;
136134

@@ -146,7 +144,7 @@ bool LLVMTargetMachine::addAsmPrinter(PassManagerBase &PM,
146144

147145
Expected<std::unique_ptr<MCStreamer>> LLVMTargetMachine::createMCStreamer(
148146
raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType,
149-
MCContext &Context) {
147+
MCContext &Context, raw_pwrite_stream *CasIDOS) {
150148
if (Options.MCOptions.MCSaveTempLabels)
151149
Context.setAllowTemporaryLabels(false);
152150

@@ -228,7 +226,7 @@ Expected<std::unique_ptr<MCStreamer>> LLVMTargetMachine::createMCStreamer(
228226
CASBackendWriter = MAB->createCASObjectWriter(
229227
Out, getTargetTriple(), *Options.MCOptions.CAS, Options.MCOptions,
230228
Options.MCOptions.CASObjMode, CreateFromMcAssembler,
231-
SerializeObjectFile);
229+
SerializeObjectFile, CasIDOS);
232230
}
233231
// END MCCAS
234232
AsmStreamer.reset(getTarget().createMCObjectStreamer(
@@ -254,7 +252,7 @@ Expected<std::unique_ptr<MCStreamer>> LLVMTargetMachine::createMCStreamer(
254252
bool LLVMTargetMachine::addPassesToEmitFile(
255253
PassManagerBase &PM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut,
256254
CodeGenFileType FileType, bool DisableVerify,
257-
MachineModuleInfoWrapperPass *MMIWP) {
255+
MachineModuleInfoWrapperPass *MMIWP, raw_pwrite_stream *CasIDOS) {
258256
// Add common CodeGen passes.
259257
if (!MMIWP)
260258
MMIWP = new MachineModuleInfoWrapperPass(this);
@@ -264,7 +262,8 @@ bool LLVMTargetMachine::addPassesToEmitFile(
264262
return true;
265263

266264
if (TargetPassConfig::willCompleteCodeGenPipeline()) {
267-
if (addAsmPrinter(PM, Out, DwoOut, FileType, MMIWP->getMMI().getContext()))
265+
if (addAsmPrinter(PM, Out, DwoOut, FileType, MMIWP->getMMI().getContext(),
266+
CasIDOS))
268267
return true;
269268
} else {
270269
// MIR printing is redundant with -filetype=null.

0 commit comments

Comments
 (0)