Skip to content

Commit 7a25963

Browse files
authored
[AMDGPU] Flip the default value of maybeAtomic. NFCI. (#75220)
In practice maybeAtomic = 0 is used to prevent SIMemoryLegalizer from interfering with instructions that are mayLoad or mayStore but lack MachineMemOperands. These instructions should be the exception not the rule, so this patch sets maybeAtomic = 1 by default and only overrides it to 0 where necessary.
1 parent f9fec40 commit 7a25963

File tree

8 files changed

+5
-14
lines changed

8 files changed

+5
-14
lines changed

llvm/lib/Target/AMDGPU/BUFInstructions.td

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,6 @@ class MUBUF_Load_Pseudo <string opName,
503503
let has_vdata = !not(!or(isLds, isLdsOpc));
504504
let mayLoad = 1;
505505
let mayStore = isLds;
506-
let maybeAtomic = 1;
507506
let Uses = !if(!or(isLds, isLdsOpc) , [EXEC, M0], [EXEC]);
508507
let tfe = isTFE;
509508
let lds = isLds;
@@ -610,7 +609,6 @@ class MUBUF_Store_Pseudo <string opName,
610609
getAddrName<addrKindCopy>.ret;
611610
let mayLoad = 0;
612611
let mayStore = 1;
613-
let maybeAtomic = 1;
614612
let elements = getMUBUFElements<store_vt>.ret;
615613
let tfe = isTFE;
616614
}
@@ -671,7 +669,6 @@ class MUBUF_Pseudo_Store_Lds<string opName>
671669
let LGKM_CNT = 1;
672670
let mayLoad = 1;
673671
let mayStore = 1;
674-
let maybeAtomic = 1;
675672

676673
let has_vdata = 0;
677674
let has_vaddr = 0;
@@ -735,7 +732,6 @@ class MUBUF_Atomic_Pseudo<string opName,
735732
let has_glc = 0;
736733
let has_dlc = 0;
737734
let has_sccb = 1;
738-
let maybeAtomic = 1;
739735
let AsmMatchConverter = "cvtMubufAtomic";
740736
}
741737

llvm/lib/Target/AMDGPU/DSDIRInstructions.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class DSDIR_Common<string opName, string asm = "", dag ins, bit direct> :
7373
let hasSideEffects = 0;
7474
let mayLoad = 1;
7575
let mayStore = 0;
76+
let maybeAtomic = 0;
7677

7778
string Mnemonic = opName;
7879
let UseNamedOperandTable = 1;

llvm/lib/Target/AMDGPU/DSInstructions.td

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ class DS_Pseudo <string opName, dag outs, dag ins, string asmOps, list<dag> patt
1919
// Most instruction load and store data, so set this as the default.
2020
let mayLoad = 1;
2121
let mayStore = 1;
22-
let maybeAtomic = 1;
2322

2423
let hasSideEffects = 0;
2524
let SchedRW = [WriteLDS];

llvm/lib/Target/AMDGPU/EXPInstructions.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class EXPCommon<bit row, bit done, string asm = ""> : InstSI<
2020
let EXP_CNT = 1;
2121
let mayLoad = done;
2222
let mayStore = 1;
23+
let maybeAtomic = 0;
2324
let UseNamedOperandTable = 1;
2425
let Uses = !if(row, [EXEC, M0], [EXEC]);
2526
let SchedRW = [WriteExport];

llvm/lib/Target/AMDGPU/FLATInstructions.td

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,6 @@ class FLAT_Load_Pseudo <string opName, RegisterClass regClass,
215215
let has_saddr = HasSaddr;
216216
let enabled_saddr = EnableSaddr;
217217
let PseudoInstr = opName#!if(!and(HasSaddr, EnableSaddr), "_SADDR", "");
218-
let maybeAtomic = 1;
219218

220219
let Constraints = !if(HasTiedOutput, "$vdst = $vdst_in", "");
221220
let DisableEncoding = !if(HasTiedOutput, "$vdst_in", "");
@@ -237,7 +236,6 @@ class FLAT_Store_Pseudo <string opName, RegisterClass vdataClass,
237236
let has_saddr = HasSaddr;
238237
let enabled_saddr = EnableSaddr;
239238
let PseudoInstr = opName#!if(!and(HasSaddr, EnableSaddr), "_SADDR", "");
240-
let maybeAtomic = 1;
241239
}
242240

