Skip to content

Commit a90d653

Browse files
authored
[RISCV] Add RISCVISD::LD_RV32/SD_RV32 to isWorthFoldingAdd. (#151606)
1 parent 9c90f84 commit a90d653

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2827,6 +2827,8 @@ static bool selectConstantAddr(SelectionDAG *CurDAG, const SDLoc &DL,
28272827
static bool isWorthFoldingAdd(SDValue Add) {
28282828
for (auto *User : Add->users()) {
28292829
if (User->getOpcode() != ISD::LOAD && User->getOpcode() != ISD::STORE &&
2830+
User->getOpcode() != RISCVISD::LD_RV32 &&
2831+
User->getOpcode() != RISCVISD::SD_RV32 &&
28302832
User->getOpcode() != ISD::ATOMIC_LOAD &&
28312833
User->getOpcode() != ISD::ATOMIC_STORE)
28322834
return false;
@@ -2841,6 +2843,9 @@ static bool isWorthFoldingAdd(SDValue Add) {
28412843
if (User->getOpcode() == ISD::ATOMIC_STORE &&
28422844
cast<AtomicSDNode>(User)->getVal() == Add)
28432845
return false;
2846+
if (User->getOpcode() == RISCVISD::SD_RV32 &&
2847+
(User->getOperand(0) == Add || User->getOperand(1) == Add))
2848+
return false;
28442849
if (isStrongerThanMonotonic(cast<MemSDNode>(User)->getSuccessOrdering()))
28452850
return false;
28462851
}

llvm/test/CodeGen/RISCV/zilsd.ll

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,22 @@ entyr:
117117
store i64 0, ptr @g
118118
ret void
119119
}
120+
121+
define void @large_offset(ptr nocapture %p, i64 %d) nounwind {
122+
; CHECK-LABEL: large_offset:
123+
; CHECK: # %bb.0: # %entry
124+
; CHECK-NEXT: lui a1, 4
125+
; CHECK-NEXT: add a0, a0, a1
126+
; CHECK-NEXT: ld a2, -384(a0)
127+
; CHECK-NEXT: addi a2, a2, 1
128+
; CHECK-NEXT: seqz a1, a2
129+
; CHECK-NEXT: add a3, a3, a1
130+
; CHECK-NEXT: sd a2, -384(a0)
131+
; CHECK-NEXT: ret
132+
entry:
133+
%add.ptr = getelementptr inbounds i64, ptr %p, i64 2000
134+
%a = load i64, ptr %add.ptr, align 8
135+
%b = add i64 %a, 1
136+
store i64 %b, ptr %add.ptr, align 8
137+
ret void
138+
}

0 commit comments

Comments
 (0)