mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +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;
|
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
|
} // namespace
|
||||||
|
|
||||||
/// Tests whether a pass name starts with a valid prefix for a default pipeline
|
/// 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-matrix-intrinsics", LowerMatrixIntrinsicsPass())
|
||||||
FUNCTION_PASS("lower-widenable-condition", LowerWidenableConditionPass())
|
FUNCTION_PASS("lower-widenable-condition", LowerWidenableConditionPass())
|
||||||
FUNCTION_PASS("guard-widening", GuardWideningPass())
|
FUNCTION_PASS("guard-widening", GuardWideningPass())
|
||||||
FUNCTION_PASS("gvn", GVN())
|
|
||||||
FUNCTION_PASS("load-store-vectorizer", LoadStoreVectorizerPass())
|
FUNCTION_PASS("load-store-vectorizer", LoadStoreVectorizerPass())
|
||||||
FUNCTION_PASS("loop-simplify", LoopSimplifyPass())
|
FUNCTION_PASS("loop-simplify", LoopSimplifyPass())
|
||||||
FUNCTION_PASS("loop-sink", LoopSinkPass())
|
FUNCTION_PASS("loop-sink", LoopSinkPass())
|
||||||
@ -282,6 +281,11 @@ FUNCTION_PASS_WITH_PARAMS("mldst-motion",
|
|||||||
return MergedLoadStoreMotionPass(Opts);
|
return MergedLoadStoreMotionPass(Opts);
|
||||||
},
|
},
|
||||||
parseMergedLoadStoreMotionOptions)
|
parseMergedLoadStoreMotionOptions)
|
||||||
|
FUNCTION_PASS_WITH_PARAMS("gvn",
|
||||||
|
[](GVNOptions Opts) {
|
||||||
|
return GVN(Opts);
|
||||||
|
},
|
||||||
|
parseGVNOptions)
|
||||||
#undef FUNCTION_PASS_WITH_PARAMS
|
#undef FUNCTION_PASS_WITH_PARAMS
|
||||||
|
|
||||||
#ifndef LOOP_ANALYSIS
|
#ifndef LOOP_ANALYSIS
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
; RUN: opt < %s -gvn -S | FileCheck %s
|
; 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"
|
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 -gvn -enable-pre -S | FileCheck %s
|
||||||
|
; RUN: opt < %s -passes="gvn<pre>" -enable-pre=false -S | FileCheck %s
|
||||||
|
|
||||||
declare void @may_exit() nounwind
|
declare void @may_exit() nounwind
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
; RUN: opt < %s -gvn -enable-pre -S | FileCheck %s
|
; 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]
|
@H = common global i32 0 ; <i32*> [#uses=2]
|
||||||
@G = common global i32 0 ; <i32*> [#uses=1]
|
@G = common global i32 0 ; <i32*> [#uses=1]
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
; 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 -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 -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 datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
|
||||||
target triple = "aarch64--linux-gnu"
|
target triple = "aarch64--linux-gnu"
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
; RUN: opt < %s -basicaa -gvn -enable-load-pre -S | FileCheck %s
|
; 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"
|
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) {
|
define i32 @test1(i32* %p, i1 %C) {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
; RUN: opt < %s -gvn -enable-load-pre -S | FileCheck %s
|
; 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
|
; 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
|
; 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
|
; %for.end, we would actually be lengthening the execution on some paths, and
|
||||||
|
Loading…
x
Reference in New Issue
Block a user