Skip to content

Commit d7e41d2

Browse files
committed
[sil-llvm-gen] Add support for emitting IR before LLVM optimizations run.
Specifically, I renamed the old llvm-as which printed with optimization as llvm-as-opt and made llvm-as just test IRGen. That is really the true reason that I created this utility many years ago: to test how IRGen lowers specific SIL instruction sequences. How LLVM optimizes such sequences once lowered is a different problem. I updated the one test that used sil-llvm-gen and required optimizations to use llvm-as-opt so that the tests output did not change. (cherry picked from commit 5c8a95f)
1 parent 605437a commit d7e41d2

File tree

2 files changed

+33
-21
lines changed

2 files changed

+33
-21
lines changed

lib/DriverTool/sil_llvm_gen_main.cpp

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -96,17 +96,19 @@ struct SILLLVMGenOptions {
9696
llvm::cl::opt<bool>
9797
PerformWMO = llvm::cl::opt<bool>("wmo", llvm::cl::desc("Enable whole-module optimizations"));
9898

99-
llvm::cl::opt<IRGenOutputKind>
100-
OutputKind = llvm::cl::opt<IRGenOutputKind>(
99+
llvm::cl::opt<IRGenOutputKind> OutputKind = llvm::cl::opt<IRGenOutputKind>(
101100
"output-kind", llvm::cl::desc("Type of output to produce"),
102-
llvm::cl::values(clEnumValN(IRGenOutputKind::LLVMAssemblyAfterOptimization,
103-
"llvm-as", "Emit llvm assembly"),
104-
clEnumValN(IRGenOutputKind::LLVMBitcode, "llvm-bc",
105-
"Emit llvm bitcode"),
106-
clEnumValN(IRGenOutputKind::NativeAssembly, "as",
107-
"Emit native assembly"),
108-
clEnumValN(IRGenOutputKind::ObjectFile, "object",
109-
"Emit an object file")),
101+
llvm::cl::values(
102+
clEnumValN(IRGenOutputKind::LLVMAssemblyBeforeOptimization, "llvm-as",
103+
"Emit llvm assembly before optimization"),
104+
clEnumValN(IRGenOutputKind::LLVMAssemblyAfterOptimization,
105+
"llvm-as-opt", "Emit llvm assembly after optimization"),
106+
clEnumValN(IRGenOutputKind::LLVMBitcode, "llvm-bc",
107+
"Emit llvm bitcode"),
108+
clEnumValN(IRGenOutputKind::NativeAssembly, "as",
109+
"Emit native assembly"),
110+
clEnumValN(IRGenOutputKind::ObjectFile, "object",
111+
"Emit an object file")),
110112
llvm::cl::init(IRGenOutputKind::ObjectFile));
111113

112114
llvm::cl::opt<bool>
@@ -217,16 +219,26 @@ int sil_llvm_gen_main(ArrayRef<const char *> argv, void *MainAddr) {
217219
return IRGenDescriptor::forWholeModule(
218220
mod, Opts, TBDOpts, SILOpts, SILTypes,
219221
/*SILMod*/ nullptr, moduleName, PSPs);
220-
} else {
221-
return IRGenDescriptor::forFile(
222-
mod->getFiles()[0], Opts, TBDOpts, SILOpts, SILTypes,
223-
/*SILMod*/ nullptr, moduleName, PSPs, /*discriminator*/ "");
224222
}
223+
224+
return IRGenDescriptor::forFile(
225+
mod->getFiles()[0], Opts, TBDOpts, SILOpts, SILTypes,
226+
/*SILMod*/ nullptr, moduleName, PSPs, /*discriminator*/ "");
225227
};
226228

227229
auto &eval = CI.getASTContext().evaluator;
228230
auto desc = getDescriptor();
229231
desc.out = &outFile->getOS();
232+
233+
if (options.OutputKind == IRGenOutputKind::LLVMAssemblyBeforeOptimization) {
234+
auto generatedMod = evaluateOrFatal(eval, IRGenRequest{desc});
235+
if (!generatedMod)
236+
return 1;
237+
238+
generatedMod.getModule()->print(*outFile, nullptr);
239+
return 0;
240+
}
241+
230242
auto generatedMod = evaluateOrFatal(eval, OptimizedIRRequest{desc});
231243
if (!generatedMod)
232244
return 1;

test/sil-llvm-gen/alloc.sil

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
// RUN: %sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as -target x86_64-apple-macosx10.9 -module-name main %s -o - | %FileCheck %s
2-
// RUN: %sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as -target i386-apple-ios7.0 %s -module-name main -o - | %FileCheck %s
3-
// RUN: %sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as -target x86_64-apple-ios7.0 %s -module-name main -o - | %FileCheck %s
4-
// RUN: %sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as -target armv7-apple-ios7.0 %s -module-name main -o - | %FileCheck %s
5-
// RUN: %sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as -target arm64-apple-ios7.0 %s -module-name main -o - | %FileCheck %s
6-
// RUN: %sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as -target x86_64-unknown-linux-gnu %s -module-name main -o - | %FileCheck %s
1+
// RUN: %sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as-opt -target x86_64-apple-macosx10.9 -module-name main %s -o - | %FileCheck %s
2+
// RUN: %sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as-opt -target i386-apple-ios7.0 %s -module-name main -o - | %FileCheck %s
3+
// RUN: %sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as-opt -target x86_64-apple-ios7.0 %s -module-name main -o - | %FileCheck %s
4+
// RUN: %sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as-opt -target armv7-apple-ios7.0 %s -module-name main -o - | %FileCheck %s
5+
// RUN: %sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as-opt -target arm64-apple-ios7.0 %s -module-name main -o - | %FileCheck %s
6+
// RUN: %sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as-opt -target x86_64-unknown-linux-gnu %s -module-name main -o - | %FileCheck %s
77

88
// Use this testfile to check if the `swift-frontend -sil-llvm-gen` option works.
9-
// RUN: %swift_frontend_plain -sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as -target x86_64-apple-macosx10.9 -module-name main %s -o - | %FileCheck %s
9+
// RUN: %swift_frontend_plain -sil-llvm-gen -disable-legacy-type-info -output-kind=llvm-as-opt -target x86_64-apple-macosx10.9 -module-name main %s -o - | %FileCheck %s
1010

1111
// REQUIRES: CODEGENERATOR=X86
1212
// REQUIRES: CODEGENERATOR=ARM

0 commit comments

Comments
 (0)