Skip to content

Commit b5e2a23

Browse files
authored
[CodeGen] Add SSID & Atomic Ordering to IntrinsicInfo (#140896)
getTgtMemIntrinsic should be able to propagate such information to the MMO
1 parent 4a158f6 commit b5e2a23

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

llvm/include/llvm/CodeGen/TargetLowering.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1228,6 +1228,9 @@ class TargetLoweringBase {
12281228
MaybeAlign align = Align(1); // alignment
12291229

12301230
MachineMemOperand::Flags flags = MachineMemOperand::MONone;
1231+
SyncScope::ID ssid = SyncScope::System;
1232+
AtomicOrdering order = AtomicOrdering::NotAtomic;
1233+
AtomicOrdering failureOrder = AtomicOrdering::NotAtomic;
12311234
IntrinsicInfo() = default;
12321235
};
12331236

llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2847,8 +2847,9 @@ bool IRTranslator::translateCall(const User &U, MachineIRBuilder &MIRBuilder) {
28472847
MPI = MachinePointerInfo(Info.ptrVal, Info.offset);
28482848
else if (Info.fallbackAddressSpace)
28492849
MPI = MachinePointerInfo(*Info.fallbackAddressSpace);
2850-
MIB.addMemOperand(
2851-
MF->getMachineMemOperand(MPI, Info.flags, MemTy, Alignment, CI.getAAMetadata()));
2850+
MIB.addMemOperand(MF->getMachineMemOperand(
2851+
MPI, Info.flags, MemTy, Alignment, CI.getAAMetadata(),
2852+
/*Ranges=*/nullptr, Info.ssid, Info.order, Info.failureOrder));
28522853
}
28532854

28542855
if (CI.isConvergent()) {

llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5305,9 +5305,16 @@ void SelectionDAGBuilder::visitTargetIntrinsic(const CallInst &I,
53055305
MPI = MachinePointerInfo(Info.ptrVal, Info.offset);
53065306
else if (Info.fallbackAddressSpace)
53075307
MPI = MachinePointerInfo(*Info.fallbackAddressSpace);
5308-
Result = DAG.getMemIntrinsicNode(
5309-
Info.opc, getCurSDLoc(), VTs, Ops, Info.memVT, MPI, Info.align,
5310-
Info.flags, LocationSize::precise(Info.size), I.getAAMetadata());
5308+
EVT MemVT = Info.memVT;
5309+
LocationSize Size = LocationSize::precise(Info.size);
5310+
if (Size.hasValue() && !Size.getValue())
5311+
Size = LocationSize::precise(MemVT.getStoreSize());
5312+
Align Alignment = Info.align.value_or(DAG.getEVTAlign(MemVT));
5313+
MachineMemOperand *MMO = DAG.getMachineFunction().getMachineMemOperand(
5314+
MPI, Info.flags, Size, Alignment, I.getAAMetadata(), /*Ranges=*/nullptr,
5315+
Info.ssid, Info.order, Info.failureOrder);
5316+
Result =
5317+
DAG.getMemIntrinsicNode(Info.opc, getCurSDLoc(), VTs, Ops, MemVT, MMO);
53115318
} else if (!HasChain) {
53125319
Result = DAG.getNode(ISD::INTRINSIC_WO_CHAIN, getCurSDLoc(), VTs, Ops);
53135320
} else if (!I.getType()->isVoidTy()) {

0 commit comments

Comments
 (0)