Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: src/IceClFlags.cpp

Issue 1571433004: Implements include/exclude register lists for translation. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix nits. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/IceClFlags.h ('k') | src/IceDefs.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/src/IceClFlags.cpp - Command line flags and parsing --------===// 1 //===- subzero/src/IceClFlags.cpp - Command line flags and parsing --------===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 /// 9 ///
10 /// \file 10 /// \file
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 /// Max number of nops to insert per instruction. 286 /// Max number of nops to insert per instruction.
287 cl::opt<int> MaxNopsPerInstruction( 287 cl::opt<int> MaxNopsPerInstruction(
288 "max-nops-per-instruction", 288 "max-nops-per-instruction",
289 cl::desc("Max number of nops to insert per instruction"), cl::init(1)); 289 cl::desc("Max number of nops to insert per instruction"), cl::init(1));
290 290
291 /// Nop insertion probability as percentage. 291 /// Nop insertion probability as percentage.
292 cl::opt<int> NopProbabilityAsPercentage( 292 cl::opt<int> NopProbabilityAsPercentage(
293 "nop-insertion-percentage", 293 "nop-insertion-percentage",
294 cl::desc("Nop insertion probability as percentage"), cl::init(10)); 294 cl::desc("Nop insertion probability as percentage"), cl::init(10));
295 295
296 /// Restricts registers in corresponding register classes to specified list.
297 cl::list<std::string> UseRestrictedRegisters(
298 "reg-use", cl::CommaSeparated,
299 cl::desc(
300 "Only use specified registers for corresponding register classes"));
301
302 /// List of excluded registers.
303 cl::list<std::string>
304 ExcludedRegisters("reg-exclude", cl::CommaSeparated,
305 cl::desc("Don't use specified registers"));
306
296 /// Verbose options (can be comma-separated). 307 /// Verbose options (can be comma-separated).
297 cl::list<Ice::VerboseItem> VerboseList( 308 cl::list<Ice::VerboseItem> VerboseList(
298 "verbose", cl::CommaSeparated, 309 "verbose", cl::CommaSeparated,
299 cl::desc("Verbose options (can be comma-separated):"), 310 cl::desc("Verbose options (can be comma-separated):"),
300 cl::values( 311 cl::values(
301 clEnumValN(Ice::IceV_Instructions, "inst", "Print basic instructions"), 312 clEnumValN(Ice::IceV_Instructions, "inst", "Print basic instructions"),
302 clEnumValN(Ice::IceV_Deleted, "del", "Include deleted instructions"), 313 clEnumValN(Ice::IceV_Deleted, "del", "Include deleted instructions"),
303 clEnumValN(Ice::IceV_InstNumbers, "instnum", 314 clEnumValN(Ice::IceV_InstNumbers, "instnum",
304 "Print instruction numbers"), 315 "Print instruction numbers"),
305 clEnumValN(Ice::IceV_Preds, "pred", "Show predecessors"), 316 clEnumValN(Ice::IceV_Preds, "pred", "Show predecessors"),
306 clEnumValN(Ice::IceV_Succs, "succ", "Show successors"), 317 clEnumValN(Ice::IceV_Succs, "succ", "Show successors"),
307 clEnumValN(Ice::IceV_Liveness, "live", "Liveness information"), 318 clEnumValN(Ice::IceV_Liveness, "live", "Liveness information"),
308 clEnumValN(Ice::IceV_RegOrigins, "orig", "Physical register origins"), 319 clEnumValN(Ice::IceV_RegOrigins, "orig", "Physical register origins"),
309 clEnumValN(Ice::IceV_LinearScan, "regalloc", "Linear scan details"), 320 clEnumValN(Ice::IceV_LinearScan, "regalloc", "Linear scan details"),
310 clEnumValN(Ice::IceV_Frame, "frame", "Stack frame layout details"), 321 clEnumValN(Ice::IceV_Frame, "frame", "Stack frame layout details"),
311 clEnumValN(Ice::IceV_AddrOpt, "addropt", "Address mode optimization"), 322 clEnumValN(Ice::IceV_AddrOpt, "addropt", "Address mode optimization"),
312 clEnumValN(Ice::IceV_Random, "random", "Randomization details"), 323 clEnumValN(Ice::IceV_Random, "random", "Randomization details"),
313 clEnumValN(Ice::IceV_Folding, "fold", "Instruction folding details"), 324 clEnumValN(Ice::IceV_Folding, "fold", "Instruction folding details"),
314 clEnumValN(Ice::IceV_RMW, "rmw", "ReadModifyWrite optimization"), 325 clEnumValN(Ice::IceV_RMW, "rmw", "ReadModifyWrite optimization"),
315 clEnumValN(Ice::IceV_Loop, "loop", "Loop nest depth analysis"), 326 clEnumValN(Ice::IceV_Loop, "loop", "Loop nest depth analysis"),
316 clEnumValN(Ice::IceV_Status, "status", 327 clEnumValN(Ice::IceV_Status, "status",
317 "Print the name of the function being translated"), 328 "Print the name of the function being translated"),
329 clEnumValN(Ice::IceV_AvailableRegs, "registers",
330 "Show available registers for register allocation"),
318 clEnumValN(Ice::IceV_All, "all", "Use all verbose options"), 331 clEnumValN(Ice::IceV_All, "all", "Use all verbose options"),
319 clEnumValN(Ice::IceV_Most, "most", 332 clEnumValN(Ice::IceV_Most, "most",
320 "Use all verbose options except 'regalloc'"), 333 "Use all verbose options except 'regalloc'"),
321 clEnumValN(Ice::IceV_None, "none", "No verbosity"), clEnumValEnd)); 334 clEnumValN(Ice::IceV_None, "none", "No verbosity"), clEnumValEnd));
322 335
323 // Options not captured in Ice::ClFlags and propagated. 336 // Options not captured in Ice::ClFlags and propagated.
324 337
325 /// Exit with success status, even if errors found. 338 /// Exit with success status, even if errors found.
326 cl::opt<bool> AlwaysExitSuccess( 339 cl::opt<bool> AlwaysExitSuccess(
327 "exit-success", cl::desc("Exit with success status, even if errors found"), 340 "exit-success", cl::desc("Exit with success status, even if errors found"),
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 // IceString fields. 493 // IceString fields.
481 OutFlags.DefaultFunctionPrefix = ""; 494 OutFlags.DefaultFunctionPrefix = "";
482 OutFlags.DefaultGlobalPrefix = ""; 495 OutFlags.DefaultGlobalPrefix = "";
483 OutFlags.TestPrefix = ""; 496 OutFlags.TestPrefix = "";
484 OutFlags.TimingFocusOn = ""; 497 OutFlags.TimingFocusOn = "";
485 OutFlags.TranslateOnly = ""; 498 OutFlags.TranslateOnly = "";
486 OutFlags.VerboseFocusOn = ""; 499 OutFlags.VerboseFocusOn = "";
487 // size_t and 64-bit fields. 500 // size_t and 64-bit fields.
488 OutFlags.NumTranslationThreads = 0; 501 OutFlags.NumTranslationThreads = 0;
489 OutFlags.RandomSeed = 0; 502 OutFlags.RandomSeed = 0;
503 // Unordered set fields.
504 OutFlags.clearExcludedRegisters();
505 OutFlags.clearUseRestrictedRegisters();
490 } 506 }
491 507
492 void ClFlags::getParsedClFlags(ClFlags &OutFlags) { 508 void ClFlags::getParsedClFlags(ClFlags &OutFlags) {
493 Ice::VerboseMask VMask = Ice::IceV_None; 509 Ice::VerboseMask VMask = Ice::IceV_None;
494 // Don't generate verbose messages if routines to dump messages are not 510 // Don't generate verbose messages if routines to dump messages are not
495 // available. 511 // available.
496 if (BuildDefs::dump()) { 512 if (BuildDefs::dump()) {
497 for (unsigned i = 0; i != VerboseList.size(); ++i) 513 for (unsigned i = 0; i != VerboseList.size(); ++i)
498 VMask |= VerboseList[i]; 514 VMask |= VerboseList[i];
499 } 515 }
500 516
501 OutFlags.setAllowErrorRecovery(::AllowErrorRecovery); 517 OutFlags.setAllowErrorRecovery(::AllowErrorRecovery);
502 OutFlags.setAllowExternDefinedSymbols(::AllowExternDefinedSymbols || 518 OutFlags.setAllowExternDefinedSymbols(::AllowExternDefinedSymbols ||
503 ::DisableInternal); 519 ::DisableInternal);
504 OutFlags.setAllowIacaMarks(::AllowIacaMarks); 520 OutFlags.setAllowIacaMarks(::AllowIacaMarks);
505 OutFlags.setAllowUninitializedGlobals(::AllowUninitializedGlobals); 521 OutFlags.setAllowUninitializedGlobals(::AllowUninitializedGlobals);
506 OutFlags.setDataSections(::DataSections); 522 OutFlags.setDataSections(::DataSections);
507 OutFlags.setDecorateAsm(::DecorateAsm); 523 OutFlags.setDecorateAsm(::DecorateAsm);
508 OutFlags.setDefaultFunctionPrefix(::DefaultFunctionPrefix); 524 OutFlags.setDefaultFunctionPrefix(::DefaultFunctionPrefix);
509 OutFlags.setDefaultGlobalPrefix(::DefaultGlobalPrefix); 525 OutFlags.setDefaultGlobalPrefix(::DefaultGlobalPrefix);
510 OutFlags.setDisableHybridAssembly(::DisableHybridAssembly || 526 OutFlags.setDisableHybridAssembly(::DisableHybridAssembly ||
511 (::OutFileType != Ice::FT_Iasm)); 527 (::OutFileType != Ice::FT_Iasm));
512 OutFlags.setDisableInternal(::DisableInternal); 528 OutFlags.setDisableInternal(::DisableInternal);
513 OutFlags.setDisableTranslation(::DisableTranslation); 529 OutFlags.setDisableTranslation(::DisableTranslation);
514 OutFlags.setDumpStats(::DumpStats); 530 OutFlags.setDumpStats(::DumpStats);
515 OutFlags.setEnableBlockProfile(::EnableBlockProfile); 531 OutFlags.setEnableBlockProfile(::EnableBlockProfile);
532 OutFlags.setExcludedRegisters(::ExcludedRegisters);
516 OutFlags.setForceMemIntrinOpt(::ForceMemIntrinOpt); 533 OutFlags.setForceMemIntrinOpt(::ForceMemIntrinOpt);
517 OutFlags.setFunctionSections(::FunctionSections); 534 OutFlags.setFunctionSections(::FunctionSections);
518 OutFlags.setNumTranslationThreads(::NumThreads); 535 OutFlags.setNumTranslationThreads(::NumThreads);
519 OutFlags.setOptLevel(::OLevel); 536 OutFlags.setOptLevel(::OLevel);
520 OutFlags.setMockBoundsCheck(::MockBoundsCheck); 537 OutFlags.setMockBoundsCheck(::MockBoundsCheck);
521 OutFlags.setPhiEdgeSplit(::EnablePhiEdgeSplit); 538 OutFlags.setPhiEdgeSplit(::EnablePhiEdgeSplit);
522 OutFlags.setRandomSeed(::RandomSeed); 539 OutFlags.setRandomSeed(::RandomSeed);
523 OutFlags.setRandomizeAndPoolImmediatesOption( 540 OutFlags.setRandomizeAndPoolImmediatesOption(
524 ::RandomizeAndPoolImmediatesOption); 541 ::RandomizeAndPoolImmediatesOption);
525 OutFlags.setRandomizeAndPoolImmediatesThreshold( 542 OutFlags.setRandomizeAndPoolImmediatesThreshold(
526 ::RandomizeAndPoolImmediatesThreshold); 543 ::RandomizeAndPoolImmediatesThreshold);
527 OutFlags.setReorderFunctionsWindowSize(::ReorderFunctionsWindowSize); 544 OutFlags.setReorderFunctionsWindowSize(::ReorderFunctionsWindowSize);
528 OutFlags.setShouldReorderBasicBlocks(::ReorderBasicBlocks); 545 OutFlags.setShouldReorderBasicBlocks(::ReorderBasicBlocks);
529 OutFlags.setShouldDoNopInsertion(::ShouldDoNopInsertion); 546 OutFlags.setShouldDoNopInsertion(::ShouldDoNopInsertion);
530 OutFlags.setShouldRandomizeRegAlloc(::RandomizeRegisterAllocation); 547 OutFlags.setShouldRandomizeRegAlloc(::RandomizeRegisterAllocation);
531 OutFlags.setShouldRepeatRegAlloc(::RepeatRegAlloc); 548 OutFlags.setShouldRepeatRegAlloc(::RepeatRegAlloc);
532 OutFlags.setShouldReorderFunctions(::ReorderFunctions); 549 OutFlags.setShouldReorderFunctions(::ReorderFunctions);
533 OutFlags.setShouldReorderGlobalVariables(::ReorderGlobalVariables); 550 OutFlags.setShouldReorderGlobalVariables(::ReorderGlobalVariables);
534 OutFlags.setShouldReorderPooledConstants(::ReorderPooledConstants); 551 OutFlags.setShouldReorderPooledConstants(::ReorderPooledConstants);
535 OutFlags.setSkipUnimplemented(::SkipUnimplemented); 552 OutFlags.setSkipUnimplemented(::SkipUnimplemented);
536 OutFlags.setSubzeroTimingEnabled(::SubzeroTimingEnabled); 553 OutFlags.setSubzeroTimingEnabled(::SubzeroTimingEnabled);
537 OutFlags.setTargetArch(::TargetArch); 554 OutFlags.setTargetArch(::TargetArch);
538 OutFlags.setTargetInstructionSet(::TargetInstructionSet); 555 OutFlags.setTargetInstructionSet(::TargetInstructionSet);
539 OutFlags.setTestPrefix(::TestPrefix); 556 OutFlags.setTestPrefix(::TestPrefix);
540 OutFlags.setTestStackExtra(::TestStackExtra); 557 OutFlags.setTestStackExtra(::TestStackExtra);
541 OutFlags.setTimeEachFunction(::TimeEachFunction); 558 OutFlags.setTimeEachFunction(::TimeEachFunction);
542 OutFlags.setTimingFocusOn(::TimingFocusOn); 559 OutFlags.setTimingFocusOn(::TimingFocusOn);
543 OutFlags.setTranslateOnly(::TranslateOnly); 560 OutFlags.setTranslateOnly(::TranslateOnly);
544 OutFlags.setUseNonsfi(::UseNonsfi); 561 OutFlags.setUseNonsfi(::UseNonsfi);
562 OutFlags.setUseRestrictedRegisters(::UseRestrictedRegisters);
545 OutFlags.setUseSandboxing(::UseSandboxing); 563 OutFlags.setUseSandboxing(::UseSandboxing);
546 OutFlags.setVerboseFocusOn(::VerboseFocusOn); 564 OutFlags.setVerboseFocusOn(::VerboseFocusOn);
547 OutFlags.setOutFileType(::OutFileType); 565 OutFlags.setOutFileType(::OutFileType);
548 OutFlags.setMaxNopsPerInstruction(::MaxNopsPerInstruction); 566 OutFlags.setMaxNopsPerInstruction(::MaxNopsPerInstruction);
549 OutFlags.setNopProbabilityAsPercentage(::NopProbabilityAsPercentage); 567 OutFlags.setNopProbabilityAsPercentage(::NopProbabilityAsPercentage);
550 OutFlags.setVerbose(VMask); 568 OutFlags.setVerbose(VMask);
551 } 569 }
552 570
553 void ClFlags::getParsedClFlagsExtra(ClFlagsExtra &OutFlagsExtra) { 571 void ClFlags::getParsedClFlagsExtra(ClFlagsExtra &OutFlagsExtra) {
554 OutFlagsExtra.setAlwaysExitSuccess(AlwaysExitSuccess); 572 OutFlagsExtra.setAlwaysExitSuccess(AlwaysExitSuccess);
555 OutFlagsExtra.setBitcodeAsText(BitcodeAsText); 573 OutFlagsExtra.setBitcodeAsText(BitcodeAsText);
556 OutFlagsExtra.setBuildOnRead(BuildOnRead); 574 OutFlagsExtra.setBuildOnRead(BuildOnRead);
557 OutFlagsExtra.setGenerateBuildAtts(GenerateBuildAtts); 575 OutFlagsExtra.setGenerateBuildAtts(GenerateBuildAtts);
558 OutFlagsExtra.setLLVMVerboseErrors(LLVMVerboseErrors); 576 OutFlagsExtra.setLLVMVerboseErrors(LLVMVerboseErrors);
559 OutFlagsExtra.setAppName(AppName); 577 OutFlagsExtra.setAppName(AppName);
560 OutFlagsExtra.setInputFileFormat(InputFileFormat); 578 OutFlagsExtra.setInputFileFormat(InputFileFormat);
561 OutFlagsExtra.setIRFilename(IRFilename); 579 OutFlagsExtra.setIRFilename(IRFilename);
562 OutFlagsExtra.setLogFilename(LogFilename); 580 OutFlagsExtra.setLogFilename(LogFilename);
563 OutFlagsExtra.setOutputFilename(OutputFilename); 581 OutFlagsExtra.setOutputFilename(OutputFilename);
564 } 582 }
565 583
566 } // end of namespace Ice 584 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceClFlags.h ('k') | src/IceDefs.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698