Skip to content

Commit ffde06f

Browse files
authored
[NFC][SPIRV] Move SPIRVStripConvergenceIntrinsics to Utils (#188537)
The `SPIRVStripConvergenceIntrinsic` pass was written as a spirv pass as it is the currently the only target that emits convergence tokens during codegen. There is nothing target specific to the pass, and, we plan to emit convergence tokens when targeting DirectX (and all targets in general), so move the pass to a common place. The previous pass used temporary `Undef`s, as part of moving the pass we can simply reverse the traverse order to remove the use of `Undef` as it is deprecated. Enables the pass for targeting DirectX and is a pre-req for: #188792. Assisted by: Github Copilot
1 parent dcfe195 commit ffde06f

16 files changed

Lines changed: 265 additions & 93 deletions

File tree

llvm/include/llvm/InitializePasses.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,8 @@ LLVM_ABI void initializeStackSafetyInfoWrapperPassPass(PassRegistry &);
322322
LLVM_ABI void initializeStackSlotColoringLegacyPass(PassRegistry &);
323323
LLVM_ABI void
324324
initializeStraightLineStrengthReduceLegacyPassPass(PassRegistry &);
325+
LLVM_ABI void
326+
initializeStripConvergenceIntrinsicsLegacyPassPass(PassRegistry &);
325327
LLVM_ABI void initializeStripDebugMachineModulePass(PassRegistry &);
326328
LLVM_ABI void initializeStructurizeCFGLegacyPassPass(PassRegistry &);
327329
LLVM_ABI void initializeTailCallElimPass(PassRegistry &);

llvm/include/llvm/Transforms/Utils.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,13 @@ LLVM_ABI Pass *createCanonicalizeFreezeInLoopsPass();
129129
// functions that are registered in @llvm.global_ctors and which contain a call
130130
// to `__cxa_atexit` to register their destructor functions.
131131
LLVM_ABI ModulePass *createLowerGlobalDtorsLegacyPass();
132+
133+
//===----------------------------------------------------------------------===//
134+
//
135+
// createStripConvergenceIntrinsicsPass - Strip convergence intrinsics and
136+
// convergencectrl operand bundles.
137+
//
138+
LLVM_ABI FunctionPass *createStripConvergenceIntrinsicsPass();
132139
} // namespace llvm
133140

134141
#endif
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//===- StripConvergenceIntrinsics.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+
/// \file
9+
/// This pass strips convergence intrinsics and operand bundles as those are
10+
/// only useful when modifying the CFG during IR passes.
11+
///
12+
//===----------------------------------------------------------------------===//
13+
14+
#ifndef LLVM_TRANSFORMS_UTILS_STRIPCONVERGENCEINTRINSICS_H
15+
#define LLVM_TRANSFORMS_UTILS_STRIPCONVERGENCEINTRINSICS_H
16+
17+
#include "llvm/IR/PassManager.h"
18+
19+
namespace llvm {
20+
21+
class StripConvergenceIntrinsicsPass
22+
: public PassInfoMixin<StripConvergenceIntrinsicsPass> {
23+
public:
24+
PreservedAnalyses run(Function &F, FunctionAnalysisManager &);
25+
};
26+
27+
} // namespace llvm
28+
29+
#endif // LLVM_TRANSFORMS_UTILS_STRIPCONVERGENCEINTRINSICS_H

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,7 @@
374374
#include "llvm/Transforms/Utils/PredicateInfo.h"
375375
#include "llvm/Transforms/Utils/ProfileVerify.h"
376376
#include "llvm/Transforms/Utils/RelLookupTableConverter.h"
377+
#include "llvm/Transforms/Utils/StripConvergenceIntrinsics.h"
377378
#include "llvm/Transforms/Utils/StripGCRelocates.h"
378379
#include "llvm/Transforms/Utils/StripNonLineTableDebugInfo.h"
379380
#include "llvm/Transforms/Utils/SymbolRewriter.h"

llvm/lib/Passes/PassRegistry.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,7 @@ FUNCTION_PASS("sjlj-eh-prepare", SjLjEHPreparePass(TM))
542542
FUNCTION_PASS("slp-vectorizer", SLPVectorizerPass())
543543
FUNCTION_PASS("slsr", StraightLineStrengthReducePass())
544544
FUNCTION_PASS("stack-protector", StackProtectorPass(*TM))
545+
FUNCTION_PASS("strip-convergence-intrinsics", StripConvergenceIntrinsicsPass())
545546
FUNCTION_PASS("strip-gc-relocates", StripGCRelocates())
546547
FUNCTION_PASS("tailcallelim", TailCallElimPass())
547548
FUNCTION_PASS("transform-warning", WarnMissedTransformationsPass())

