diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index 4ca328bd9a9ba..21ff6f050817a 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -19050,8 +19050,8 @@ PPC::AddrMode PPCTargetLowering::SelectOptimalAddrMode(const SDNode *Parent, int32_t Addr = (int32_t)CNImm; // Otherwise, break this down into LIS + Disp. Disp = DAG.getSignedTargetConstant((int16_t)Addr, DL, MVT::i32); - Base = - DAG.getTargetConstant((Addr - (int16_t)Addr) >> 16, DL, MVT::i32); + Base = DAG.getSignedTargetConstant((Addr - (int16_t)Addr) >> 16, DL, + MVT::i32); uint32_t LIS = CNType == MVT::i32 ? PPC::LIS : PPC::LIS8; Base = SDValue(DAG.getMachineNode(LIS, DL, CNType, Base), 0); break; diff --git a/llvm/test/CodeGen/PowerPC/pr127298.ll b/llvm/test/CodeGen/PowerPC/pr127298.ll new file mode 100644 index 0000000000000..f7560216ef7d8 --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/pr127298.ll @@ -0,0 +1,13 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 +; RUN: llc < %s -mtriple=powerpc | FileCheck %s + +define void @foo() { +; CHECK-LABEL: foo: +; CHECK: # %bb.0: # %Entry +; CHECK-NEXT: lis 3, -8530 +; CHECK-NEXT: lbz 3, -16657(3) +; CHECK-NEXT: blr +Entry: + %0 = load volatile i8, ptr inttoptr (i32 -559038737 to ptr), align 1 + ret void +}