Skip to content

Commit e6b8edc

Browse files
committed
[AArch64][LoopIdiom] Generalize AArch64LoopIdiomTransform into LoopIdiomTransform
To facilitate sharing LoopIdiomTransform between AArch64 and RISC-V, this patch first moves AArch64LoopIdiomTransform from lib/Target/AArch64 to lib/Transforms/Vectorize. In addition, key component that is subject to differ from RVV's vectorization style is factored out preemptively in this patch.
1 parent dbc3e26 commit e6b8edc

File tree

11 files changed

+400
-493
lines changed

11 files changed

+400
-493
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,21 @@
1-
//===- AArch64LoopIdiomTransform.h --------------------------------------===//
1+
//===----------LoopIdiomTransform.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_LOOPIDIOMTRANSFORM_H
10+
#define LLVM_LIB_TRANSFORMS_VECTORIZE_LOOPIDIOMTRANSFORM_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 LoopIdiomTransformPass : PassInfoMixin<LoopIdiomTransformPass> {
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_LOOPIDIOMTRANSFORM_H

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@
297297
#include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h"
298298
#include "llvm/Transforms/Utils/UnifyLoopExits.h"
299299
#include "llvm/Transforms/Vectorize/LoadStoreVectorizer.h"
300+
#include "llvm/Transforms/Vectorize/LoopIdiomTransform.h"
300301
#include "llvm/Transforms/Vectorize/LoopVectorize.h"
301302
#include "llvm/Transforms/Vectorize/SLPVectorizer.h"
302303
#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
@@ -621,6 +621,7 @@ LOOP_PASS("invalidate<all>", InvalidateAllAnalysesPass())
621621
LOOP_PASS("loop-bound-split", LoopBoundSplitPass())
622622
LOOP_PASS("loop-deletion", LoopDeletionPass())
623623
LOOP_PASS("loop-idiom", LoopIdiomRecognizePass())
624+
LOOP_PASS("loop-idiom-transform", LoopIdiomTransformPass())
624625
LOOP_PASS("loop-instsimplify", LoopInstSimplifyPass())
625626
LOOP_PASS("loop-predication", LoopPredicationPass())
626627
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/LoopIdiomTransform.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(LoopIdiomTransformPass());
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+
LoopIdiomTransform.cpp
34
LoopVectorizationLegality.cpp
45
LoopVectorize.cpp
56
SLPVectorizer.cpp

0 commit comments

Comments
 (0)