LLVM
24.0.0git
lib
Target
AMDGPU
GCNPreRAAntiHints.h
Go to the documentation of this file.
1
//===- GCNPreRAAntiHints.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
#ifndef LLVM_LIB_TARGET_AMDGPU_GCNPRERAANTIHINTS_H
10
#define LLVM_LIB_TARGET_AMDGPU_GCNPRERAANTIHINTS_H
11
12
#include "
llvm/ADT/SmallVector.h
"
13
#include "
llvm/Support/CommandLine.h
"
14
15
namespace
llvm
{
16
17
class
MachineFunction
;
18
class
MachineInstr
;
19
class
MachineRegisterInfo
;
20
class
LiveIntervals
;
21
class
SIRegisterInfo
;
22
class
SIInstrInfo
;
23
class
GCNSubtarget
;
24
class
TargetSchedModel
;
25
26
namespace
AMDGPU
{
27
28
using
HazardClassMask
=
uint32_t
;
29
namespace
HazardClass
{
30
31
// Coherent with CoExec instruction types
32
enum :
HazardClassMask
{
33
None
= 0,
34
CTRL
= 1u << 0,
35
VALU
= 1u << 1,
36
TRANS
= 1u << 2,
37
SALU
= 1u << 3,
38
DS
= 1u << 4,
39
VMEM
= 1u << 5,
40
SMEM
= 1u << 6,
41
WMMA
= 1u << 7,
42
MFMA
= 1u << 8,
43
EXP
= 1u << 9,
44
};
45
}
// namespace HazardClass
46
47
enum class
HazardOperand
:
uint8_t
{
48
None
,
49
Def
,
50
Src0
,
51
Src1
,
52
Src2
,
53
Idx
,
54
Vaddr
,
55
AnySrc
,
56
AnyUse
,
57
};
58
59
enum class
ConsumerHint
:
uint8_t
{
60
OneDirectional
,
61
Symmetric
,
62
};
63
64
struct
HazardContext
{
65
const
SIInstrInfo
*
TII
;
66
const
SIRegisterInfo
*
TRI
;
67
MachineRegisterInfo
*
MRI
;
68
LiveIntervals
*
LIS
;
69
const
GCNSubtarget
*
ST
;
70
const
TargetSchedModel
*
SchedModel
;
71
};
72
73
struct
ClassMatch
{
74
HazardClassMask
AnyOf
= 0;
75
bool
matches
(
HazardClassMask
Mask)
const
{
return
!
AnyOf
|| (Mask &
AnyOf
); }
76
};
77
78
// To enable or disable the whole rule.
79
using
RulePredicate
=
bool
(*)(
const
HazardContext
&);
80
81
// To gate the rule for producer or consumer.
82
using
InstPredicate
=
bool
(*)(
const
MachineInstr
&,
const
HazardContext
&);
83
84
// This helps advancing a window for the WAW/WAR case where a RAW sits between
85
// the producer and the consumer.
86
using
AdvanceForRawWindowFn
=
unsigned
(*)(
const
MachineInstr
&Producer,
87
HazardClassMask
ReaderClass,
88
const
HazardContext
&Ctx);
89
90
struct
HazardSide
{
91
ClassMatch
Match
;
92
HazardOperand
Op
=
HazardOperand::None
;
93
InstPredicate
Predicate
=
nullptr
;
94
};
95
96
// Length of a hazard window in wait states.
97
// Precedence: OptWindowLength --> Fn --> WindowLength.
98
struct
WindowSpec
{
99
unsigned
WindowLength
= 0;
100
const
cl::opt<unsigned>
*
OptWindowLength
=
nullptr
;
101
unsigned
(*
Fn
)(
const
MachineInstr
&Producer,
102
const
HazardContext
&Ctx) =
nullptr
;
103
};
104
105
struct
ConsumerTarget
{
106
HazardSide
Side
;
107
WindowSpec
Window
;
108
HazardClassMask
CounterMask
=
HazardClass::None
;
109
ConsumerHint
Hint
=
ConsumerHint::OneDirectional
;
110
};
111
112
struct
HazardAntiHintRule
{
113
RulePredicate
Predicate
=
nullptr
;
114
HazardSide
Producer
;
115
SmallVector<ConsumerTarget, 3>
Consumers
;
116
AdvanceForRawWindowFn
AdvanceForRawWindow
=
nullptr
;
117
};
118
119
void
applyAntiHintRules
(
MachineFunction
&MF,
const
HazardContext
&Ctx);
120
121
}
// namespace AMDGPU
122
}
// namespace llvm
123
124
#endif
// LLVM_LIB_TARGET_AMDGPU_GCNPRERAANTIHINTS_H
CommandLine.h
SmallVector.h
This file defines the SmallVector class.
bool
llvm::GCNSubtarget
Definition
GCNSubtarget.h:46
llvm::LiveIntervals
Definition
LiveIntervals.h:53
llvm::MachineFunction
Definition
MachineFunction.h:286
llvm::MachineInstr
Representation of each machine instruction.
Definition
MachineInstr.h:74
llvm::MachineRegisterInfo
MachineRegisterInfo - Keep track of information for virtual and physical registers,...
Definition
MachineRegisterInfo.h:55
llvm::SIInstrInfo
Definition
SIInstrInfo.h:109
llvm::SIRegisterInfo
Definition
SIRegisterInfo.h:45
llvm::SmallVector
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Definition
SmallVector.h:1252
llvm::TargetSchedModel
Provide an instruction scheduling machine model to CodeGen passes.
Definition
TargetSchedule.h:31
llvm::cl::opt
Definition
CommandLine.h:1447
uint32_t
uint8_t
unsigned
llvm::AMDGPU::HazardClass
Definition
GCNPreRAAntiHints.h:29
llvm::AMDGPU::HazardClass::DS
@ DS
Definition
GCNPreRAAntiHints.h:38
llvm::AMDGPU::HazardClass::VALU
@ VALU
Definition
GCNPreRAAntiHints.h:35
llvm::AMDGPU::HazardClass::VMEM
@ VMEM
Definition
GCNPreRAAntiHints.h:39
llvm::AMDGPU::HazardClass::TRANS
@ TRANS
Definition
GCNPreRAAntiHints.h:36
llvm::AMDGPU::HazardClass::MFMA
@ MFMA
Definition
GCNPreRAAntiHints.h:42
llvm::AMDGPU::HazardClass::CTRL
@ CTRL
Definition
GCNPreRAAntiHints.h:34
llvm::AMDGPU::HazardClass::EXP
@ EXP
Definition
GCNPreRAAntiHints.h:43
llvm::AMDGPU::HazardClass::None
@ None
Definition
GCNPreRAAntiHints.h:33
llvm::AMDGPU::HazardClass::SALU
@ SALU
Definition
GCNPreRAAntiHints.h:37
llvm::AMDGPU::HazardClass::WMMA
@ WMMA
Definition
GCNPreRAAntiHints.h:41
llvm::AMDGPU::HazardClass::SMEM
@ SMEM
Definition
GCNPreRAAntiHints.h:40
llvm::AMDGPU
Definition
AMDGPUMetadataVerifier.h:34
llvm::AMDGPU::ConsumerHint
ConsumerHint
Definition
GCNPreRAAntiHints.h:59
llvm::AMDGPU::ConsumerHint::OneDirectional
@ OneDirectional
Definition
GCNPreRAAntiHints.h:60
llvm::AMDGPU::ConsumerHint::Symmetric
@ Symmetric
Definition
GCNPreRAAntiHints.h:61
llvm::AMDGPU::HazardClassMask
uint32_t HazardClassMask
Definition
GCNPreRAAntiHints.h:28
llvm::AMDGPU::None
@ None
Definition
AMDGPURegBankLegalizeRules.h:170
llvm::AMDGPU::HazardOperand
HazardOperand
Definition
GCNPreRAAntiHints.h:47
llvm::AMDGPU::HazardOperand::AnySrc
@ AnySrc
Definition
GCNPreRAAntiHints.h:55
llvm::AMDGPU::HazardOperand::Idx
@ Idx
Definition
GCNPreRAAntiHints.h:53
llvm::AMDGPU::HazardOperand::AnyUse
@ AnyUse
Definition
GCNPreRAAntiHints.h:56
llvm::AMDGPU::HazardOperand::Src0
@ Src0
Definition
GCNPreRAAntiHints.h:50
llvm::AMDGPU::HazardOperand::None
@ None
Definition
GCNPreRAAntiHints.h:48
llvm::AMDGPU::HazardOperand::Src2
@ Src2
Definition
GCNPreRAAntiHints.h:52
llvm::AMDGPU::HazardOperand::Vaddr
@ Vaddr
Definition
GCNPreRAAntiHints.h:54
llvm::AMDGPU::HazardOperand::Src1
@ Src1
Definition
GCNPreRAAntiHints.h:51
llvm::AMDGPU::HazardOperand::Def
@ Def
Definition
GCNPreRAAntiHints.h:49
llvm::AMDGPU::RulePredicate
bool(*)(const HazardContext &) RulePredicate
Definition
GCNPreRAAntiHints.h:79
llvm::AMDGPU::applyAntiHintRules
void applyAntiHintRules(MachineFunction &MF, const HazardContext &Ctx)
Definition
GCNPreRAAntiHints.cpp:543
llvm::AMDGPU::AdvanceForRawWindowFn
unsigned(*)(const MachineInstr &Producer, HazardClassMask ReaderClass, const HazardContext &Ctx) AdvanceForRawWindowFn
Definition
GCNPreRAAntiHints.h:86
llvm::AMDGPU::InstPredicate
bool(*)(const MachineInstr &, const HazardContext &) InstPredicate
Definition
GCNPreRAAntiHints.h:82
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition
DefaultTargetInfo.h:21
llvm::AMDGPU::ClassMatch
Definition
GCNPreRAAntiHints.h:73
llvm::AMDGPU::ClassMatch::AnyOf
HazardClassMask AnyOf
Definition
GCNPreRAAntiHints.h:74
llvm::AMDGPU::ClassMatch::matches
bool matches(HazardClassMask Mask) const
Definition
GCNPreRAAntiHints.h:75
llvm::AMDGPU::ConsumerTarget
Definition
GCNPreRAAntiHints.h:105
llvm::AMDGPU::ConsumerTarget::Side
HazardSide Side
Definition
GCNPreRAAntiHints.h:106
llvm::AMDGPU::ConsumerTarget::CounterMask
HazardClassMask CounterMask
Definition
GCNPreRAAntiHints.h:108
llvm::AMDGPU::ConsumerTarget::Hint
ConsumerHint Hint
Definition
GCNPreRAAntiHints.h:109
llvm::AMDGPU::ConsumerTarget::Window
WindowSpec Window
Definition
GCNPreRAAntiHints.h:107
llvm::AMDGPU::HazardAntiHintRule
Definition
GCNPreRAAntiHints.h:112
llvm::AMDGPU::HazardAntiHintRule::Consumers
SmallVector< ConsumerTarget, 3 > Consumers
Definition
GCNPreRAAntiHints.h:115
llvm::AMDGPU::HazardAntiHintRule::Producer
HazardSide Producer
Definition
GCNPreRAAntiHints.h:114
llvm::AMDGPU::HazardAntiHintRule::AdvanceForRawWindow
AdvanceForRawWindowFn AdvanceForRawWindow
Definition
GCNPreRAAntiHints.h:116
llvm::AMDGPU::HazardAntiHintRule::Predicate
RulePredicate Predicate
Definition
GCNPreRAAntiHints.h:113
llvm::AMDGPU::HazardContext
Definition
GCNPreRAAntiHints.h:64
llvm::AMDGPU::HazardContext::LIS
LiveIntervals * LIS
Definition
GCNPreRAAntiHints.h:68
llvm::AMDGPU::HazardContext::TRI
const SIRegisterInfo * TRI
Definition
GCNPreRAAntiHints.h:66
llvm::AMDGPU::HazardContext::MRI
MachineRegisterInfo * MRI
Definition
GCNPreRAAntiHints.h:67
llvm::AMDGPU::HazardContext::ST
const GCNSubtarget * ST
Definition
GCNPreRAAntiHints.h:69
llvm::AMDGPU::HazardContext::SchedModel
const TargetSchedModel * SchedModel
Definition
GCNPreRAAntiHints.h:70
llvm::AMDGPU::HazardContext::TII
const SIInstrInfo * TII
Definition
GCNPreRAAntiHints.h:65
llvm::AMDGPU::HazardSide
Definition
GCNPreRAAntiHints.h:90
llvm::AMDGPU::HazardSide::Predicate
InstPredicate Predicate
Definition
GCNPreRAAntiHints.h:93
llvm::AMDGPU::HazardSide::Op
HazardOperand Op
Definition
GCNPreRAAntiHints.h:92
llvm::AMDGPU::HazardSide::Match
ClassMatch Match
Definition
GCNPreRAAntiHints.h:91
llvm::AMDGPU::WindowSpec
Definition
GCNPreRAAntiHints.h:98
llvm::AMDGPU::WindowSpec::Fn
unsigned(* Fn)(const MachineInstr &Producer, const HazardContext &Ctx)
Definition
GCNPreRAAntiHints.h:101
llvm::AMDGPU::WindowSpec::OptWindowLength
const cl::opt< unsigned > * OptWindowLength
Definition
GCNPreRAAntiHints.h:100
llvm::AMDGPU::WindowSpec::WindowLength
unsigned WindowLength
Definition
GCNPreRAAntiHints.h:99
Generated on
for LLVM by
1.14.0