Skip to content

Commit 6b5c67b

Browse files
authored
[PowerPC][Backend] using signed extend value instead of zero extend value for isIntS34Immediate() (#118703)
The patch fix the issue #118695
1 parent f9f7c42 commit 6b5c67b

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

llvm/lib/Target/PowerPC/PPCISelLowering.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2703,7 +2703,7 @@ bool llvm::isIntS34Immediate(SDNode *N, int64_t &Imm) {
27032703
if (!isa<ConstantSDNode>(N))
27042704
return false;
27052705

2706-
Imm = (int64_t)N->getAsZExtVal();
2706+
Imm = (int64_t)cast<ConstantSDNode>(N)->getSExtValue();
27072707
return isInt<34>(Imm);
27082708
}
27092709
bool llvm::isIntS34Immediate(SDValue Op, int64_t &Imm) {
@@ -2925,7 +2925,7 @@ bool PPCTargetLowering::SelectAddressRegImm34(SDValue N, SDValue &Disp,
29252925
if (N.getOpcode() == ISD::ADD) {
29262926
if (!isIntS34Immediate(N.getOperand(1), Imm))
29272927
return false;
2928-
Disp = DAG.getTargetConstant(Imm, dl, N.getValueType());
2928+
Disp = DAG.getSignedTargetConstant(Imm, dl, N.getValueType());
29292929
if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(N.getOperand(0)))
29302930
Base = DAG.getTargetFrameIndex(FI->getIndex(), N.getValueType());
29312931
else
@@ -2946,12 +2946,12 @@ bool PPCTargetLowering::SelectAddressRegImm34(SDValue N, SDValue &Disp,
29462946
Base = DAG.getTargetFrameIndex(FI->getIndex(), N.getValueType());
29472947
else
29482948
Base = N.getOperand(0);
2949-
Disp = DAG.getTargetConstant(Imm, dl, N.getValueType());
2949+
Disp = DAG.getSignedTargetConstant(Imm, dl, N.getValueType());
29502950
return true;
29512951
}
29522952

29532953
if (isIntS34Immediate(N, Imm)) { // If the address is a 34-bit const.
2954-
Disp = DAG.getTargetConstant(Imm, dl, N.getValueType());
2954+
Disp = DAG.getSignedTargetConstant(Imm, dl, N.getValueType());
29552955
Base = DAG.getRegister(PPC::ZERO8, N.getValueType());
29562956
return true;
29572957
}

llvm/test/CodeGen/PowerPC/pr118695.ll

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
; RUN: llc < %s -verify-machineinstrs -mtriple=powerpc-aix- -mcpu=pwr10 | FileCheck %s
2+
3+
; CHECK: # %bb.0: # %bb
4+
; CHECK-NEXT: lwz 3, L..C0(2) # @dvar
5+
; CHECK-NEXT: plxv 0, -152758(3), 0
6+
; CHECK-NEXT: stxv 0, 0(3)
7+
; CHECK-NEXT: blr
8+
9+
%0 = type <{ double }>
10+
@dvar = external global [2352637 x %0]
11+
12+
define void @Test() {
13+
bb:
14+
%i9 = load <2 x double>, ptr getelementptr inbounds (i8, ptr @dvar, i64 -152758), align 8
15+
store <2 x double> %i9, ptr @dvar, align 8
16+
ret void
17+
}

0 commit comments

Comments
 (0)