mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-24 23:19:03 +00:00
llc: Add a 'run-pass' option.
This commit adds a 'run-pass' option to llc, which instructs the compiler to run one specific code generation pass only. Llc already has the 'start-after' and the 'stop-after' options, and this new option complements the other two by making it easier to write tests that want to invoke a single pass only. Reviewers: Duncan P. N. Exon Smith Differential Revision: http://reviews.llvm.org/D10776 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241476 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -333,29 +333,44 @@ static int compileModule(char **argv, LLVMContext &Context) {
|
||||
OS = BOS.get();
|
||||
}
|
||||
|
||||
AnalysisID StartBeforeID = nullptr;
|
||||
AnalysisID StartAfterID = nullptr;
|
||||
AnalysisID StopAfterID = nullptr;
|
||||
const PassRegistry *PR = PassRegistry::getPassRegistry();
|
||||
if (!StartAfter.empty()) {
|
||||
const PassInfo *PI = PR->getPassInfo(StartAfter);
|
||||
if (!PI) {
|
||||
errs() << argv[0] << ": start-after pass is not registered.\n";
|
||||
if (!RunPass.empty()) {
|
||||
if (!StartAfter.empty() || !StopAfter.empty()) {
|
||||
errs() << argv[0] << ": start-after and/or stop-after passes are "
|
||||
"redundant when run-pass is specified.\n";
|
||||
return 1;
|
||||
}
|
||||
StartAfterID = PI->getTypeInfo();
|
||||
}
|
||||
if (!StopAfter.empty()) {
|
||||
const PassInfo *PI = PR->getPassInfo(StopAfter);
|
||||
const PassInfo *PI = PR->getPassInfo(RunPass);
|
||||
if (!PI) {
|
||||
errs() << argv[0] << ": stop-after pass is not registered.\n";
|
||||
errs() << argv[0] << ": run-pass pass is not registered.\n";
|
||||
return 1;
|
||||
}
|
||||
StopAfterID = PI->getTypeInfo();
|
||||
StopAfterID = StartBeforeID = PI->getTypeInfo();
|
||||
} else {
|
||||
if (!StartAfter.empty()) {
|
||||
const PassInfo *PI = PR->getPassInfo(StartAfter);
|
||||
if (!PI) {
|
||||
errs() << argv[0] << ": start-after pass is not registered.\n";
|
||||
return 1;
|
||||
}
|
||||
StartAfterID = PI->getTypeInfo();
|
||||
}
|
||||
if (!StopAfter.empty()) {
|
||||
const PassInfo *PI = PR->getPassInfo(StopAfter);
|
||||
if (!PI) {
|
||||
errs() << argv[0] << ": stop-after pass is not registered.\n";
|
||||
return 1;
|
||||
}
|
||||
StopAfterID = PI->getTypeInfo();
|
||||
}
|
||||
}
|
||||
|
||||
// Ask the target to add backend passes as necessary.
|
||||
if (Target->addPassesToEmitFile(PM, *OS, FileType, NoVerify, StartAfterID,
|
||||
StopAfterID, MIR.get())) {
|
||||
if (Target->addPassesToEmitFile(PM, *OS, FileType, NoVerify, StartBeforeID,
|
||||
StartAfterID, StopAfterID, MIR.get())) {
|
||||
errs() << argv[0] << ": target does not support generation of this"
|
||||
<< " file type!\n";
|
||||
return 1;
|
||||
|
||||
Reference in New Issue
Block a user