Skip to content

Commit 5c8a95f

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.
1 parent 80f052e commit 5c8a95f

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>
@@ -216,16 +218,26 @@ int sil_llvm_gen_main(ArrayRef<const char *> argv, void *MainAddr) {
216218
return IRGenDescriptor::forWholeModule(
217219
mod, Opts, TBDOpts, SILOpts, SILTypes,
218220
/*SILMod*/ nullptr, moduleName, PSPs);
219-
} else {
220-
return IRGenDescriptor::forFile(
221-
mod->getFiles()[0], Opts, TBDOpts, SILOpts, SILTypes,
222-
/*SILMod*/ nullptr, moduleName, PSPs, /*discriminator*/ "");
223221
}
222+
223+
return IRGenDescriptor::forFile(
224+
mod->getFiles()[0], Opts, TBDOpts, SILOpts, SILTypes,
225+
/*SILMod*/ nullptr, moduleName, PSPs, /*discriminator*/ "");
224226
};
225227

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