mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[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
This commit is contained in:
parent
bed83094ca
commit
bf9f1ee39d
@ -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
|
||||
|
@ -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,4 +1,5 @@
|
||||
; 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,4 +1,5 @@
|
||||
; 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,4 +1,5 @@
|
||||
; 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]
|
||||
|
@ -1,6 +1,7 @@
|
||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt < %s -basicaa -gvn -enable-load-pre -S | FileCheck %s
|
||||
; RUN: opt < %s -aa-pipeline=basic-aa -passes=gvn -enable-load-pre -S | FileCheck %s
|
||||
; RUN: opt < %s -aa-pipeline=basic-aa -passes="gvn<load-pre>" -enable-load-pre=false -S | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
|
||||
target triple = "aarch64--linux-gnu"
|
||||
|
@ -1,4 +1,5 @@
|
||||
; RUN: opt < %s -basicaa -gvn -enable-load-pre -S | FileCheck %s
|
||||
; RUN: opt < %s -aa-pipeline=basic-aa -passes="gvn<load-pre>" -enable-load-pre=false -S | FileCheck %s
|
||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
||||
|
||||
define i32 @test1(i32* %p, i1 %C) {
|
||||
|
@ -1,4 +1,5 @@
|
||||
; RUN: opt < %s -gvn -enable-load-pre -S | FileCheck %s
|
||||
; RUN: opt < %s -passes="gvn<load-pre>" -enable-load-pre=false -S | FileCheck %s
|
||||
; This testcase assumed we'll PRE the load into %for.cond, but we don't actually
|
||||
; verify that doing so is safe. If there didn't _happen_ to be a load in
|
||||
; %for.end, we would actually be lengthening the execution on some paths, and
|
||||
|
Loading…
x
Reference in New Issue
Block a user