Skip to content

Commit 04a2d50

Browse files
committed
[PPC] Use getSignedConstant() for frame index offset
The offset is signed. Fixes assertion failure reported at: #117558 (comment)
1 parent 79eb406 commit 04a2d50

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,8 @@ namespace {
193193
}
194194

195195
/// getSmallIPtrImm - Return a target constant of pointer type.
196-
inline SDValue getSmallIPtrImm(uint64_t Imm, const SDLoc &dl) {
197-
return CurDAG->getTargetConstant(
196+
inline SDValue getSmallIPtrImm(int64_t Imm, const SDLoc &dl) {
197+
return CurDAG->getSignedTargetConstant(
198198
Imm, dl, PPCLowering->getPointerTy(CurDAG->getDataLayout()));
199199
}
200200

@@ -207,7 +207,7 @@ namespace {
207207
/// base register. Return the virtual register that holds this value.
208208
SDNode *getGlobalBaseReg();
209209

210-
void selectFrameIndex(SDNode *SN, SDNode *N, uint64_t Offset = 0);
210+
void selectFrameIndex(SDNode *SN, SDNode *N, int64_t Offset = 0);
211211

212212
// Select - Convert the specified operand from a target-independent to a
213213
// target-specific node if it hasn't already been changed.
@@ -639,7 +639,7 @@ static bool isOpcWithIntImmediate(SDNode *N, unsigned Opc, unsigned& Imm) {
639639
&& isInt32Immediate(N->getOperand(1).getNode(), Imm);
640640
}
641641

642-
void PPCDAGToDAGISel::selectFrameIndex(SDNode *SN, SDNode *N, uint64_t Offset) {
642+
void PPCDAGToDAGISel::selectFrameIndex(SDNode *SN, SDNode *N, int64_t Offset) {
643643
SDLoc dl(SN);
644644
int FI = cast<FrameIndexSDNode>(N)->getIndex();
645645
SDValue TFI = CurDAG->getTargetFrameIndex(FI, N->getValueType(0));
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -mtriple=powerpc-unknown-linux-gnu < %s | FileCheck %s
3+
4+
define ptr @test() nounwind {
5+
; CHECK-LABEL: test:
6+
; CHECK: # %bb.0:
7+
; CHECK-NEXT: stwu 1, -16(1)
8+
; CHECK-NEXT: addi 3, 1, 10
9+
; CHECK-NEXT: addi 1, 1, 16
10+
; CHECK-NEXT: blr
11+
%alloca = alloca i32
12+
%gep = getelementptr i8, ptr %alloca, i32 -2
13+
ret ptr %gep
14+
}

0 commit comments

Comments
 (0)