1 //===-- AMDGPUAnnotateUniformValues.cpp - ---------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
11 /// This pass adds amdgpu.uniform metadata to IR values so this information
12 /// can be used during instruction selection.
14 //===----------------------------------------------------------------------===//
17 #include "AMDGPUIntrinsicInfo.h"
18 #include "llvm/Analysis/DivergenceAnalysis.h"
19 #include "llvm/IR/InstVisitor.h"
20 #include "llvm/IR/IRBuilder.h"
21 #include "llvm/Support/Debug.h"
22 #include "llvm/Support/raw_ostream.h"
24 #define DEBUG_TYPE "amdgpu-annotate-uniform"
30 class AMDGPUAnnotateUniformValues : public FunctionPass,
31 public InstVisitor<AMDGPUAnnotateUniformValues> {
32 DivergenceAnalysis *DA;
36 AMDGPUAnnotateUniformValues() :
38 bool doInitialization(Module &M) override;
39 bool runOnFunction(Function &F) override;
40 const char *getPassName() const override { return "AMDGPU Annotate Uniform Values"; }
41 void getAnalysisUsage(AnalysisUsage &AU) const override {
42 AU.addRequired<DivergenceAnalysis>();
46 void visitLoadInst(LoadInst &I);
50 } // End anonymous namespace
52 INITIALIZE_PASS_BEGIN(AMDGPUAnnotateUniformValues, DEBUG_TYPE,
53 "Add AMDGPU uniform metadata", false, false)
54 INITIALIZE_PASS_DEPENDENCY(DivergenceAnalysis)
55 INITIALIZE_PASS_END(AMDGPUAnnotateUniformValues, DEBUG_TYPE,
56 "Add AMDGPU uniform metadata", false, false)
58 char AMDGPUAnnotateUniformValues::ID = 0;
60 void AMDGPUAnnotateUniformValues::visitLoadInst(LoadInst &I) {
61 Value *Ptr = I.getPointerOperand();
62 if (!DA->isUniform(Ptr))
65 if (Instruction *PtrI = dyn_cast<Instruction>(Ptr))
66 PtrI->setMetadata("amdgpu.uniform", MDNode::get(I.getContext(), {}));
70 bool AMDGPUAnnotateUniformValues::doInitialization(Module &M) {
74 bool AMDGPUAnnotateUniformValues::runOnFunction(Function &F) {
75 DA = &getAnalysis<DivergenceAnalysis>();
82 llvm::createAMDGPUAnnotateUniformValues() {
83 return new AMDGPUAnnotateUniformValues();