243241
multiclass FLAT_Global_Load_Pseudo<string opName, RegisterClass regClass, bit HasTiedInput = 0> {
@@ -263,7 +261,6 @@ class FLAT_Global_Load_AddTid_Pseudo <string opName, RegisterClass regClass,
263261
let has_vaddr = 0;
264262
let has_saddr = 1;
265263
let enabled_saddr = EnableSaddr;
266-
let maybeAtomic = 1;
267264
let PseudoInstr = opName#!if(EnableSaddr, "_SADDR", "");
268265

269266
let Constraints = !if(HasTiedOutput, "$vdst = $vdst_in", "");
@@ -330,7 +327,6 @@ class FLAT_Global_Store_AddTid_Pseudo <string opName, RegisterClass vdataClass,
330327
let has_vaddr = 0;
331328
let has_saddr = 1;
332329
let enabled_saddr = EnableSaddr;
333-
let maybeAtomic = 1;
334330
let PseudoInstr = opName#!if(EnableSaddr, "_SADDR", "");
335331
}
336332

@@ -401,7 +397,6 @@ class FLAT_Scratch_Load_Pseudo <string opName, RegisterClass regClass,
401397
let has_sve = EnableSVE;
402398
let sve = EnableVaddr;
403399
let PseudoInstr = opName#!if(EnableSVE, "_SVS", !if(EnableSaddr, "_SADDR", !if(EnableVaddr, "", "_ST")));
404-
let maybeAtomic = 1;
405400

406401
let Constraints = !if(HasTiedOutput, "$vdst = $vdst_in", "");
407402
let DisableEncoding = !if(HasTiedOutput, "$vdst_in", "");
@@ -430,7 +425,6 @@ class FLAT_Scratch_Store_Pseudo <string opName, RegisterClass vdataClass, bit En
430425
let has_sve = EnableSVE;
431426
let sve = EnableVaddr;
432427
let PseudoInstr = opName#!if(EnableSVE, "_SVS", !if(EnableSaddr, "_SADDR", !if(EnableVaddr, "", "_ST")));
433-
let maybeAtomic = 1;
434428
}
435429

436430
multiclass FLAT_Scratch_Load_Pseudo<string opName, RegisterClass regClass, bit HasTiedOutput = 0> {
@@ -520,7 +514,6 @@ class FLAT_AtomicNoRet_Pseudo<string opName, dag outs, dag ins,
520514
let has_vdst = 0;
521515
let has_sccb = 1;
522516
let sccbValue = 0;
523-
let maybeAtomic = 1;
524517
let IsAtomicNoRet = 1;
525518
}
526519

llvm/lib/Target/AMDGPU/SIInstrFormats.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ class InstSI <dag outs, dag ins, string asm = "",
9191
field bit VOP3_OPSEL = 0;
9292

9393
// Is it possible for this instruction to be atomic?
94-
field bit maybeAtomic = 0;
94+
field bit maybeAtomic = 1;
9595

9696
// This bit indicates that this is a VI instruction which is renamed
9797
// in GFX9. Required for correct mapping from pseudo to MC.

llvm/lib/Target/AMDGPU/SIInstructions.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ def ATOMIC_FENCE : SPseudoInstSI<
111111
[(atomic_fence (i32 timm:$ordering), (i32 timm:$scope))],
112112
"ATOMIC_FENCE $ordering, $scope"> {
113113
let hasSideEffects = 1;
114-
let maybeAtomic = 1;
115114
}
116115

117116
let hasSideEffects = 0, mayLoad = 0, mayStore = 0, Uses = [EXEC] in {
@@ -563,6 +562,7 @@ def SI_MASKED_UNREACHABLE : SPseudoInstSI <(outs), (ins),
563562
let hasNoSchedulingInfo = 1;
564563
let FixedSize = 1;
565564
let isMeta = 1;
565+
let maybeAtomic = 0;
566566
}
567567

568568
// Used as an isel pseudo to directly emit initialization with an

llvm/lib/Target/AMDGPU/SMInstructions.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class SM_Pseudo <string opName, dag outs, dag ins, string asmOps, list<dag> patt
2929
let mayStore = 0;
3030
let mayLoad = 1;
3131
let hasSideEffects = 0;
32+
let maybeAtomic = 0;
3233
let UseNamedOperandTable = 1;
3334
let SchedRW = [WriteSMEM];
3435

0 commit comments

Comments
 (0)