Skip to content

Commit 76056ce

Browse files
Fence scope is the same as cmpxchg scope- dont add API
1 parent 6933aa9 commit 76056ce

13 files changed

+49
-88
lines changed

llvm/include/llvm/CodeGen/TargetLowering.h

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2319,15 +2319,13 @@ class TargetLoweringBase {
23192319
/// standard ABI uses a fence before a seq_cst load instead of after a
23202320
/// seq_cst store).
23212321
/// @{
2322-
virtual Instruction *
2323-
emitLeadingFence(IRBuilderBase &Builder, Instruction *Inst,
2324-
AtomicOrdering Ord,
2325-
SyncScope::ID SSID = SyncScope::System) const;
2326-
2327-
virtual Instruction *
2328-
emitTrailingFence(IRBuilderBase &Builder, Instruction *Inst,
2329-
AtomicOrdering Ord,
2330-
SyncScope::ID SSID = SyncScope::System) const;
2322+
virtual Instruction *emitLeadingFence(IRBuilderBase &Builder,
2323+
Instruction *Inst,
2324+
AtomicOrdering Ord) const;
2325+
2326+
virtual Instruction *emitTrailingFence(IRBuilderBase &Builder,
2327+
Instruction *Inst,
2328+
AtomicOrdering Ord) const;
23312329
/// @}
23322330

23332331
// Emits code that executes when the comparison result in the ll/sc

llvm/lib/CodeGen/AtomicExpandPass.cpp

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,7 @@ class AtomicExpandImpl {
6565
const DataLayout *DL = nullptr;
6666

6767
private:
68-
bool bracketInstWithFences(Instruction *I, AtomicOrdering Order,
69-
SyncScope::ID SSID = SyncScope::System);
68+
bool bracketInstWithFences(Instruction *I, AtomicOrdering Order);
7069
IntegerType *getCorrespondingIntegerType(Type *T, const DataLayout &DL);
7170
LoadInst *convertAtomicLoadToIntegerType(LoadInst *LI);
7271
bool tryExpandAtomicLoad(LoadInst *LI);
@@ -304,7 +303,6 @@ bool AtomicExpandImpl::processAtomicInstr(Instruction *I) {
304303

305304
if (TLI->shouldInsertFencesForAtomic(I)) {
306305
auto FenceOrdering = AtomicOrdering::Monotonic;
307-
SyncScope::ID SSID = SyncScope::System;
308306
if (LI && isAcquireOrStronger(LI->getOrdering())) {
309307
FenceOrdering = LI->getOrdering();
310308
LI->setOrdering(AtomicOrdering::Monotonic);
@@ -327,18 +325,13 @@ bool AtomicExpandImpl::processAtomicInstr(Instruction *I) {
327325
// expandAtomicCmpXchg in that case.
328326
FenceOrdering = CASI->getMergedOrdering();
329327
auto CASOrdering = TLI->atomicOperationOrderAfterFenceSplit(CASI);
330-
SSID = CASI->getSyncScopeID();
331328

332329
CASI->setSuccessOrdering(CASOrdering);
333330
CASI->setFailureOrdering(CASOrdering);
334-
// If CAS ordering is monotonic, then the operation will
335-
// take default scope. Otherwise, it will retain its scope
336-
if (CASOrdering != AtomicOrdering::Monotonic)
337-
CASI->setSyncScopeID(SSID);
338331
}
339332

340333
if (FenceOrdering != AtomicOrdering::Monotonic) {
341-
MadeChange |= bracketInstWithFences(I, FenceOrdering, SSID);
334+
MadeChange |= bracketInstWithFences(I, FenceOrdering);
342335
}
343336
} else if (I->hasAtomicStore() &&
344337
TLI->shouldInsertTrailingFenceForAtomicStore(I)) {
@@ -439,13 +432,12 @@ PreservedAnalyses AtomicExpandPass::run(Function &F,
439432
}
440433

441434
bool AtomicExpandImpl::bracketInstWithFences(Instruction *I,
442-
AtomicOrdering Order,
443-
SyncScope::ID SSID) {
435+
AtomicOrdering Order) {
444436
ReplacementIRBuilder Builder(I, *DL);
445437

446-
auto LeadingFence = TLI->emitLeadingFence(Builder, I, Order, SSID);
438+
auto LeadingFence = TLI->emitLeadingFence(Builder, I, Order);
447439

448-
auto TrailingFence = TLI->emitTrailingFence(Builder, I, Order, SSID);
440+
auto TrailingFence = TLI->emitTrailingFence(Builder, I, Order);
449441
// We have a guard here because not every atomic operation generates a
450442
// trailing fence.
451443
if (TrailingFence)

llvm/lib/CodeGen/TargetLoweringBase.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2327,20 +2327,18 @@ TargetLoweringBase::getAtomicMemOperandFlags(const Instruction &AI,
23272327

23282328
Instruction *TargetLoweringBase::emitLeadingFence(IRBuilderBase &Builder,
23292329
Instruction *Inst,
2330-
AtomicOrdering Ord,
2331-
SyncScope::ID SSID) const {
2330+
AtomicOrdering Ord) const {
23322331
if (isReleaseOrStronger(Ord) && Inst->hasAtomicStore())
2333-
return Builder.CreateFence(Ord, SSID);
2332+
return Builder.CreateFence(Ord);
23342333
else
23352334
return nullptr;
23362335
}
23372336

23382337
Instruction *TargetLoweringBase::emitTrailingFence(IRBuilderBase &Builder,
23392338
Instruction *Inst,
2340-
AtomicOrdering Ord,
2341-
SyncScope::ID SSID) const {
2339+
AtomicOrdering Ord) const {
23422340
if (isAcquireOrStronger(Ord))
2343-
return Builder.CreateFence(Ord, SSID);
2341+
return Builder.CreateFence(Ord);
23442342
else
23452343
return nullptr;
23462344
}

llvm/lib/Target/ARM/ARMISelLowering.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21229,8 +21229,7 @@ Instruction *ARMTargetLowering::makeDMB(IRBuilderBase &Builder,
2122921229
// Based on http://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html
2123021230
Instruction *ARMTargetLowering::emitLeadingFence(IRBuilderBase &Builder,
2123121231
Instruction *Inst,
21232-
AtomicOrdering Ord,
21233-
SyncScope::ID SSID) const {
21232+
AtomicOrdering Ord) const {
2123421233
switch (Ord) {
2123521234
case AtomicOrdering::NotAtomic:
2123621235
case AtomicOrdering::Unordered:
@@ -21255,8 +21254,7 @@ Instruction *ARMTargetLowering::emitLeadingFence(IRBuilderBase &Builder,
2125521254

2125621255
Instruction *ARMTargetLowering::emitTrailingFence(IRBuilderBase &Builder,
2125721256
Instruction *Inst,
21258-
AtomicOrdering Ord,
21259-
SyncScope::ID SSID) const {
21257+
AtomicOrdering Ord) const {
2126021258
switch (Ord) {
2126121259
case AtomicOrdering::NotAtomic:
2126221260
case AtomicOrdering::Unordered:

llvm/lib/Target/ARM/ARMISelLowering.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -666,14 +666,10 @@ class VectorType;
666666
void
667667
emitAtomicCmpXchgNoStoreLLBalance(IRBuilderBase &Builder) const override;
668668

669-
Instruction *
670-
emitLeadingFence(IRBuilderBase &Builder, Instruction *Inst,
671-
AtomicOrdering Ord,
672-
SyncScope::ID SSID = SyncScope::System) const override;
673-
Instruction *
674-
emitTrailingFence(IRBuilderBase &Builder, Instruction *Inst,
675-
AtomicOrdering Ord,
676-
SyncScope::ID SSID = SyncScope::System) const override;
669+
Instruction *emitLeadingFence(IRBuilderBase &Builder, Instruction *Inst,
670+
AtomicOrdering Ord) const override;
671+
Instruction *emitTrailingFence(IRBuilderBase &Builder, Instruction *Inst,
672+
AtomicOrdering Ord) const override;
677673

678674
unsigned getMaxSupportedInterleaveFactor() const override;
679675

llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6311,13 +6311,13 @@ AtomicOrdering NVPTXTargetLowering::atomicOperationOrderAfterFenceSplit(
63116311

63126312
Instruction *NVPTXTargetLowering::emitLeadingFence(IRBuilderBase &Builder,
63136313
Instruction *Inst,
6314-
AtomicOrdering Ord,
6315-
SyncScope::ID SSID) const {
6314+
AtomicOrdering Ord) const {
63166315
if (!isa<AtomicCmpXchgInst>(Inst))
63176316
return TargetLoweringBase::emitLeadingFence(Builder, Inst, Ord);
63186317

63196318
// Specialize for cmpxchg
63206319
// Emit a fence.sc leading fence for cmpxchg seq_cst which are not emulated
6320+
SyncScope::ID SSID = cast<AtomicCmpXchgInst>(Inst)->getSyncScopeID();
63216321
if (isReleaseOrStronger(Ord))
63226322
return Ord == AtomicOrdering::SequentiallyConsistent
63236323
? Builder.CreateFence(AtomicOrdering::SequentiallyConsistent,
@@ -6329,16 +6329,15 @@ Instruction *NVPTXTargetLowering::emitLeadingFence(IRBuilderBase &Builder,
63296329

63306330
Instruction *NVPTXTargetLowering::emitTrailingFence(IRBuilderBase &Builder,
63316331
Instruction *Inst,
6332-
AtomicOrdering Ord,
6333-
SyncScope::ID SSID) const {
6332+
AtomicOrdering Ord) const {
63346333
// Specialize for cmpxchg
63356334
if (!isa<AtomicCmpXchgInst>(Inst))
63366335
return TargetLoweringBase::emitTrailingFence(Builder, Inst, Ord);
63376336

6338-
auto CASWidth =
6339-
cast<IntegerType>(
6340-
dyn_cast<AtomicCmpXchgInst>(Inst)->getCompareOperand()->getType())
6341-
->getBitWidth();
6337+
auto *CI = cast<AtomicCmpXchgInst>(Inst);
6338+
auto CASWidth = cast<IntegerType>(CI->getCompareOperand()->getType())
6339+
->getBitWidth();
6340+
SyncScope::ID SSID= CI->getSyncScopeID();
63426341
// Do not emit a trailing fence for cmpxchg seq_cst which are not emulated
63436342
if (isAcquireOrStronger(Ord) &&
63446343
(Ord != AtomicOrdering::SequentiallyConsistent ||

llvm/lib/Target/NVPTX/NVPTXISelLowering.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -282,12 +282,10 @@ class NVPTXTargetLowering : public TargetLowering {
282282

283283
Instruction *
284284
emitLeadingFence(IRBuilderBase &Builder, Instruction *Inst,
285-
AtomicOrdering Ord,
286-
SyncScope::ID SSID = SyncScope::System) const override;
285+
AtomicOrdering Ord) const override;
287286
Instruction *
288287
emitTrailingFence(IRBuilderBase &Builder, Instruction *Inst,
289-
AtomicOrdering Ord,
290-
SyncScope::ID SSID = SyncScope::System) const override;
288+
AtomicOrdering Ord) const override;
291289

292290
unsigned getPreferredFPToIntOpcode(unsigned Op, EVT FromVT,
293291
EVT ToVT) const override;

llvm/lib/Target/PowerPC/PPCISelLowering.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12588,8 +12588,7 @@ static Instruction *callIntrinsic(IRBuilderBase &Builder, Intrinsic::ID Id) {
1258812588
// http://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html
1258912589
Instruction *PPCTargetLowering::emitLeadingFence(IRBuilderBase &Builder,
1259012590
Instruction *Inst,
12591-
AtomicOrdering Ord,
12592-
SyncScope::ID SSID) const {
12591+
AtomicOrdering Ord) const {
1259312592
if (Ord == AtomicOrdering::SequentiallyConsistent)
1259412593
return callIntrinsic(Builder, Intrinsic::ppc_sync);
1259512594
if (isReleaseOrStronger(Ord))
@@ -12599,8 +12598,7 @@ Instruction *PPCTargetLowering::emitLeadingFence(IRBuilderBase &Builder,
1259912598

1260012599
Instruction *PPCTargetLowering::emitTrailingFence(IRBuilderBase &Builder,
1260112600
Instruction *Inst,
12602-
AtomicOrdering Ord,
12603-
SyncScope::ID SSID) const {
12601+
AtomicOrdering Ord) const {
1260412602
if (Inst->hasAtomicLoad() && isAcquireOrStronger(Ord)) {
1260512603
// See http://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html and
1260612604
// http://www.rdrop.com/users/paulmck/scalability/paper/N2745r.2011.03.04a.html

llvm/lib/Target/PowerPC/PPCISelLowering.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -927,14 +927,10 @@ namespace llvm {
927927
return true;
928928
}
929929

930-
Instruction *
931-
emitLeadingFence(IRBuilderBase &Builder, Instruction *Inst,
932-
AtomicOrdering Ord,
933-
SyncScope::ID SSID = SyncScope::System) const override;
934-
Instruction *
935-
emitTrailingFence(IRBuilderBase &Builder, Instruction *Inst,
936-
AtomicOrdering Ord,
937-
SyncScope::ID SSID = SyncScope::System) const override;
930+
Instruction *emitLeadingFence(IRBuilderBase &Builder, Instruction *Inst,
931+
AtomicOrdering Ord) const override;
932+
Instruction *emitTrailingFence(IRBuilderBase &Builder, Instruction *Inst,
933+
AtomicOrdering Ord) const override;
938934

939935
bool shouldInlineQuadwordAtomics() const;
940936

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22800,8 +22800,7 @@ void RISCVTargetLowering::LowerAsmOperandForConstraint(
2280022800

2280122801
Instruction *RISCVTargetLowering::emitLeadingFence(IRBuilderBase &Builder,
2280222802
Instruction *Inst,
22803-
AtomicOrdering Ord,
22804-
SyncScope::ID SSID) const {
22803+
AtomicOrdering Ord) const {
2280522804
if (Subtarget.hasStdExtZtso()) {
2280622805
if (isa<LoadInst>(Inst) && Ord == AtomicOrdering::SequentiallyConsistent)
2280722806
return Builder.CreateFence(Ord);
@@ -22817,8 +22816,7 @@ Instruction *RISCVTargetLowering::emitLeadingFence(IRBuilderBase &Builder,
2281722816

2281822817
Instruction *RISCVTargetLowering::emitTrailingFence(IRBuilderBase &Builder,
2281922818
Instruction *Inst,
22820-
AtomicOrdering Ord,
22821-
SyncScope::ID SSID) const {
22819+
AtomicOrdering Ord) const {
2282222820
if (Subtarget.hasStdExtZtso()) {
2282322821
if (isa<StoreInst>(Inst) && Ord == AtomicOrdering::SequentiallyConsistent)
2282422822
return Builder.CreateFence(Ord);

llvm/lib/Target/RISCV/RISCVISelLowering.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -225,14 +225,10 @@ class RISCVTargetLowering : public TargetLowering {
225225
// than this hook due to limitations in the interface here.
226226
bool shouldInsertFencesForAtomic(const Instruction *I) const override;
227227

228-
Instruction *
229-
emitLeadingFence(IRBuilderBase &Builder, Instruction *Inst,
230-
AtomicOrdering Ord,
231-
SyncScope::ID SSID = SyncScope::System) const override;
232-
Instruction *
233-
emitTrailingFence(IRBuilderBase &Builder, Instruction *Inst,
234-
AtomicOrdering Ord,
235-
SyncScope::ID SSID = SyncScope::System) const override;
228+
Instruction *emitLeadingFence(IRBuilderBase &Builder, Instruction *Inst,
229+
AtomicOrdering Ord) const override;
230+
Instruction *emitTrailingFence(IRBuilderBase &Builder, Instruction *Inst,
231+
AtomicOrdering Ord) const override;
236232

237233
bool isFMAFasterThanFMulAndFAdd(const MachineFunction &MF,
238234
EVT VT) const override;

llvm/lib/Target/VE/VEISelLowering.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1056,8 +1056,7 @@ SDValue VETargetLowering::makeAddress(SDValue Op, SelectionDAG &DAG) const {
10561056
// http://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html
10571057
Instruction *VETargetLowering::emitLeadingFence(IRBuilderBase &Builder,
10581058
Instruction *Inst,
1059-
AtomicOrdering Ord,
1060-
SyncScope::ID SSID) const {
1059+
AtomicOrdering Ord) const {
10611060
switch (Ord) {
10621061
case AtomicOrdering::NotAtomic:
10631062
case AtomicOrdering::Unordered:
@@ -1078,8 +1077,7 @@ Instruction *VETargetLowering::emitLeadingFence(IRBuilderBase &Builder,
10781077

10791078
Instruction *VETargetLowering::emitTrailingFence(IRBuilderBase &Builder,
10801079
Instruction *Inst,
1081-
AtomicOrdering Ord,
1082-
SyncScope::ID SSID) const {
1080+
AtomicOrdering Ord) const {
10831081
switch (Ord) {
10841082
case AtomicOrdering::NotAtomic:
10851083
case AtomicOrdering::Unordered:

llvm/lib/Target/VE/VEISelLowering.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -203,14 +203,10 @@ class VETargetLowering : public TargetLowering {
203203
// VE uses release consistency, so need fence for each atomics.
204204
return true;
205205
}
206-
Instruction *
207-
emitLeadingFence(IRBuilderBase &Builder, Instruction *Inst,
208-
AtomicOrdering Ord,
209-
SyncScope::ID SSID = SyncScope::System) const override;
210-
Instruction *
211-
emitTrailingFence(IRBuilderBase &Builder, Instruction *Inst,
212-
AtomicOrdering Ord,
213-
SyncScope::ID SSID = SyncScope::System) const override;
206+
Instruction *emitLeadingFence(IRBuilderBase &Builder, Instruction *Inst,
207+
AtomicOrdering Ord) const override;
208+
Instruction *emitTrailingFence(IRBuilderBase &Builder, Instruction *Inst,
209+
AtomicOrdering Ord) const override;
214210
TargetLoweringBase::AtomicExpansionKind
215211
shouldExpandAtomicRMWInIR(AtomicRMWInst *AI) const override;
216212
ISD::NodeType getExtendForAtomicOps() const override {

0 commit comments

Comments
 (0)