Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions llvm/lib/Target/AMDGPU/AMDGPU.h
Original file line number Diff line number Diff line change
Expand Up @@ -440,9 +440,9 @@ void initializeAMDGPUExternalAAWrapperPass(PassRegistry&);

void initializeAMDGPUArgumentUsageInfoPass(PassRegistry &);

ModulePass *createAMDGPUOpenCLEnqueuedBlockLoweringPass();
void initializeAMDGPUOpenCLEnqueuedBlockLoweringPass(PassRegistry &);
extern char &AMDGPUOpenCLEnqueuedBlockLoweringID;
ModulePass *createAMDGPUOpenCLEnqueuedBlockLoweringLegacyPass();
void initializeAMDGPUOpenCLEnqueuedBlockLoweringLegacyPass(PassRegistry &);
extern char &AMDGPUOpenCLEnqueuedBlockLoweringLegacyID;

void initializeGCNNSAReassignPass(PassRegistry &);
extern char &GCNNSAReassignID;
Expand Down
37 changes: 28 additions & 9 deletions llvm/lib/Target/AMDGPU/AMDGPUOpenCLEnqueuedBlockLowering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
//
//===----------------------------------------------------------------------===//

#include "AMDGPUOpenCLEnqueuedBlockLowering.h"
#include "AMDGPU.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/SmallString.h"
Expand All @@ -48,31 +49,49 @@ using namespace llvm;
namespace {

/// Lower enqueued blocks.
class AMDGPUOpenCLEnqueuedBlockLowering : public ModulePass {
class AMDGPUOpenCLEnqueuedBlockLowering {
public:
bool run(Module &M);
};

class AMDGPUOpenCLEnqueuedBlockLoweringLegacy : public ModulePass {
public:
static char ID;

explicit AMDGPUOpenCLEnqueuedBlockLowering() : ModulePass(ID) {}
explicit AMDGPUOpenCLEnqueuedBlockLoweringLegacy() : ModulePass(ID) {}

private:
bool runOnModule(Module &M) override;
};

} // end anonymous namespace

char AMDGPUOpenCLEnqueuedBlockLowering::ID = 0;
char AMDGPUOpenCLEnqueuedBlockLoweringLegacy::ID = 0;

char &llvm::AMDGPUOpenCLEnqueuedBlockLoweringID =
AMDGPUOpenCLEnqueuedBlockLowering::ID;
char &llvm::AMDGPUOpenCLEnqueuedBlockLoweringLegacyID =
AMDGPUOpenCLEnqueuedBlockLoweringLegacy::ID;

INITIALIZE_PASS(AMDGPUOpenCLEnqueuedBlockLowering, DEBUG_TYPE,
INITIALIZE_PASS(AMDGPUOpenCLEnqueuedBlockLoweringLegacy, DEBUG_TYPE,
"Lower OpenCL enqueued blocks", false, false)

ModulePass* llvm::createAMDGPUOpenCLEnqueuedBlockLoweringPass() {
return new AMDGPUOpenCLEnqueuedBlockLowering();
ModulePass *llvm::createAMDGPUOpenCLEnqueuedBlockLoweringLegacyPass() {
return new AMDGPUOpenCLEnqueuedBlockLoweringLegacy();
}

bool AMDGPUOpenCLEnqueuedBlockLoweringLegacy::runOnModule(Module &M) {
AMDGPUOpenCLEnqueuedBlockLowering Impl;
return Impl.run(M);
}

PreservedAnalyses
AMDGPUOpenCLEnqueuedBlockLoweringPass::run(Module &M, ModuleAnalysisManager &) {
AMDGPUOpenCLEnqueuedBlockLowering Impl;
if (Impl.run(M))
return PreservedAnalyses::none();
return PreservedAnalyses::all();
}

bool AMDGPUOpenCLEnqueuedBlockLowering::runOnModule(Module &M) {
bool AMDGPUOpenCLEnqueuedBlockLowering::run(Module &M) {
DenseSet<Function *> Callers;
auto &C = M.getContext();
bool Changed = false;
Expand Down
23 changes: 23 additions & 0 deletions llvm/lib/Target/AMDGPU/AMDGPUOpenCLEnqueuedBlockLowering.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//===- AMDGPUOpenCLEnqueuedBlockLowering.h -----------------------*- C++-*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_LIB_TARGET_AMDGPU_OPENCLENQUEUEDBLOCKLOWERING_H
#define LLVM_LIB_TARGET_AMDGPU_OPENCLENQUEUEDBLOCKLOWERING_H

#include "llvm/IR/PassManager.h"

namespace llvm {
class AMDGPUOpenCLEnqueuedBlockLoweringPass
: public PassInfoMixin<AMDGPUOpenCLEnqueuedBlockLoweringPass> {
public:
AMDGPUOpenCLEnqueuedBlockLoweringPass() = default;
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
};
} // namespace llvm

#endif // LLVM_LIB_TARGET_AMDGPU_OPENCLENQUEUEDBLOCKLOWERING_H
1 change: 1 addition & 0 deletions llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ MODULE_PASS("amdgpu-lower-buffer-fat-pointers",
AMDGPULowerBufferFatPointersPass(*this))
MODULE_PASS("amdgpu-lower-ctor-dtor", AMDGPUCtorDtorLoweringPass())
MODULE_PASS("amdgpu-sw-lower-lds", AMDGPUSwLowerLDSPass(*this))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should move this down in a separate PR.

MODULE_PASS("amdgpu-lower-enqueued-block", AMDGPUOpenCLEnqueuedBlockLoweringPass())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

amdgpu-sw-lower-lds isn't in alphabetical order but that's already wrong

MODULE_PASS("amdgpu-lower-module-lds", AMDGPULowerModuleLDSPass(*this))
MODULE_PASS("amdgpu-perf-hint",
AMDGPUPerfHintAnalysisPass(
Expand Down
7 changes: 4 additions & 3 deletions llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "AMDGPUIGroupLP.h"
#include "AMDGPUISelDAGToDAG.h"
#include "AMDGPUMacroFusion.h"
#include "AMDGPUOpenCLEnqueuedBlockLowering.h"
#include "AMDGPUPerfHintAnalysis.h"
#include "AMDGPUSplitModule.h"
#include "AMDGPUTargetObjectFile.h"
Expand Down Expand Up @@ -499,7 +500,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAMDGPUTarget() {
initializeAMDGPULowerKernelArgumentsPass(*PR);
initializeAMDGPUPromoteKernelArgumentsPass(*PR);
initializeAMDGPULowerKernelAttributesPass(*PR);
initializeAMDGPUOpenCLEnqueuedBlockLoweringPass(*PR);
initializeAMDGPUOpenCLEnqueuedBlockLoweringLegacyPass(*PR);
initializeAMDGPUPostLegalizerCombinerPass(*PR);
initializeAMDGPUPreLegalizerCombinerPass(*PR);
initializeAMDGPURegBankCombinerPass(*PR);
Expand Down Expand Up @@ -1172,7 +1173,7 @@ void AMDGPUPassConfig::addIRPasses() {
addPass(createR600OpenCLImageTypeLoweringPass());

// Replace OpenCL enqueued block function pointers with global variables.
addPass(createAMDGPUOpenCLEnqueuedBlockLoweringPass());
addPass(createAMDGPUOpenCLEnqueuedBlockLoweringLegacyPass());

// Lower LDS accesses to global memory pass if address sanitizer is enabled.
if (EnableSwLowerLDS)
Expand Down Expand Up @@ -1939,7 +1940,7 @@ void AMDGPUCodeGenPassBuilder::addIRPasses(AddIRPass &addPass) const {
addPass(AMDGPUAlwaysInlinePass());
addPass(AlwaysInlinerPass());

// TODO: Missing OpenCLEnqueuedBlockLowering
addPass(AMDGPUOpenCLEnqueuedBlockLoweringPass());

// Runs before PromoteAlloca so the latter can account for function uses
if (EnableLowerModuleLDS)
Expand Down
Loading