File indexing completed on 2026-05-10 08:44:45
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef LLVM_TRANSFORMS_VECTORIZE_SANDBOXVECTORIZER_PASSES_BOTTOMUPVEC_H
0013 #define LLVM_TRANSFORMS_VECTORIZE_SANDBOXVECTORIZER_PASSES_BOTTOMUPVEC_H
0014
0015 #include "llvm/ADT/ArrayRef.h"
0016 #include "llvm/ADT/StringRef.h"
0017 #include "llvm/SandboxIR/Constant.h"
0018 #include "llvm/SandboxIR/Pass.h"
0019 #include "llvm/SandboxIR/PassManager.h"
0020 #include "llvm/Support/raw_ostream.h"
0021 #include "llvm/Transforms/Vectorize/SandboxVectorizer/InstrMaps.h"
0022 #include "llvm/Transforms/Vectorize/SandboxVectorizer/Legality.h"
0023
0024 namespace llvm::sandboxir {
0025
0026 class BottomUpVec final : public FunctionPass {
0027 bool Change = false;
0028 std::unique_ptr<LegalityAnalysis> Legality;
0029
0030 DenseSet<Instruction *> DeadInstrCandidates;
0031
0032 std::unique_ptr<InstrMaps> IMaps;
0033
0034
0035
0036 Value *createVectorInstr(ArrayRef<Value *> Bndl, ArrayRef<Value *> Operands);
0037
0038
0039 void tryEraseDeadInstrs();
0040
0041
0042 Value *createShuffle(Value *VecOp, const ShuffleMask &Mask,
0043 BasicBlock *UserBB);
0044
0045
0046 Value *createPack(ArrayRef<Value *> ToPack, BasicBlock *UserBB);
0047
0048
0049
0050
0051 void collectPotentiallyDeadInstrs(ArrayRef<Value *> Bndl);
0052
0053 Value *vectorizeRec(ArrayRef<Value *> Bndl, ArrayRef<Value *> UserBndl,
0054 unsigned Depth);
0055
0056 bool tryVectorize(ArrayRef<Value *> Seeds);
0057
0058
0059 RegionPassManager RPM;
0060
0061 public:
0062 BottomUpVec(StringRef Pipeline);
0063 bool runOnFunction(Function &F, const Analyses &A) final;
0064 void printPipeline(raw_ostream &OS) const final {
0065 OS << getName() << "\n";
0066 RPM.printPipeline(OS);
0067 }
0068 };
0069
0070 }
0071
0072 #endif