Commit 1f2dad1f authored by Fedor Sergeev's avatar Fedor Sergeev
Browse files

[GVN] add GVN parameters parsing to new pass manager

Introduce parsing, add a few instances of parameter use into GVN-PRE tests.

Reviewers: skatkov, asbirlea
Reviewed By: skatkov

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D72752
parent 53b68e67
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -1640,6 +1640,29 @@ Expected<bool> parseMergedLoadStoreMotionOptions(StringRef Params) {
  }
  return Result;
}

Expected<GVNOptions> parseGVNOptions(StringRef Params) {
  GVNOptions Result;
  while (!Params.empty()) {
    StringRef ParamName;
    std::tie(ParamName, Params) = Params.split(';');

    bool Enable = !ParamName.consume_front("no-");
    if (ParamName == "pre") {
      Result.setPRE(Enable);
    } else if (ParamName == "load-pre") {
      Result.setLoadPRE(Enable);
    } else if (ParamName == "memdep") {
      Result.setMemDep(Enable);
    } else {
      return make_error<StringError>(
          formatv("invalid GVN pass parameter '{0}' ", ParamName).str(),
          inconvertibleErrorCode());
    }
  }
  return Result;
}

} // namespace

/// Tests whether a pass name starts with a valid prefix for a default pipeline
+5 −1
Original line number Diff line number Diff line
@@ -193,7 +193,6 @@ FUNCTION_PASS("lower-constant-intrinsics", LowerConstantIntrinsicsPass())
FUNCTION_PASS("lower-matrix-intrinsics", LowerMatrixIntrinsicsPass())
FUNCTION_PASS("lower-widenable-condition", LowerWidenableConditionPass())
FUNCTION_PASS("guard-widening", GuardWideningPass())
FUNCTION_PASS("gvn", GVN())
FUNCTION_PASS("load-store-vectorizer", LoadStoreVectorizerPass())
FUNCTION_PASS("loop-simplify", LoopSimplifyPass())
FUNCTION_PASS("loop-sink", LoopSinkPass())
@@ -282,6 +281,11 @@ FUNCTION_PASS_WITH_PARAMS("mldst-motion",
                             return MergedLoadStoreMotionPass(Opts);
                           },
                           parseMergedLoadStoreMotionOptions)
FUNCTION_PASS_WITH_PARAMS("gvn",
                           [](GVNOptions Opts) {
                             return GVN(Opts);
                           },
                           parseGVNOptions)
#undef FUNCTION_PASS_WITH_PARAMS

#ifndef LOOP_ANALYSIS
+1 −0
Original line number Diff line number Diff line
; RUN: opt < %s -gvn -S | FileCheck %s
; RUN: opt < %s -passes="gvn<load-pre>" -S | FileCheck %s

target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:32-n32"

+1 −0
Original line number Diff line number Diff line
; RUN: opt < %s -gvn -enable-pre -S | FileCheck %s
; RUN: opt < %s -passes="gvn<pre>" -enable-pre=false -S | FileCheck %s

declare void @may_exit() nounwind

+1 −0
Original line number Diff line number Diff line
; RUN: opt < %s -gvn -enable-pre -S | FileCheck %s
; RUN: opt < %s -passes="gvn<pre>" -enable-pre=false -S | FileCheck %s

@H = common global i32 0		; <i32*> [#uses=2]
@G = common global i32 0		; <i32*> [#uses=1]
Loading