Skip to content

Commit cd6e462

Browse files
authored
[CodeGen] Port InterleavedAccess to new pass manager (#74904)
1 parent 67c4033 commit cd6e462

29 files changed

+138
-34
lines changed

llvm/include/llvm/CodeGen/CodeGenPassBuilder.h

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "llvm/Analysis/TypeBasedAliasAnalysis.h"
2525
#include "llvm/CodeGen/CallBrPrepare.h"
2626
#include "llvm/CodeGen/ExpandReductions.h"
27+
#include "llvm/CodeGen/InterleavedAccess.h"
2728
#include "llvm/CodeGen/MachinePassManager.h"
2829
#include "llvm/CodeGen/PreISelIntrinsicLowering.h"
2930
#include "llvm/CodeGen/ReplaceWithVeclib.h"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
//===---- llvm/CodeGen/InterleavedAccess.h ----------------------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
///
9+
/// \file
10+
/// This file contains the declaration of the InterleavedAccessPass class,
11+
/// its corresponding pass name is `interleaved-access`.
12+
///
13+
//===----------------------------------------------------------------------===//
14+
15+
#ifndef LLVM_CODEGEN_INTERLEAVEDACCESS_H
16+
#define LLVM_CODEGEN_INTERLEAVEDACCESS_H
17+
18+
#include "llvm/IR/PassManager.h"
19+
20+
namespace llvm {
21+
22+
class TargetMachine;
23+
24+
class InterleavedAccessPass : public PassInfoMixin<InterleavedAccessPass> {
25+
const TargetMachine *TM;
26+
27+
public:
28+
explicit InterleavedAccessPass(const TargetMachine *TM) : TM(TM) {}
29+
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
30+
};
31+
32+
} // namespace llvm
33+
34+
#endif // LLVM_CODEGEN_INTERLEAVEDACCESS_H

llvm/include/llvm/CodeGen/MachinePassRegistry.def

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ FUNCTION_PASS("expand-large-div-rem", ExpandLargeDivRemPass, ())
4343
FUNCTION_PASS("expand-large-fp-convert", ExpandLargeFpConvertPass, ())
4444
FUNCTION_PASS("expand-reductions", ExpandReductionsPass, ())
4545
FUNCTION_PASS("expandvp", ExpandVectorPredicationPass, ())
46+
FUNCTION_PASS("interleaved-access", InterleavedAccessPass, (TM))
4647
FUNCTION_PASS("lower-constant-intrinsics", LowerConstantIntrinsicsPass, ())
4748
FUNCTION_PASS("lowerinvoke", LowerInvokePass, ())
4849
FUNCTION_PASS("mergeicmps", MergeICmpsPass, ())
@@ -127,7 +128,6 @@ DUMMY_FUNCTION_PASS("expandmemcmp", ExpandMemCmpPass, ())
127128
DUMMY_FUNCTION_PASS("gc-info-printer", GCInfoPrinterPass, ())
128129
DUMMY_FUNCTION_PASS("gc-lowering", GCLoweringPass, ())
129130
DUMMY_FUNCTION_PASS("indirectbr-expand", IndirectBrExpandPass, ())
130-
DUMMY_FUNCTION_PASS("interleaved-access", InterleavedAccessPass, ())
131131
DUMMY_FUNCTION_PASS("select-optimize", SelectOptimizePass, ())
132132
DUMMY_FUNCTION_PASS("shadow-stack-gc-lowering", ShadowStackGCLoweringPass, ())
133133
DUMMY_FUNCTION_PASS("sjljehprepare", SjLjEHPreparePass, ())

llvm/lib/CodeGen/InterleavedAccessPass.cpp

+65-33
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
#include "llvm/ADT/DenseMap.h"
4949
#include "llvm/ADT/SetVector.h"
5050
#include "llvm/ADT/SmallVector.h"
51+
#include "llvm/CodeGen/InterleavedAccess.h"
5152
#include "llvm/CodeGen/TargetLowering.h"
5253
#include "llvm/CodeGen/TargetPassConfig.h"
5354
#include "llvm/CodeGen/TargetSubtargetInfo.h"
@@ -82,22 +83,14 @@ static cl::opt<bool> LowerInterleavedAccesses(
8283

8384
namespace {
8485

85-
class InterleavedAccess : public FunctionPass {
86-
public:
87-
static char ID;
88-
89-
InterleavedAccess() : FunctionPass(ID) {
90-
initializeInterleavedAccessPass(*PassRegistry::getPassRegistry());
91-
}
86+
class InterleavedAccessImpl {
87+
friend class InterleavedAccess;
9288

93-
StringRef getPassName() const override { return "Interleaved Access Pass"; }
94-
95-
bool runOnFunction(Function &F) override;
96-
97-
void getAnalysisUsage(AnalysisUsage &AU) const override {
98-
AU.addRequired<DominatorTreeWrapperPass>();
99-
AU.setPreservesCFG();
100-
}
89+
public:
90+
InterleavedAccessImpl() = default;
91+
InterleavedAccessImpl(DominatorTree *DT, const TargetLowering *TLI)
92+
: DT(DT), TLI(TLI), MaxFactor(TLI->getMaxSupportedInterleaveFactor()) {}
93+
bool runOnFunction(Function &F);
10194

10295
private:
10396
DominatorTree *DT = nullptr;
@@ -141,10 +134,60 @@ class InterleavedAccess : public FunctionPass {
141134
LoadInst *LI);
142135
};
143136

137+
class InterleavedAccess : public FunctionPass {
138+
InterleavedAccessImpl Impl;
139+
140+
public:
141+
static char ID;
142+
143+
InterleavedAccess() : FunctionPass(ID) {
144+
initializeInterleavedAccessPass(*PassRegistry::getPassRegistry());
145+
}
146+
147+
StringRef getPassName() const override { return "Interleaved Access Pass"; }
148+
149+
bool runOnFunction(Function &F) override;
150+
151+
void getAnalysisUsage(AnalysisUsage &AU) const override {
152+
AU.addRequired<DominatorTreeWrapperPass>();
153+
AU.setPreservesCFG();
154+
}
155+
};
156+
144157
} // end anonymous namespace.
145158

159+
PreservedAnalyses InterleavedAccessPass::run(Function &F,
160+
FunctionAnalysisManager &FAM) {
161+
auto *DT = &FAM.getResult<DominatorTreeAnalysis>(F);
162+
auto *TLI = TM->getSubtargetImpl(F)->getTargetLowering();
163+
InterleavedAccessImpl Impl(DT, TLI);
164+
bool Changed = Impl.runOnFunction(F);
165+
166+
if (!Changed)
167+
return PreservedAnalyses::all();
168+
169+
PreservedAnalyses PA;
170+
PA.preserveSet<CFGAnalyses>();
171+
return PA;
172+
}
173+
146174
char InterleavedAccess::ID = 0;
147175

176+
bool InterleavedAccess::runOnFunction(Function &F) {
177+
auto *TPC = getAnalysisIfAvailable<TargetPassConfig>();
178+
if (!TPC || !LowerInterleavedAccesses)
179+
return false;
180+
181+
LLVM_DEBUG(dbgs() << "*** " << getPassName() << ": " << F.getName() << "\n");
182+
183+
Impl.DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
184+
auto &TM = TPC->getTM<TargetMachine>();
185+
Impl.TLI = TM.getSubtargetImpl(F)->getTargetLowering();
186+
Impl.MaxFactor = Impl.TLI->getMaxSupportedInterleaveFactor();
187+
188+
return Impl.runOnFunction(F);
189+
}
190+
148191
INITIALIZE_PASS_BEGIN(InterleavedAccess, DEBUG_TYPE,
149192
"Lower interleaved memory accesses to target specific intrinsics", false,
150193
false)
@@ -228,7 +271,7 @@ static bool isReInterleaveMask(ShuffleVectorInst *SVI, unsigned &Factor,
228271
return false;
229272
}
230273

231-
bool InterleavedAccess::lowerInterleavedLoad(
274+
bool InterleavedAccessImpl::lowerInterleavedLoad(
232275
LoadInst *LI, SmallVector<Instruction *, 32> &DeadInsts) {
233276
if (!LI->isSimple() || isa<ScalableVectorType>(LI->getType()))
234277
return false;
@@ -334,7 +377,7 @@ bool InterleavedAccess::lowerInterleavedLoad(
334377
return true;
335378
}
336379

337-
bool InterleavedAccess::replaceBinOpShuffles(
380+
bool InterleavedAccessImpl::replaceBinOpShuffles(
338381
ArrayRef<ShuffleVectorInst *> BinOpShuffles,
339382
SmallVectorImpl<ShuffleVectorInst *> &Shuffles, LoadInst *LI) {
340383
for (auto *SVI : BinOpShuffles) {
@@ -367,7 +410,7 @@ bool InterleavedAccess::replaceBinOpShuffles(
367410
return !BinOpShuffles.empty();
368411
}
369412

370-
bool InterleavedAccess::tryReplaceExtracts(
413+
bool InterleavedAccessImpl::tryReplaceExtracts(
371414
ArrayRef<ExtractElementInst *> Extracts,
372415
ArrayRef<ShuffleVectorInst *> Shuffles) {
373416
// If there aren't any extractelement instructions to modify, there's nothing
@@ -431,7 +474,7 @@ bool InterleavedAccess::tryReplaceExtracts(
431474
return true;
432475
}
433476

434-
bool InterleavedAccess::lowerInterleavedStore(
477+
bool InterleavedAccessImpl::lowerInterleavedStore(
435478
StoreInst *SI, SmallVector<Instruction *, 32> &DeadInsts) {
436479
if (!SI->isSimple())
437480
return false;
@@ -457,7 +500,7 @@ bool InterleavedAccess::lowerInterleavedStore(
457500
return true;
458501
}
459502

460-
bool InterleavedAccess::lowerDeinterleaveIntrinsic(
503+
bool InterleavedAccessImpl::lowerDeinterleaveIntrinsic(
461504
IntrinsicInst *DI, SmallVector<Instruction *, 32> &DeadInsts) {
462505
LoadInst *LI = dyn_cast<LoadInst>(DI->getOperand(0));
463506

@@ -476,7 +519,7 @@ bool InterleavedAccess::lowerDeinterleaveIntrinsic(
476519
return true;
477520
}
478521

479-
bool InterleavedAccess::lowerInterleaveIntrinsic(
522+
bool InterleavedAccessImpl::lowerInterleaveIntrinsic(
480523
IntrinsicInst *II, SmallVector<Instruction *, 32> &DeadInsts) {
481524
if (!II->hasOneUse())
482525
return false;
@@ -498,18 +541,7 @@ bool InterleavedAccess::lowerInterleaveIntrinsic(
498541
return true;
499542
}
500543

501-
bool InterleavedAccess::runOnFunction(Function &F) {
502-
auto *TPC = getAnalysisIfAvailable<TargetPassConfig>();
503-
if (!TPC || !LowerInterleavedAccesses)
504-
return false;
505-
506-
LLVM_DEBUG(dbgs() << "*** " << getPassName() << ": " << F.getName() << "\n");
507-
508-
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
509-
auto &TM = TPC->getTM<TargetMachine>();
510-
TLI = TM.getSubtargetImpl(F)->getTargetLowering();
511-
MaxFactor = TLI->getMaxSupportedInterleaveFactor();
512-
544+
bool InterleavedAccessImpl::runOnFunction(Function &F) {
513545
// Holds dead instructions that will be erased later.
514546
SmallVector<Instruction *, 32> DeadInsts;
515547
bool Changed = false;

llvm/lib/Passes/PassBuilder.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
#include "llvm/CodeGen/ExpandLargeDivRem.h"
7878
#include "llvm/CodeGen/ExpandLargeFpConvert.h"
7979
#include "llvm/CodeGen/HardwareLoops.h"
80+
#include "llvm/CodeGen/InterleavedAccess.h"
8081
#include "llvm/CodeGen/SafeStack.h"
8182
#include "llvm/CodeGen/TypePromotion.h"
8283
#include "llvm/CodeGen/WasmEHPrepare.h"

llvm/lib/Passes/PassRegistry.def

+1
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ FUNCTION_PASS("inject-tli-mappings", InjectTLIMappings())
318318
FUNCTION_PASS("instcount", InstCountPass())
319319
FUNCTION_PASS("instnamer", InstructionNamerPass())
320320
FUNCTION_PASS("instsimplify", InstSimplifyPass())
321+
FUNCTION_PASS("interleaved-access", InterleavedAccessPass(TM))
321322
FUNCTION_PASS("invalidate<all>", InvalidateAllAnalysesPass())
322323
FUNCTION_PASS("irce", IRCEPass())
323324
FUNCTION_PASS("jump-threading", JumpThreadingPass())

llvm/test/Transforms/InterleavedAccess/AArch64/binopshuffles-inseltpoison.ll

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt < %s -interleaved-access -S | FileCheck %s
3+
; RUN: opt < %s -passes=interleaved-access -S | FileCheck %s
34

45
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
56
target triple = "aarch64--linux-gnu"

llvm/test/Transforms/InterleavedAccess/AArch64/binopshuffles.ll

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt < %s -interleaved-access -S | FileCheck %s
3+
; RUN: opt < %s -passes=interleaved-access -S | FileCheck %s
34

45
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
56
target triple = "aarch64--linux-gnu"

llvm/test/Transforms/InterleavedAccess/AArch64/fixed-deinterleave-intrinsics.ll

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
22
; RUN: opt < %s -interleaved-access -S | FileCheck %s --check-prefix=NEON
33
; RUN: opt < %s -interleaved-access -mtriple=aarch64-linux-gnu -mattr=+sve -force-streaming-compatible-sve -S | FileCheck %s --check-prefix=SVE-FIXED
4+
; RUN: opt < %s -passes=interleaved-access -S | FileCheck %s --check-prefix=NEON
5+
; RUN: opt < %s -passes=interleaved-access -mtriple=aarch64-linux-gnu -mattr=+sve -force-streaming-compatible-sve -S | FileCheck %s --check-prefix=SVE-FIXED
46

57
target triple = "aarch64-linux-gnu"
68

llvm/test/Transforms/InterleavedAccess/AArch64/interleaved-accesses-extract-user-inseltpoison.ll

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
; RUN: opt < %s -interleaved-access -S | FileCheck %s
2+
; RUN: opt < %s -passes=interleaved-access -S | FileCheck %s
23

34
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
45
target triple = "aarch64--linux-gnu"

llvm/test/Transforms/InterleavedAccess/AArch64/interleaved-accesses-extract-user.ll

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
; RUN: opt < %s -interleaved-access -S | FileCheck %s
2+
; RUN: opt < %s -passes=interleaved-access -S | FileCheck %s
23

34
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
45
target triple = "aarch64--linux-gnu"

llvm/test/Transforms/InterleavedAccess/AArch64/interleaved-accesses-inseltpoison.ll

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
; RUN: opt < %s -interleaved-access -S | FileCheck %s -check-prefix=NEON
22
; RUN: opt < %s -mattr=-neon -interleaved-access -S | FileCheck %s -check-prefix=NO_NEON
3+
; RUN: opt < %s -passes=interleaved-access -S | FileCheck %s -check-prefix=NEON
4+
; RUN: opt < %s -mattr=-neon -passes=interleaved-access -S | FileCheck %s -check-prefix=NO_NEON
35

46
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
57
target triple = "aarch64--linux-gnu"

llvm/test/Transforms/InterleavedAccess/AArch64/interleaved-accesses.ll

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
; RUN: opt < %s -interleaved-access -S | FileCheck %s -check-prefix=NEON
22
; RUN: opt < %s -mattr=-neon -interleaved-access -S | FileCheck %s -check-prefix=NO_NEON
3+
; RUN: opt < %s -passes=interleaved-access -S | FileCheck %s -check-prefix=NEON
4+
; RUN: opt < %s -mattr=-neon -passes=interleaved-access -S | FileCheck %s -check-prefix=NO_NEON
35

46
target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
57
target triple = "aarch64--linux-gnu"

llvm/test/Transforms/InterleavedAccess/AArch64/scalable-deinterleave-intrinsics.ll

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
22
; RUN: opt < %s -interleaved-access -S | FileCheck %s
3+
; RUN: opt < %s -passes=interleaved-access -S | FileCheck %s
34

45
target triple = "aarch64-linux-gnu"
56

llvm/test/Transforms/InterleavedAccess/AArch64/sve-interleaved-accesses.ll

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
; RUN: opt < %s -interleaved-access -S | FileCheck %s
2+
; RUN: opt < %s -passes=interleaved-access -S | FileCheck %s
23

34
target triple = "aarch64-linux-gnu"
45

llvm/test/Transforms/InterleavedAccess/ARM/interleaved-accesses-extract-user-inseltpoison.ll

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
; RUN: opt < %s -mattr=+neon -interleaved-access -S | FileCheck %s
2+
; RUN: opt < %s -mattr=+neon -passes=interleaved-access -S | FileCheck %s
23

34
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64"
45
target triple = "arm---eabi"

llvm/test/Transforms/InterleavedAccess/ARM/interleaved-accesses-extract-user.ll

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
; RUN: opt < %s -mattr=+neon -interleaved-access -S | FileCheck %s
2+
; RUN: opt < %s -mattr=+neon -passes=interleaved-access -S | FileCheck %s
23

34
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64"
45
target triple = "arm---eabi"

llvm/test/Transforms/InterleavedAccess/ARM/interleaved-accesses-inseltpoison.ll

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
; RUN: opt < %s -mattr=+neon -interleaved-access -S | FileCheck %s --check-prefix=CHECK-NEON
33
; RUN: opt < %s -mattr=+mve.fp -interleaved-access -S | FileCheck %s --check-prefix=CHECK-MVE
44
; RUN: opt < %s -interleaved-access -S | FileCheck %s --check-prefix=CHECK-NONE
5+
; RUN: opt < %s -mattr=+neon -passes=interleaved-access -S | FileCheck %s --check-prefix=CHECK-NEON
6+
; RUN: opt < %s -mattr=+mve.fp -passes=interleaved-access -S | FileCheck %s --check-prefix=CHECK-MVE
7+
; RUN: opt < %s -passes=interleaved-access -S | FileCheck %s --check-prefix=CHECK-NONE
58

69
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64"
710
target triple = "arm---eabi"

llvm/test/Transforms/InterleavedAccess/ARM/interleaved-accesses.ll

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
; RUN: opt < %s -mattr=+neon -interleaved-access -S | FileCheck %s --check-prefix=CHECK-NEON
33
; RUN: opt < %s -mattr=+mve.fp -interleaved-access -S | FileCheck %s --check-prefix=CHECK-MVE
44
; RUN: opt < %s -interleaved-access -S | FileCheck %s --check-prefix=CHECK-NONE
5+
; RUN: opt < %s -mattr=+neon -passes=interleaved-access -S | FileCheck %s --check-prefix=CHECK-NEON
6+
; RUN: opt < %s -mattr=+mve.fp -passes=interleaved-access -S | FileCheck %s --check-prefix=CHECK-MVE
7+
; RUN: opt < %s -passes=interleaved-access -S | FileCheck %s --check-prefix=CHECK-NONE
58

69
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64"
710
target triple = "arm---eabi"

llvm/test/Transforms/InterleavedAccess/RISCV/interleaved-accesses.ll

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt < %s -mtriple=riscv32 -mattr=+v -interleaved-access -S | FileCheck %s --check-prefix=RV32
33
; RUN: opt < %s -mtriple=riscv64 -mattr=+v -interleaved-access -S | FileCheck %s --check-prefix=RV64
4+
; RUN: opt < %s -mtriple=riscv32 -mattr=+v -passes=interleaved-access -S | FileCheck %s --check-prefix=RV32
5+
; RUN: opt < %s -mtriple=riscv64 -mattr=+v -passes=interleaved-access -S | FileCheck %s --check-prefix=RV64
46

57
define void @load_factor2(ptr %ptr) {
68
; RV32-LABEL: @load_factor2(

llvm/test/Transforms/InterleavedAccess/RISCV/zve32x.ll

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt < %s -mtriple=riscv64 -mattr=+zve32x,+zvl128b -interleaved-access -S | FileCheck %s -check-prefix=ZVE32X
33
; RUN: opt < %s -mtriple=riscv64 -mattr=+zve64x,+zvl128b -interleaved-access -S | FileCheck %s -check-prefix=ZVE64X
4+
; RUN: opt < %s -mtriple=riscv64 -mattr=+zve32x,+zvl128b -passes=interleaved-access -S | FileCheck %s -check-prefix=ZVE32X
5+
; RUN: opt < %s -mtriple=riscv64 -mattr=+zve64x,+zvl128b -passes=interleaved-access -S | FileCheck %s -check-prefix=ZVE64X
46

57
define <4 x i1> @load_large_vector(ptr %p) {
68
; ZVE32X-LABEL: @load_large_vector(

llvm/test/Transforms/InterleavedAccess/RISCV/zvl32b.ll

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt < %s -mtriple=riscv32 -mattr=+zve32x,+zvl32b -interleaved-access -S | FileCheck %s -check-prefix=ZVL32B
33
; RUN: opt < %s -mtriple=riscv32 -mattr=+zve32x,+zvl128b -interleaved-access -S | FileCheck %s -check-prefix=ZVL128B
4+
; RUN: opt < %s -mtriple=riscv32 -mattr=+zve32x,+zvl32b -passes=interleaved-access -S | FileCheck %s -check-prefix=ZVL32B
5+
; RUN: opt < %s -mtriple=riscv32 -mattr=+zve32x,+zvl128b -passes=interleaved-access -S | FileCheck %s -check-prefix=ZVL128B
46

57
; Make sure that we don't lower interleaved loads that won't fit into the minimum vlen
68

llvm/test/Transforms/InterleavedAccess/X86/interleave-load-extract-shuffle-changes.ll

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt -interleaved-access -S %s | FileCheck %s
3+
; RUN: opt -passes=interleaved-access -S %s | FileCheck %s
34

45
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
56
target triple = "x86_64-apple-macosx10.15.0"

llvm/test/Transforms/InterleavedAccess/X86/interleaved-accesses-64bits-avx-inseltpoison.ll

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt < %s -mtriple=x86_64-pc-linux -mattr=+avx -interleaved-access -S | FileCheck %s
3+
; RUN: opt < %s -mtriple=x86_64-pc-linux -mattr=+avx -passes=interleaved-access -S | FileCheck %s
34

45
; This file tests the function `llvm::lowerInterleavedLoad/Store`.
56

llvm/test/Transforms/InterleavedAccess/X86/interleaved-accesses-64bits-avx.ll

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt < %s -mtriple=x86_64-pc-linux -mattr=+avx -interleaved-access -S | FileCheck %s
3+
; RUN: opt < %s -mtriple=x86_64-pc-linux -mattr=+avx -passes=interleaved-access -S | FileCheck %s
34

45
; This file tests the function `llvm::lowerInterleavedLoad/Store`.
56

0 commit comments

Comments
 (0)