| //===- Scalarizer.h --- Scalarize vector operations -----------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| /// \file |
| /// This pass converts vector operations into scalar operations, in order |
| /// to expose optimization opportunities on the individual scalar operations. |
| /// It is mainly intended for targets that do not have vector units, but it |
| /// may also be useful for revectorizing code to different vector widths. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_TRANSFORMS_SCALAR_SCALARIZER_H |
| #define LLVM_TRANSFORMS_SCALAR_SCALARIZER_H |
| |
| #include "llvm/ADT/Optional.h" |
| #include "llvm/IR/PassManager.h" |
| |
| namespace llvm { |
| |
| class Function; |
| class FunctionPass; |
| |
| struct ScalarizerPassOptions { |
| // These optional booleans correspond 1:1 to cl::opt<bool> options defined in |
| // Scalarizer.cpp. When the cl::opt are specified, they take precedence. |
| // When the cl::opt are not specified, the present optional booleans allow to |
| // override the cl::opt's default values. |
| llvm::Optional<bool> ScalarizeVariableInsertExtract; |
| llvm::Optional<bool> ScalarizeLoadStore; |
| }; |
| |
| class ScalarizerPass : public PassInfoMixin<ScalarizerPass> { |
| ScalarizerPassOptions Options; |
| |
| public: |
| PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); |
| |
| void setScalarizeVariableInsertExtract(bool Value) { |
| Options.ScalarizeVariableInsertExtract = Value; |
| } |
| void setScalarizeLoadStore(bool Value) { Options.ScalarizeLoadStore = Value; } |
| }; |
| |
| /// Create a legacy pass manager instance of the Scalarizer pass |
| FunctionPass *createScalarizerPass(); |
| |
| } |
| |
| #endif /* LLVM_TRANSFORMS_SCALAR_SCALARIZER_H */ |