LLVM 24.0.0git
AMDGPUInstrInfo.cpp
Go to the documentation of this file.
1//===-- AMDGPUInstrInfo.cpp - Base class for AMD GPU InstrInfo ------------===//
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/// \brief Implementation of the TargetInstrInfo class that is common to all
11/// AMD GPUs.
12//
13//===----------------------------------------------------------------------===//
14
15#include "AMDGPUInstrInfo.h"
16#include "AMDGPU.h"
19#include "llvm/IR/Constants.h"
20#include "llvm/IR/Instruction.h"
21#include "llvm/IR/Value.h"
22
23using namespace llvm;
24
26 return I.getOperand(I.getNumExplicitDefs()).getIntrinsicID();
27}
28
29// TODO: Should largely merge with AMDGPUTTIImpl::isSourceOfDivergence.
31 const Value *Ptr = MMO->getValue();
32 if (!Ptr) {
33 if (const PseudoSourceValue *PSV = MMO->getPseudoValue()) {
34 return PSV->isConstantPool() || PSV->isStack() || PSV->isGOT() ||
35 PSV->isJumpTable();
36 }
37
38 // Unknown value.
39 return false;
40 }
41
42 // UndefValue means this is a load of a kernel input. These are uniform.
43 // Sometimes LDS instructions have constant pointers.
45 return true;
46
48 return true;
49
50 if (const Argument *Arg = dyn_cast<Argument>(Ptr))
51 return AMDGPU::isArgPassedInSGPR(Arg);
52
54 return I && I->getMetadata("amdgpu.uniform");
55}
Contains the definition of a TargetInstrInfo class that is common to all AMD GPUs.
This file contains the declarations for the subclasses of Constant, which represent the different fla...
This class represents an incoming formal argument to a Function.
Definition Argument.h:32
Representation of each machine instruction.
A description of a memory reference used in the backend.
const PseudoSourceValue * getPseudoValue() const
unsigned getAddrSpace() const
const Value * getValue() const
Return the base address of the memory access.
Special value supplied for machine level alias analysis.
LLVM Value Representation.
Definition Value.h:75
@ CONSTANT_ADDRESS_32BIT
Address space for 32-bit constant memory.
bool isArgPassedInSGPR(const Argument *A)
bool isUniformMMO(const MachineMemOperand *MMO)
Intrinsic::ID getIntrinsicID(const MachineInstr &I)
Return the intrinsic ID for opcodes with the G_AMDGPU_INTRIN_ prefix.
This is an optimization pass for GlobalISel generic memory operations.
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:643
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
Definition Casting.h:547