Skip to content

Commit de32634

Browse files
Pierre-vhmacurtis-amd
authored andcommitted
[CodeGen] Add SSID & Atomic Ordering to IntrinsicInfo (llvm#140896)
getTgtMemIntrinsic should be able to propagate such information to the MMO
1 parent eaf53db commit de32634

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
@@ -1216,6 +1216,9 @@ class TargetLoweringBase {
12161216
MaybeAlign align = Align(1); // alignment
12171217

12181218
MachineMemOperand::Flags flags = MachineMemOperand::MONone;
1219+
SyncScope::ID ssid = SyncScope::System;
1220+
AtomicOrdering order = AtomicOrdering::NotAtomic;
1221+
AtomicOrdering failureOrder = AtomicOrdering::NotAtomic;
12191222
IntrinsicInfo() = default;
12201223
};
12211224

llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2888,8 +2888,9 @@ bool IRTranslator::translateCall(const User &U, MachineIRBuilder &MIRBuilder) {
28882888
MPI = MachinePointerInfo(Info.ptrVal, Info.offset);
28892889
else if (Info.fallbackAddressSpace)
28902890
MPI = MachinePointerInfo(*Info.fallbackAddressSpace);
2891-
MIB.addMemOperand(
2892-
MF->getMachineMemOperand(MPI, Info.flags, MemTy, Alignment, CI.getAAMetadata()));
2891+
MIB.addMemOperand(MF->getMachineMemOperand(
2892+
MPI, Info.flags, MemTy, Alignment, CI.getAAMetadata(),
2893+
/*Ranges=*/nullptr, Info.ssid, Info.order, Info.failureOrder));
28932894
}
28942895

28952896
if (CI.isConvergent()) {

llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5352,9 +5352,16 @@ void SelectionDAGBuilder::visitTargetIntrinsic(const CallInst &I,
53525352
MPI = MachinePointerInfo(Info.ptrVal, Info.offset);
53535353
else if (Info.fallbackAddressSpace)
53545354
MPI = MachinePointerInfo(*Info.fallbackAddressSpace);
5355-
Result = DAG.getMemIntrinsicNode(Info.opc, getCurSDLoc(), VTs, Ops,
5356-
Info.memVT, MPI, Info.align, Info.flags,
5357-
Info.size, I.getAAMetadata());
5355+
EVT MemVT = Info.memVT;
5356+
LocationSize Size = LocationSize::precise(Info.size);
5357+
if (Size.hasValue() && !Size.getValue())
5358+
Size = LocationSize::precise(MemVT.getStoreSize());
5359+
Align Alignment = Info.align.value_or(DAG.getEVTAlign(MemVT));
5360+
MachineMemOperand *MMO = DAG.getMachineFunction().getMachineMemOperand(
5361+
MPI, Info.flags, Size, Alignment, I.getAAMetadata(), /*Ranges=*/nullptr,
5362+
Info.ssid, Info.order, Info.failureOrder);
5363+
Result =
5364+
DAG.getMemIntrinsicNode(Info.opc, getCurSDLoc(), VTs, Ops, MemVT, MMO);
53585365
} else if (!HasChain) {
53595366
Result = DAG.getNode(ISD::INTRINSIC_WO_CHAIN, getCurSDLoc(), VTs, Ops);
53605367
} else if (!I.getType()->isVoidTy()) {

0 commit comments

Comments
 (0)