Skip to content

Commit 89ad598

Browse files
kychendevpszymich
authored andcommitted
Add -vc-disable-indvars-opt option to control induction
variable optimization. Add vc option for user to control induction variable optimization to achieve better performance in some workload.
1 parent dcdb867 commit 89ad598

File tree

6 files changed

+27
-2
lines changed

6 files changed

+27
-2
lines changed

IGC/Options/include/igc/Options/VCApiOptions.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ def vc_disable_non_overlapping_region_opt :
8383
PlainFlag<"vc-disable-non-overlapping-region-opt">,
8484
HelpText<"Disable non-overlapping region optimization">;
8585

86+
def vc_disable_indvars_opt :
87+
PlainFlag<"vc-disable-indvars-opt">,
88+
HelpText<"Disable induction variable optimization">;
89+
8690
// Compatibility alias.
8791
def : PlainFlag<"doubleGRF">, Alias<large_GRF>,
8892
HelpText<"Alias for -ze-opt-large-register-file"> {

IGC/VectorCompiler/include/vc/Driver/Driver.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ struct CompileOptions {
108108
bool ForceLiveRangesLocalizationForAccUsage = false;
109109
bool ForceDisableNonOverlappingRegionOpt = false;
110110
bool IsLargeGRFMode = false;
111+
bool ForceDisableIndvarsOpt = false;
111112

112113
DisableLRCoalescingControl DisableLRCoalescingMode =
113114
DisableLRCoalescingControl::Default;

IGC/VectorCompiler/include/vc/Support/BackendConfig.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ struct GenXBackendOptions {
109109
// value in two-address operand)
110110
bool DisableNonOverlappingRegionOpt = false;
111111

112+
// Disable induction variable simplification
113+
bool DisableIndvarsOpt = false;
114+
112115
// use new Prolog/Epilog Insertion pass vs old CisaBuilder machinery
113116
bool UseNewStackBuilder = true;
114117

@@ -309,6 +312,8 @@ class GenXBackendConfig : public ImmutablePass {
309312
return Options.DisableNonOverlappingRegionOpt;
310313
}
311314

315+
bool disableIndvarsOpt() const { return Options.DisableIndvarsOpt; }
316+
312317
bool useNewStackBuilder() const { return Options.UseNewStackBuilder; }
313318

314319
unsigned getStatelessPrivateMemSize() const {

IGC/VectorCompiler/lib/Driver/Driver.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,8 @@ static GenXBackendOptions createBackendOptions(const vc::CompileOptions &Opts) {
232232
BackendOpts.LocalizeLRsForAccUsage = true;
233233
if (Opts.ForceDisableNonOverlappingRegionOpt)
234234
BackendOpts.DisableNonOverlappingRegionOpt = true;
235+
if (Opts.ForceDisableIndvarsOpt)
236+
BackendOpts.DisableIndvarsOpt = true;
235237
BackendOpts.FCtrl = Opts.FCtrl;
236238
BackendOpts.WATable = Opts.WATable;
237239
BackendOpts.IsLargeGRFMode = Opts.IsLargeGRFMode;
@@ -711,6 +713,8 @@ static Error fillApiOptions(const opt::ArgList &ApiOptions,
711713
Opts.SaveStackCallLinkage = true;
712714
if (ApiOptions.hasArg(OPT_vc_disable_non_overlapping_region_opt))
713715
Opts.ForceDisableNonOverlappingRegionOpt = true;
716+
if (ApiOptions.hasArg(OPT_vc_disable_indvars_opt))
717+
Opts.ForceDisableIndvarsOpt = true;
714718

715719
if (opt::Arg *A =
716720
ApiOptions.getLastArg(OPT_enable_zebin_ze, OPT_disable_zebin_ze))

IGC/VectorCompiler/lib/GenXCodeGen/GenXTargetMachine.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -661,8 +661,12 @@ void GenXTargetMachine::adjustPassManager(PassManagerBuilder &PMBuilder) {
661661

662662
// vldst.
663663
if (EmitVLoadStore) {
664-
auto AddLowerLoadStore = [](const PassManagerBuilder &Builder,
664+
auto AddLowerLoadStore = [this](const PassManagerBuilder &Builder,
665665
PassManagerBase &PM) {
666+
GenXPassConfig *PassConfig = createGenXPassConfig(*this, PM);
667+
vc::addPass(PM, PassConfig);
668+
const GenXBackendConfig &BackendConfig = PassConfig->getBackendConfig();
669+
666670
if (Builder.OptLevel > 0) {
667671
// Inline
668672
PM.add(createSROAPass());
@@ -681,7 +685,9 @@ void GenXTargetMachine::adjustPassManager(PassManagerBuilder &PMBuilder) {
681685
PM.add(createLoopRotatePass());
682686
PM.add(createLICMPass());
683687
PM.add(createInstructionCombiningPass());
684-
PM.add(createIndVarSimplifyPass());
688+
if (!(BackendConfig.disableIndvarsOpt())) {
689+
PM.add(createIndVarSimplifyPass());
690+
}
685691
PM.add(createLoopIdiomPass());
686692
PM.add(createLoopDeletionPass());
687693
PM.add(createSimpleLoopUnrollPass());

IGC/VectorCompiler/lib/Support/BackendConfig.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ static cl::opt<bool> DisableNonOverlappingRegionOptOpt(
8888
"vc-disable-non-overlapping-region-opt", cl::Hidden,
8989
cl::desc("Disable non-overlapping region optimization"));
9090

91+
static cl::opt<bool> DisableIndvarsOptOpt(
92+
"vc-disable-indvars-opt", cl::Hidden,
93+
cl::desc("Disable induction variable optimization"));
94+
9195
static cl::opt<bool>
9296
UseNewStackBuilderOpt("vc-use-new-stack-builder",
9397
cl::desc("Use prolog/epilog insertion pass"));
@@ -173,6 +177,7 @@ void GenXBackendOptions::enforceLLVMOptions() {
173177
enforceOptionIfSpecified(DisableExtraCoalescing, DisableExtraCoalescingOpt);
174178
enforceOptionIfSpecified(DisableNonOverlappingRegionOpt,
175179
DisableNonOverlappingRegionOptOpt);
180+
enforceOptionIfSpecified(DisableIndvarsOpt, DisableIndvarsOptOpt);
176181
enforceOptionIfSpecified(FCtrl, FunctionControlOpt);
177182
enforceOptionIfSpecified(IsLargeGRFMode, LargeGRFModeOpt);
178183
enforceOptionIfSpecified(UseBindlessBuffers, UseBindlessBuffersOpt);

0 commit comments

Comments
 (0)