Skip to content

Commit 37e309f

Browse files
authored
[AArch64][LoopIdiom] Generalize AArch64LoopIdiomTransform into LoopIdiomVectorize (#94081)
To facilitate sharing LoopIdiomTransform between AArch64 and RISC-V, this first patch moves AArch64LoopIdiomTransform from lib/Target/AArch64 to lib/Transforms/Vectorize and renames it to LoopIdiomVectorize. The following patch (#94082) will teach LoopIdiomVectorize how to generate VP intrinsics (in addition to the current masked vector style) in favor of RVV.
1 parent 96d01a3 commit 37e309f

File tree

11 files changed

+340
-426
lines changed

11 files changed

+340
-426
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,21 @@
1-
//===- AArch64LoopIdiomTransform.h --------------------------------------===//
1+
//===----------LoopIdiomVectorize.h -----------------------------*- C++ -*-===//
22
//
33
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
44
// See https://llvm.org/LICENSE.txt for license information.
55
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#ifndef LLVM_LIB_TARGET_AARCH64_AARCH64LOOPIDIOMTRANSFORM_H
10-
#define LLVM_LIB_TARGET_AARCH64_AARCH64LOOPIDIOMTRANSFORM_H
9+
#ifndef LLVM_LIB_TRANSFORMS_VECTORIZE_LOOPIDIOMVECTORIZE_H
10+
#define LLVM_LIB_TRANSFORMS_VECTORIZE_LOOPIDIOMVECTORIZE_H
1111

1212
#include "llvm/IR/PassManager.h"
1313
#include "llvm/Transforms/Scalar/LoopPassManager.h"
1414

1515
namespace llvm {
16-
17-
struct AArch64LoopIdiomTransformPass
18-
: PassInfoMixin<AArch64LoopIdiomTransformPass> {
16+
struct LoopIdiomVectorizePass : PassInfoMixin<LoopIdiomVectorizePass> {
1917
PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,
2018
LoopStandardAnalysisResults &AR, LPMUpdater &U);
2119
};
22-
2320
} // namespace llvm
24-
25-
#endif // LLVM_LIB_TARGET_AARCH64_AARCH64LOOPIDIOMTRANSFORM_H
21+
#endif // LLVM_LIB_TRANSFORMS_VECTORIZE_LOOPIDIOMVECTORIZE_H

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@
299299
#include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h"
300300
#include "llvm/Transforms/Utils/UnifyLoopExits.h"
301301
#include "llvm/Transforms/Vectorize/LoadStoreVectorizer.h"
302+
#include "llvm/Transforms/Vectorize/LoopIdiomVectorize.h"
302303
#include "llvm/Transforms/Vectorize/LoopVectorize.h"
303304
#include "llvm/Transforms/Vectorize/SLPVectorizer.h"
304305
#include "llvm/Transforms/Vectorize/VectorCombine.h"

llvm/lib/Passes/PassRegistry.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,7 @@ LOOP_PASS("invalidate<all>", InvalidateAllAnalysesPass())
622622
LOOP_PASS("loop-bound-split", LoopBoundSplitPass())
623623
LOOP_PASS("loop-deletion", LoopDeletionPass())
624624
LOOP_PASS("loop-idiom", LoopIdiomRecognizePass())
625+
LOOP_PASS("loop-idiom-vectorize", LoopIdiomVectorizePass())
625626
LOOP_PASS("loop-instsimplify", LoopInstSimplifyPass())
626627
LOOP_PASS("loop-predication", LoopPredicationPass())
627628
LOOP_PASS("loop-reduce", LoopStrengthReducePass())

llvm/lib/Target/AArch64/AArch64.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ void initializeAArch64DeadRegisterDefinitionsPass(PassRegistry&);
9090
void initializeAArch64ExpandPseudoPass(PassRegistry &);
9191
void initializeAArch64GlobalsTaggingPass(PassRegistry &);
9292
void initializeAArch64LoadStoreOptPass(PassRegistry&);
93-
void initializeAArch64LoopIdiomTransformLegacyPassPass(PassRegistry &);
9493
void initializeAArch64LowerHomogeneousPrologEpilogPass(PassRegistry &);
9594
void initializeAArch64MIPeepholeOptPass(PassRegistry &);
9695
void initializeAArch64O0PreLegalizerCombinerPass(PassRegistry &);

llvm/lib/Target/AArch64/AArch64PassRegistry.def

Lines changed: 0 additions & 20 deletions
This file was deleted.

llvm/lib/Target/AArch64/AArch64TargetMachine.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
#include "AArch64TargetMachine.h"
1313
#include "AArch64.h"
14-
#include "AArch64LoopIdiomTransform.h"
1514
#include "AArch64MachineFunctionInfo.h"
1615
#include "AArch64MachineScheduler.h"
1716
#include "AArch64MacroFusion.h"
@@ -52,6 +51,7 @@
5251
#include "llvm/TargetParser/Triple.h"
5352
#include "llvm/Transforms/CFGuard.h"
5453
#include "llvm/Transforms/Scalar.h"
54+
#include "llvm/Transforms/Vectorize/LoopIdiomVectorize.h"
5555
#include <memory>
5656
#include <optional>
5757
#include <string>
@@ -234,7 +234,6 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAArch64Target() {
234234
initializeAArch64DeadRegisterDefinitionsPass(*PR);
235235
initializeAArch64ExpandPseudoPass(*PR);
236236
initializeAArch64LoadStoreOptPass(*PR);
237-
initializeAArch64LoopIdiomTransformLegacyPassPass(*PR);
238237
initializeAArch64MIPeepholeOptPass(*PR);
239238
initializeAArch64SIMDInstrOptPass(*PR);
240239
initializeAArch64O0PreLegalizerCombinerPass(*PR);
@@ -553,12 +552,9 @@ class AArch64PassConfig : public TargetPassConfig {
553552
void AArch64TargetMachine::registerPassBuilderCallbacks(
554553
PassBuilder &PB, bool PopulateClassToPassNames) {
555554

556-
#define GET_PASS_REGISTRY "AArch64PassRegistry.def"
557-
#include "llvm/Passes/TargetPassRegistry.inc"
558-
559555
PB.registerLateLoopOptimizationsEPCallback(
560556
[=](LoopPassManager &LPM, OptimizationLevel Level) {
561-
LPM.addPass(AArch64LoopIdiomTransformPass());
557+
LPM.addPass(LoopIdiomVectorizePass());
562558
});
563559
}
564560

llvm/lib/Target/AArch64/AArch64TargetMachine.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
#define LLVM_LIB_TARGET_AARCH64_AARCH64TARGETMACHINE_H
1515

1616
#include "AArch64InstrInfo.h"
17-
#include "AArch64LoopIdiomTransform.h"
1817
#include "AArch64Subtarget.h"
1918
#include "llvm/IR/DataLayout.h"
2019
#include "llvm/Target/TargetMachine.h"

llvm/lib/Target/AArch64/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ add_llvm_target(AArch64CodeGen
6565
AArch64ISelLowering.cpp
6666
AArch64InstrInfo.cpp
6767
AArch64LoadStoreOptimizer.cpp
68-
AArch64LoopIdiomTransform.cpp
6968
AArch64LowerHomogeneousPrologEpilog.cpp
7069
AArch64MachineFunctionInfo.cpp
7170
AArch64MachineScheduler.cpp
@@ -112,6 +111,7 @@ add_llvm_target(AArch64CodeGen
112111
Target
113112
TargetParser
114113
TransformUtils
114+
Vectorize
115115

116116
ADD_TO_COMPONENT
117117
AArch64

llvm/lib/Transforms/Vectorize/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
add_llvm_component_library(LLVMVectorize
22
LoadStoreVectorizer.cpp
3+
LoopIdiomVectorize.cpp
34
LoopVectorizationLegality.cpp
45
LoopVectorize.cpp
56
SLPVectorizer.cpp

0 commit comments

Comments
 (0)