@@ -34,6 +34,11 @@ static cl::opt<bool> AmdgcnSkipCacheInvalidations(
34
34
" amdgcn-skip-cache-invalidations" , cl::init(false ), cl::Hidden,
35
35
cl::desc(" Use this to skip inserting cache invalidating instructions." ));
36
36
37
+ static cl::opt<bool > AmdgcnDisableSoftWaitcnt (
38
+ " amdgcn-disable-soft-waitcnt" , cl::init(false ), cl::Hidden,
39
+ cl::desc(" Use this option to disable 'soft' waitcnt instructions in the "
40
+ " memory-legalizer." ));
41
+
37
42
namespace {
38
43
39
44
LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE ();
@@ -271,6 +276,10 @@ class SICacheControl {
271
276
// / Whether to insert cache invalidating instructions.
272
277
bool InsertCacheInv;
273
278
279
+ // / Either regular or soft waitcnt opcode.
280
+ unsigned WAITCNT_Opcode;
281
+ unsigned WAITCNT_VSCNT_Opcode;
282
+
274
283
SICacheControl (const GCNSubtarget &ST);
275
284
276
285
// / Sets named bit \p BitName to "true" if present in instruction \p MI.
@@ -832,6 +841,11 @@ SICacheControl::SICacheControl(const GCNSubtarget &ST) : ST(ST) {
832
841
TII = ST.getInstrInfo ();
833
842
IV = getIsaVersion (ST.getCPU ());
834
843
InsertCacheInv = !AmdgcnSkipCacheInvalidations;
844
+ WAITCNT_Opcode =
845
+ AmdgcnDisableSoftWaitcnt ? AMDGPU::S_WAITCNT : AMDGPU::S_WAITCNT_soft;
846
+ WAITCNT_VSCNT_Opcode = AmdgcnDisableSoftWaitcnt
847
+ ? AMDGPU::S_WAITCNT_VSCNT
848
+ : AMDGPU::S_WAITCNT_VSCNT_soft;
835
849
}
836
850
837
851
bool SICacheControl::enableNamedBit (const MachineBasicBlock::iterator MI,
@@ -1055,8 +1069,7 @@ bool SIGfx6CacheControl::insertWait(MachineBasicBlock::iterator &MI,
1055
1069
VMCnt ? 0 : getVmcntBitMask (IV),
1056
1070
getExpcntBitMask (IV),
1057
1071
LGKMCnt ? 0 : getLgkmcntBitMask (IV));
1058
- BuildMI (MBB, MI, DL, TII->get (AMDGPU::S_WAITCNT_soft))
1059
- .addImm (WaitCntImmediate);
1072
+ BuildMI (MBB, MI, DL, TII->get (WAITCNT_Opcode)).addImm (WaitCntImmediate);
1060
1073
Changed = true ;
1061
1074
}
1062
1075
@@ -1964,13 +1977,12 @@ bool SIGfx10CacheControl::insertWait(MachineBasicBlock::iterator &MI,
1964
1977
VMCnt ? 0 : getVmcntBitMask (IV),
1965
1978
getExpcntBitMask (IV),
1966
1979
LGKMCnt ? 0 : getLgkmcntBitMask (IV));
1967
- BuildMI (MBB, MI, DL, TII->get (AMDGPU::S_WAITCNT_soft))
1968
- .addImm (WaitCntImmediate);
1980
+ BuildMI (MBB, MI, DL, TII->get (WAITCNT_Opcode)).addImm (WaitCntImmediate);
1969
1981
Changed = true ;
1970
1982
}
1971
1983
1972
1984
if (VSCnt) {
1973
- BuildMI (MBB, MI, DL, TII->get (AMDGPU::S_WAITCNT_VSCNT_soft ))
1985
+ BuildMI (MBB, MI, DL, TII->get (WAITCNT_VSCNT_Opcode ))
1974
1986
.addReg (AMDGPU::SGPR_NULL, RegState::Undef)
1975
1987
.addImm (0 );
1976
1988
Changed = true ;
0 commit comments