Skip to content

Commit 78ecf8a

Browse files
committed
fixup! [RISCV] Optimized and with atomic_load into zextload when safe.
Added pattern match for atomic_load_zext_n with replacement of getLoad with getAtomicLoad.
1 parent c969abf commit 78ecf8a

File tree

2 files changed

+6
-9
lines changed

2 files changed

+6
-9
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15297,8 +15297,6 @@ static SDValue reduceANDOfAtomicLoad(SDNode *N,
1529715297
return SDValue();
1529815298

1529915299
EVT LoadedVT = ALoad->getMemoryVT();
15300-
EVT ResultVT = N->getValueType(0);
15301-
1530215300
uint64_t Mask = maskTrailingOnes<uint64_t>(LoadedVT.getSizeInBits());
1530315301
uint64_t ExpectedMask = LoadedVT.getSizeInBits() == 8 ? 0xFF
1530415302
: LoadedVT.getSizeInBits() == 16 ? 0xFFFF
@@ -15307,13 +15305,9 @@ static SDValue reduceANDOfAtomicLoad(SDNode *N,
1530715305
if (Mask != ExpectedMask)
1530815306
return SDValue();
1530915307

15310-
SDLoc DL(N);
15311-
SDValue Chain = ALoad->getChain();
15312-
SDValue Ptr = ALoad->getBasePtr();
15313-
MachineMemOperand *MemOp = ALoad->getMemOperand();
15314-
SDValue ZextLoad = DAG.getExtLoad(ISD::ZEXTLOAD, DL, ResultVT, Chain, Ptr,
15315-
MemOp->getPointerInfo(), LoadedVT,
15316-
MemOp->getAlign(), MemOp->getFlags());
15308+
SDValue ZextLoad = DAG.getAtomicLoad(
15309+
ISD::ZEXTLOAD, SDLoc(N), ALoad->getMemoryVT(), N->getValueType(0),
15310+
ALoad->getChain(), ALoad->getBasePtr(), ALoad->getMemOperand());
1531715311
DCI.CombineTo(N, ZextLoad);
1531815312
DAG.ReplaceAllUsesOfValueWith(SDValue(N0.getNode(), 1), ZextLoad.getValue(1));
1531915313
DCI.recursivelyDeleteUnusedNodes(N0.getNode());

llvm/lib/Target/RISCV/RISCVInstrInfoA.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,8 @@ class seq_cst_store<PatFrag base>
167167
let Predicates = [HasAtomicLdSt] in {
168168
def : LdPat<relaxed_load<atomic_load_asext_8>, LB>;
169169
def : LdPat<relaxed_load<atomic_load_asext_16>, LH>;
170+
def : LdPat<relaxed_load<atomic_load_zext_8>, LBU>;
171+
def : LdPat<relaxed_load<atomic_load_zext_16>, LHU>;
170172

171173
def : StPat<relaxed_store<atomic_store_8>, SB, GPR, XLenVT>;
172174
def : StPat<relaxed_store<atomic_store_16>, SH, GPR, XLenVT>;
@@ -179,6 +181,7 @@ let Predicates = [HasAtomicLdSt, IsRV32] in {
179181

180182
let Predicates = [HasAtomicLdSt, IsRV64] in {
181183
def : LdPat<relaxed_load<atomic_load_asext_32>, LW>;
184+
def : LdPat<relaxed_load<atomic_load_zext_32>, LWU>;
182185
def : LdPat<relaxed_load<atomic_load_64>, LD, i64>;
183186
def : StPat<relaxed_store<atomic_store_64>, SD, GPR, i64>;
184187
}

0 commit comments

Comments
 (0)