Update spirv-tools to v2021.4 (#4862)
This commit is contained in:
69
third_party/spirv-tools/source/opt/optimizer.cpp
vendored
69
third_party/spirv-tools/source/opt/optimizer.cpp
vendored
@@ -320,6 +320,8 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag) {
|
||||
RegisterPass(CreateCombineAccessChainsPass());
|
||||
} else if (pass_name == "convert-local-access-chains") {
|
||||
RegisterPass(CreateLocalAccessChainConvertPass());
|
||||
} else if (pass_name == "replace-desc-array-access-using-var-index") {
|
||||
RegisterPass(CreateReplaceDescArrayAccessUsingVarIndexPass());
|
||||
} else if (pass_name == "descriptor-scalar-replacement") {
|
||||
RegisterPass(CreateDescriptorScalarReplacementPass());
|
||||
} else if (pass_name == "eliminate-dead-code-aggressive") {
|
||||
@@ -385,7 +387,23 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag) {
|
||||
} else if (pass_name == "loop-invariant-code-motion") {
|
||||
RegisterPass(CreateLoopInvariantCodeMotionPass());
|
||||
} else if (pass_name == "reduce-load-size") {
|
||||
RegisterPass(CreateReduceLoadSizePass());
|
||||
if (pass_args.size() == 0) {
|
||||
RegisterPass(CreateReduceLoadSizePass());
|
||||
} else {
|
||||
double load_replacement_threshold = 0.9;
|
||||
if (pass_args.find_first_not_of(".0123456789") == std::string::npos) {
|
||||
load_replacement_threshold = atof(pass_args.c_str());
|
||||
}
|
||||
|
||||
if (load_replacement_threshold >= 0) {
|
||||
RegisterPass(CreateReduceLoadSizePass(load_replacement_threshold));
|
||||
} else {
|
||||
Error(consumer(), nullptr, {},
|
||||
"--reduce-load-size must have no arguments or a non-negative "
|
||||
"double argument");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else if (pass_name == "redundancy-elimination") {
|
||||
RegisterPass(CreateRedundancyEliminationPass());
|
||||
} else if (pass_name == "private-to-local") {
|
||||
@@ -401,22 +419,22 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag) {
|
||||
RegisterPass(CreateSimplificationPass());
|
||||
RegisterPass(CreateDeadBranchElimPass());
|
||||
RegisterPass(CreateBlockMergePass());
|
||||
RegisterPass(CreateAggressiveDCEPass());
|
||||
RegisterPass(CreateAggressiveDCEPass(true));
|
||||
} else if (pass_name == "inst-desc-idx-check") {
|
||||
RegisterPass(CreateInstBindlessCheckPass(7, 23, true, true));
|
||||
RegisterPass(CreateSimplificationPass());
|
||||
RegisterPass(CreateDeadBranchElimPass());
|
||||
RegisterPass(CreateBlockMergePass());
|
||||
RegisterPass(CreateAggressiveDCEPass());
|
||||
RegisterPass(CreateAggressiveDCEPass(true));
|
||||
} else if (pass_name == "inst-buff-oob-check") {
|
||||
RegisterPass(CreateInstBindlessCheckPass(7, 23, false, false, true, true));
|
||||
RegisterPass(CreateSimplificationPass());
|
||||
RegisterPass(CreateDeadBranchElimPass());
|
||||
RegisterPass(CreateBlockMergePass());
|
||||
RegisterPass(CreateAggressiveDCEPass());
|
||||
RegisterPass(CreateAggressiveDCEPass(true));
|
||||
} else if (pass_name == "inst-buff-addr-check") {
|
||||
RegisterPass(CreateInstBuffAddrCheckPass(7, 23));
|
||||
RegisterPass(CreateAggressiveDCEPass());
|
||||
RegisterPass(CreateAggressiveDCEPass(true));
|
||||
} else if (pass_name == "convert-relaxed-to-half") {
|
||||
RegisterPass(CreateConvertRelaxedToHalfPass());
|
||||
} else if (pass_name == "relax-float-ops") {
|
||||
@@ -499,6 +517,26 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag) {
|
||||
RegisterPass(CreateAmdExtToKhrPass());
|
||||
} else if (pass_name == "interpolate-fixup") {
|
||||
RegisterPass(CreateInterpolateFixupPass());
|
||||
} else if (pass_name == "convert-to-sampled-image") {
|
||||
if (pass_args.size() > 0) {
|
||||
auto descriptor_set_binding_pairs =
|
||||
opt::ConvertToSampledImagePass::ParseDescriptorSetBindingPairsString(
|
||||
pass_args.c_str());
|
||||
if (!descriptor_set_binding_pairs) {
|
||||
Errorf(consumer(), nullptr, {},
|
||||
"Invalid argument for --convert-to-sampled-image: %s",
|
||||
pass_args.c_str());
|
||||
return false;
|
||||
}
|
||||
RegisterPass(CreateConvertToSampledImagePass(
|
||||
std::move(*descriptor_set_binding_pairs)));
|
||||
} else {
|
||||
Errorf(consumer(), nullptr, {},
|
||||
"Invalid pairs of descriptor set and binding '%s'. Expected a "
|
||||
"string of <descriptor set>:<binding> pairs.",
|
||||
pass_args.c_str());
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
Errorf(consumer(), nullptr, {},
|
||||
"Unknown flag '--%s'. Use --help for a list of valid flags",
|
||||
@@ -726,9 +764,9 @@ Optimizer::PassToken CreateLocalMultiStoreElimPass() {
|
||||
MakeUnique<opt::SSARewritePass>());
|
||||
}
|
||||
|
||||
Optimizer::PassToken CreateAggressiveDCEPass() {
|
||||
Optimizer::PassToken CreateAggressiveDCEPass(bool preserve_interface) {
|
||||
return MakeUnique<Optimizer::PassToken::Impl>(
|
||||
MakeUnique<opt::AggressiveDCEPass>());
|
||||
MakeUnique<opt::AggressiveDCEPass>(preserve_interface));
|
||||
}
|
||||
|
||||
Optimizer::PassToken CreateRemoveUnusedInterfaceVariablesPass() {
|
||||
@@ -859,9 +897,10 @@ Optimizer::PassToken CreateVectorDCEPass() {
|
||||
return MakeUnique<Optimizer::PassToken::Impl>(MakeUnique<opt::VectorDCE>());
|
||||
}
|
||||
|
||||
Optimizer::PassToken CreateReduceLoadSizePass() {
|
||||
Optimizer::PassToken CreateReduceLoadSizePass(
|
||||
double load_replacement_threshold) {
|
||||
return MakeUnique<Optimizer::PassToken::Impl>(
|
||||
MakeUnique<opt::ReduceLoadSize>());
|
||||
MakeUnique<opt::ReduceLoadSize>(load_replacement_threshold));
|
||||
}
|
||||
|
||||
Optimizer::PassToken CreateCombineAccessChainsPass() {
|
||||
@@ -921,6 +960,11 @@ Optimizer::PassToken CreateGraphicsRobustAccessPass() {
|
||||
MakeUnique<opt::GraphicsRobustAccessPass>());
|
||||
}
|
||||
|
||||
Optimizer::PassToken CreateReplaceDescArrayAccessUsingVarIndexPass() {
|
||||
return MakeUnique<Optimizer::PassToken::Impl>(
|
||||
MakeUnique<opt::ReplaceDescArrayAccessUsingVarIndex>());
|
||||
}
|
||||
|
||||
Optimizer::PassToken CreateDescriptorScalarReplacementPass() {
|
||||
return MakeUnique<Optimizer::PassToken::Impl>(
|
||||
MakeUnique<opt::DescriptorScalarReplacement>());
|
||||
@@ -940,4 +984,11 @@ Optimizer::PassToken CreateInterpolateFixupPass() {
|
||||
MakeUnique<opt::InterpFixupPass>());
|
||||
}
|
||||
|
||||
Optimizer::PassToken CreateConvertToSampledImagePass(
|
||||
const std::vector<opt::DescriptorSetAndBinding>&
|
||||
descriptor_set_binding_pairs) {
|
||||
return MakeUnique<Optimizer::PassToken::Impl>(
|
||||
MakeUnique<opt::ConvertToSampledImagePass>(descriptor_set_binding_pairs));
|
||||
}
|
||||
|
||||
} // namespace spvtools
|
||||
|
||||
Reference in New Issue
Block a user