Skip to content

Commit 7177dc2

Browse files
authored
[SDAG] Apply or-disjoint in SelectionDAG::isBaseWithConstantOffset (#88493)
Signed-off-by: feng.feng <[email protected]>
1 parent 52a1998 commit 7177dc2

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5203,15 +5203,8 @@ bool SelectionDAG::isADDLike(SDValue Op) const {
52035203
}
52045204

52055205
bool SelectionDAG::isBaseWithConstantOffset(SDValue Op) const {
5206-
if ((Op.getOpcode() != ISD::ADD && Op.getOpcode() != ISD::OR) ||
5207-
!isa<ConstantSDNode>(Op.getOperand(1)))
5208-
return false;
5209-
5210-
if (Op.getOpcode() == ISD::OR &&
5211-
!MaskedValueIsZero(Op.getOperand(0), Op.getConstantOperandAPInt(1)))
5212-
return false;
5213-
5214-
return true;
5206+
return Op.getNumOperands() == 2 && isa<ConstantSDNode>(Op.getOperand(1)) &&
5207+
(Op.getOpcode() == ISD::ADD || isADDLike(Op));
52155208
}
52165209

52175210
bool SelectionDAG::isKnownNeverNaN(SDValue Op, bool SNaN, unsigned Depth) const {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -mtriple=avr %s -start-before=avr-isel -o - | FileCheck %s
3+
4+
define void @test(i16 %x, ptr addrspace(1) %o) {
5+
; CHECK-LABEL: test:
6+
; CHECK: ; %bb.0:
7+
; CHECK-NEXT: mov r30, r22
8+
; CHECK-NEXT: mov r31, r23
9+
; CHECK-NEXT: std Z+11, r25
10+
; CHECK-NEXT: std Z+10, r24
11+
; CHECK-NEXT: ret
12+
%int = ptrtoint ptr addrspace(1) %o to i16
13+
%or = or disjoint i16 %int, 10
14+
%addr = inttoptr i16 %or to ptr addrspace(1)
15+
store i16 %x, ptr addrspace(1) %addr
16+
ret void
17+
}
18+

0 commit comments

Comments
 (0)