diff --git a/llvm/lib/Target/LoongArch/LoongArchISelDAGToDAG.cpp b/llvm/lib/Target/LoongArch/LoongArchISelDAGToDAG.cpp index 70ed1e6fbdbda..d330f95355601 100644 --- a/llvm/lib/Target/LoongArch/LoongArchISelDAGToDAG.cpp +++ b/llvm/lib/Target/LoongArch/LoongArchISelDAGToDAG.cpp @@ -61,7 +61,7 @@ void LoongArchDAGToDAGISel::Select(SDNode *Node) { SDValue SrcReg = CurDAG->getRegister(LoongArch::R0, GRLenVT); // The instructions in the sequence are handled here. for (LoongArchMatInt::Inst &Inst : LoongArchMatInt::generateInstSeq(Imm)) { - SDValue SDImm = CurDAG->getTargetConstant(Inst.Imm, DL, GRLenVT); + SDValue SDImm = CurDAG->getSignedTargetConstant(Inst.Imm, DL, GRLenVT); switch (Inst.Opc) { case LoongArch::LU12I_W: Result = CurDAG->getMachineNode(Inst.Opc, DL, GRLenVT, SDImm); diff --git a/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp b/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp index 5c567ed4a6f72..1abb428175eea 100644 --- a/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp +++ b/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp @@ -1533,7 +1533,7 @@ SDValue LoongArchTargetLowering::lowerFRAMEADDR(SDValue Op, while (Depth--) { int Offset = -(GRLenInBytes * 2); SDValue Ptr = DAG.getNode(ISD::ADD, DL, VT, FrameAddr, - DAG.getIntPtrConstant(Offset, DL)); + DAG.getSignedConstant(Offset, DL, VT)); FrameAddr = DAG.getLoad(VT, DL, DAG.getEntryNode(), Ptr, MachinePointerInfo()); } @@ -2548,7 +2548,8 @@ SDValue LoongArchTargetLowering::lowerShiftLeftParts(SDValue Op, SDValue Zero = DAG.getConstant(0, DL, VT); SDValue One = DAG.getConstant(1, DL, VT); - SDValue MinusGRLen = DAG.getConstant(-(int)Subtarget.getGRLen(), DL, VT); + SDValue MinusGRLen = + DAG.getSignedConstant(-(int)Subtarget.getGRLen(), DL, VT); SDValue GRLenMinus1 = DAG.getConstant(Subtarget.getGRLen() - 1, DL, VT); SDValue ShamtMinusGRLen = DAG.getNode(ISD::ADD, DL, VT, Shamt, MinusGRLen); SDValue GRLenMinus1Shamt = DAG.getNode(ISD::XOR, DL, VT, Shamt, GRLenMinus1); @@ -2599,7 +2600,8 @@ SDValue LoongArchTargetLowering::lowerShiftRightParts(SDValue Op, SDValue Zero = DAG.getConstant(0, DL, VT); SDValue One = DAG.getConstant(1, DL, VT); - SDValue MinusGRLen = DAG.getConstant(-(int)Subtarget.getGRLen(), DL, VT); + SDValue MinusGRLen = + DAG.getSignedConstant(-(int)Subtarget.getGRLen(), DL, VT); SDValue GRLenMinus1 = DAG.getConstant(Subtarget.getGRLen() - 1, DL, VT); SDValue ShamtMinusGRLen = DAG.getNode(ISD::ADD, DL, VT, Shamt, MinusGRLen); SDValue GRLenMinus1Shamt = DAG.getNode(ISD::XOR, DL, VT, Shamt, GRLenMinus1); @@ -6123,8 +6125,8 @@ void LoongArchTargetLowering::LowerAsmOperandForConstraint( if (auto *C = dyn_cast(Op)) { uint64_t CVal = C->getSExtValue(); if (isInt<16>(CVal)) - Ops.push_back( - DAG.getTargetConstant(CVal, SDLoc(Op), Subtarget.getGRLenVT())); + Ops.push_back(DAG.getSignedTargetConstant(CVal, SDLoc(Op), + Subtarget.getGRLenVT())); } return; case 'I': @@ -6132,8 +6134,8 @@ void LoongArchTargetLowering::LowerAsmOperandForConstraint( if (auto *C = dyn_cast(Op)) { uint64_t CVal = C->getSExtValue(); if (isInt<12>(CVal)) - Ops.push_back( - DAG.getTargetConstant(CVal, SDLoc(Op), Subtarget.getGRLenVT())); + Ops.push_back(DAG.getSignedTargetConstant(CVal, SDLoc(Op), + Subtarget.getGRLenVT())); } return; case 'J': diff --git a/llvm/lib/Target/LoongArch/LoongArchInstrInfo.td b/llvm/lib/Target/LoongArch/LoongArchInstrInfo.td index cd1500229f4aa..7993f4f132693 100644 --- a/llvm/lib/Target/LoongArch/LoongArchInstrInfo.td +++ b/llvm/lib/Target/LoongArch/LoongArchInstrInfo.td @@ -481,8 +481,8 @@ def simm12_plus1 : ImmLeafgetTargetConstant(-N->getSExtValue(), SDLoc(N), - N->getValueType(0)); + return CurDAG->getSignedTargetConstant(-N->getSExtValue(), SDLoc(N), + N->getValueType(0)); }]>; // FP immediate patterns. @@ -538,16 +538,16 @@ def AddiPair : PatLeaf<(imm), [{ // Return -2048 if immediate is negative or 2047 if positive. def AddiPairImmLarge : SDNodeXFormgetSExtValue() < 0 ? -2048 : 2047; - return CurDAG->getTargetConstant(Imm, SDLoc(N), - N->getValueType(0)); + return CurDAG->getSignedTargetConstant(Imm, SDLoc(N), + N->getValueType(0)); }]>; // Return imm - (imm < 0 ? -2048 : 2047). def AddiPairImmSmall : SDNodeXFormgetSExtValue(); int64_t Adj = Imm < 0 ? -2048 : 2047; - return CurDAG->getTargetConstant(Imm - Adj, SDLoc(N), - N->getValueType(0)); + return CurDAG->getSignedTargetConstant(Imm - Adj, SDLoc(N), + N->getValueType(0)); }]>; // Check if (mul r, imm) can be optimized to (SLLI (ALSL r, r, i0), i1), diff --git a/llvm/lib/Target/LoongArch/LoongArchLSXInstrInfo.td b/llvm/lib/Target/LoongArch/LoongArchLSXInstrInfo.td index 1a267b3e42a30..ced430216b2fe 100644 --- a/llvm/lib/Target/LoongArch/LoongArchLSXInstrInfo.td +++ b/llvm/lib/Target/LoongArch/LoongArchLSXInstrInfo.td @@ -223,12 +223,14 @@ def f64imm_vldi : PatLeaf<(fpimm), [{ def to_f32imm_vldi : SDNodeXFormgetValueAPF().bitcastToAPInt().getZExtValue(); x = (0b11011 << 8) | (((x >> 24) & 0xc0) ^ 0x40) | ((x >> 19) & 0x3f); - return CurDAG->getTargetConstant(SignExtend32<13>(x), SDLoc(N), MVT::i32); + return CurDAG->getSignedTargetConstant(SignExtend32<13>(x), SDLoc(N), + MVT::i32); }]>; def to_f64imm_vldi : SDNodeXFormgetValueAPF().bitcastToAPInt().getZExtValue(); x = (0b11100 << 8) | (((x >> 56) & 0xc0) ^ 0x40) | ((x >> 48) & 0x3f); - return CurDAG->getTargetConstant(SignExtend32<13>(x), SDLoc(N), MVT::i32); + return CurDAG->getSignedTargetConstant(SignExtend32<13>(x), SDLoc(N), + MVT::i32); }]>; //===----------------------------------------------------------------------===//