llvm/lib/Target/DirectX/DirectXTargetMachine.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
#include "llvm/Transforms/IPO/GlobalDCE.h"
5151
#include "llvm/Transforms/Scalar.h"
5252
#include "llvm/Transforms/Scalar/Scalarizer.h"
53+
#include "llvm/Transforms/Utils.h"
5354
#include <optional>
5455

5556
using namespace llvm;
@@ -81,6 +82,7 @@ LLVMInitializeDirectXTarget() {
8182
initializeDXILForwardHandleAccessesLegacyPass(*PR);
8283
initializeDSELegacyPassPass(*PR);
8384
initializeDXILCBufferAccessLegacyPass(*PR);
85+
initializeStripConvergenceIntrinsicsLegacyPassPass(*PR);
8486
}
8587

8688
class DXILTargetObjectFile : public TargetLoweringObjectFile {
@@ -110,6 +112,7 @@ class DirectXPassConfig : public TargetPassConfig {
110112

111113
FunctionPass *createTargetRegisterAllocator(bool) override { return nullptr; }
112114
void addCodeGenPrepare() override {
115+
addPass(createStripConvergenceIntrinsicsPass());
113116
addPass(createDXILFinalizeLinkageLegacyPass());
114117
addPass(createGlobalDCEPass());
115118
addPass(createDXILMemIntrinsicsLegacyPass());

llvm/lib/Target/SPIRV/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ add_llvm_target(SPIRVCodeGen
2929
SPIRVInstructionSelector.cpp
3030
SPIRVLegalizeImplicitBinding.cpp
3131
SPIRVLegalizeZeroSizeArrays.cpp
32-
SPIRVStripConvergentIntrinsics.cpp
3332
SPIRVLegalizePointerCast.cpp
3433
SPIRVMergeRegionExitTargets.cpp
3534
SPIRVISelLowering.cpp

llvm/lib/Target/SPIRV/SPIRV.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ FunctionPass *createSPIRVStructurizerPass();
2424
ModulePass *createSPIRVCBufferAccessLegacyPass();
2525
ModulePass *createSPIRVPushConstantAccessLegacyPass(SPIRVTargetMachine *TM);
2626
FunctionPass *createSPIRVMergeRegionExitTargetsPass();
27-
FunctionPass *createSPIRVStripConvergenceIntrinsicsPass();
2827
ModulePass *createSPIRVLegalizeImplicitBindingPass();
2928
ModulePass *createSPIRVLegalizeZeroSizeArraysPass(const SPIRVTargetMachine &TM);
3029
FunctionPass *createSPIRVLegalizePointerCastPass(SPIRVTargetMachine *TM);
@@ -57,7 +56,6 @@ void initializeSPIRVRegularizerPass(PassRegistry &);
5756
void initializeSPIRVMergeRegionExitTargetsPass(PassRegistry &);
5857
void initializeSPIRVPrepareFunctionsPass(PassRegistry &);
5958
void initializeSPIRVPrepareGlobalsPass(PassRegistry &);
60-
void initializeSPIRVStripConvergentIntrinsicsPass(PassRegistry &);
6159
void initializeSPIRVLegalizeImplicitBindingPass(PassRegistry &);
6260
void initializeSPIRVLegalizeZeroSizeArraysLegacyPass(PassRegistry &);
6361
void initializeSPIRVCtorDtorLoweringLegacyPass(PassRegistry &);

llvm/lib/Target/SPIRV/SPIRVStripConvergentIntrinsics.cpp

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

llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeSPIRVTarget() {
6666
initializeSPIRVEmitNonSemanticDIPass(PR);
6767
initializeSPIRVPrepareFunctionsPass(PR);
6868
initializeSPIRVPrepareGlobalsPass(PR);
69-
initializeSPIRVStripConvergentIntrinsicsPass(PR);
7069
initializeSPIRVCtorDtorLoweringLegacyPass(PR);
7170
}
7271

@@ -229,7 +228,7 @@ void SPIRVPassConfig::addISelPrepare() {
229228
addPass(createLoopSimplifyPass());
230229
}
231230
SPIRVTargetMachine &TM = getTM<SPIRVTargetMachine>();
232-
addPass(createSPIRVStripConvergenceIntrinsicsPass());
231+
addPass(createStripConvergenceIntrinsicsPass());
233232
addPass(createSPIRVLegalizeImplicitBindingPass());
234233
addPass(createSPIRVLegalizeZeroSizeArraysPass(TM));
235234
addPass(createSPIRVCBufferAccessLegacyPass());

0 commit comments

Comments
 (0)