@@ -712,7 +712,8 @@ bool ARMDAGToDAGISel::SelectAddrModeImm12(SDValue N,
712712 Base = CurDAG->getTargetFrameIndex (
713713 FI, TLI->getPointerTy (CurDAG->getDataLayout ()));
714714 }
715- OffImm = CurDAG->getTargetConstant (RHSC, SDLoc (N), MVT::i32 );
715+ OffImm = CurDAG->getSignedConstant (RHSC, SDLoc (N), MVT::i32 ,
716+ /* isTarget=*/ true );
716717 return true ;
717718 }
718719 }
@@ -881,7 +882,8 @@ bool ARMDAGToDAGISel::SelectAddrMode2OffsetImmPre(SDNode *Op, SDValue N,
881882 if (isScaledConstantInRange (N, /* Scale=*/ 1 , 0 , 0x1000 , Val)) { // 12 bits.
882883 if (AddSub == ARM_AM::sub) Val *= -1 ;
883884 Offset = CurDAG->getRegister (0 , MVT::i32 );
884- Opc = CurDAG->getTargetConstant (Val, SDLoc (Op), MVT::i32 );
885+ Opc =
886+ CurDAG->getSignedConstant (Val, SDLoc (Op), MVT::i32 , /* isTarget*/ true );
885887 return true ;
886888 }
887889
@@ -1185,7 +1187,8 @@ ARMDAGToDAGISel::SelectThumbAddrModeImm5S(SDValue N, unsigned Scale,
11851187 int RHSC;
11861188 if (isScaledConstantInRange (N.getOperand (1 ), Scale, 0 , 32 , RHSC)) {
11871189 Base = N.getOperand (0 );
1188- OffImm = CurDAG->getTargetConstant (RHSC, SDLoc (N), MVT::i32 );
1190+ OffImm =
1191+ CurDAG->getSignedConstant (RHSC, SDLoc (N), MVT::i32 , /* isTarget=*/ true );
11891192 return true ;
11901193 }
11911194
@@ -1247,7 +1250,8 @@ bool ARMDAGToDAGISel::SelectThumbAddrModeSP(SDValue N,
12471250 if (MFI.getObjectAlign (FI) >= Align (4 )) {
12481251 Base = CurDAG->getTargetFrameIndex (
12491252 FI, TLI->getPointerTy (CurDAG->getDataLayout ()));
1250- OffImm = CurDAG->getTargetConstant (RHSC, SDLoc (N), MVT::i32 );
1253+ OffImm = CurDAG->getSignedConstant (RHSC, SDLoc (N), MVT::i32 ,
1254+ /* isTarget=*/ true );
12511255 return true ;
12521256 }
12531257 }
@@ -1267,8 +1271,8 @@ bool ARMDAGToDAGISel::SelectTAddrModeImm7(SDValue N, SDValue &Base,
12671271 Base = N.getOperand (0 );
12681272 if (N.getOpcode () == ISD::SUB)
12691273 RHSC = -RHSC;
1270- OffImm =
1271- CurDAG-> getTargetConstant (RHSC * ( 1 << Shift), SDLoc (N), MVT::i32 );
1274+ OffImm = CurDAG-> getSignedConstant (RHSC * ( 1 << Shift), SDLoc (N),
1275+ MVT::i32 , /* isTarget= */ true );
12721276 return true ;
12731277 }
12741278 }
@@ -1330,7 +1334,8 @@ bool ARMDAGToDAGISel::SelectT2AddrModeImm12(SDValue N,
13301334 Base = CurDAG->getTargetFrameIndex (
13311335 FI, TLI->getPointerTy (CurDAG->getDataLayout ()));
13321336 }
1333- OffImm = CurDAG->getTargetConstant (RHSC, SDLoc (N), MVT::i32 );
1337+ OffImm = CurDAG->getSignedConstant (RHSC, SDLoc (N), MVT::i32 ,
1338+ /* isTarget=*/ true );
13341339 return true ;
13351340 }
13361341 }
@@ -1357,7 +1362,8 @@ bool ARMDAGToDAGISel::SelectT2AddrModeImm8(SDValue N, SDValue &Base,
13571362 if (N.getOpcode () == ISD::SUB)
13581363 RHSC = -RHSC;
13591364 OffImm =
1360- CurDAG->getTargetConstant (RHSC * (1 << Shift), SDLoc (N), MVT::i32 );
1365+ CurDAG->getSignedConstant (RHSC * (1 << Shift), SDLoc (N), MVT::i32 ,
1366+ /* isTarget=*/ true );
13611367 return true ;
13621368 }
13631369 }
@@ -1387,7 +1393,8 @@ bool ARMDAGToDAGISel::SelectT2AddrModeImm8(SDValue N,
13871393 Base = CurDAG->getTargetFrameIndex (
13881394 FI, TLI->getPointerTy (CurDAG->getDataLayout ()));
13891395 }
1390- OffImm = CurDAG->getTargetConstant (RHSC, SDLoc (N), MVT::i32 );
1396+ OffImm = CurDAG->getSignedConstant (RHSC, SDLoc (N), MVT::i32 ,
1397+ /* isTarget=*/ true );
13911398 return true ;
13921399 }
13931400 }
@@ -1404,8 +1411,10 @@ bool ARMDAGToDAGISel::SelectT2AddrModeImm8Offset(SDNode *Op, SDValue N,
14041411 int RHSC;
14051412 if (isScaledConstantInRange (N, /* Scale=*/ 1 , 0 , 0x100 , RHSC)) { // 8 bits.
14061413 OffImm = ((AM == ISD::PRE_INC) || (AM == ISD::POST_INC))
1407- ? CurDAG->getTargetConstant (RHSC, SDLoc (N), MVT::i32 )
1408- : CurDAG->getTargetConstant (-RHSC, SDLoc (N), MVT::i32 );
1414+ ? CurDAG->getSignedConstant (RHSC, SDLoc (N), MVT::i32 ,
1415+ /* isTarget=*/ true )
1416+ : CurDAG->getSignedConstant (-RHSC, SDLoc (N), MVT::i32 ,
1417+ /* isTarget=*/ true );
14091418 return true ;
14101419 }
14111420
@@ -1428,8 +1437,8 @@ bool ARMDAGToDAGISel::SelectT2AddrModeImm7(SDValue N, SDValue &Base,
14281437
14291438 if (N.getOpcode () == ISD::SUB)
14301439 RHSC = -RHSC;
1431- OffImm =
1432- CurDAG-> getTargetConstant (RHSC * ( 1 << Shift), SDLoc (N), MVT::i32 );
1440+ OffImm = CurDAG-> getSignedConstant (RHSC * ( 1 << Shift), SDLoc (N),
1441+ MVT::i32 , /* isTarget= */ true );
14331442 return true ;
14341443 }
14351444 }
@@ -1471,11 +1480,11 @@ bool ARMDAGToDAGISel::SelectT2AddrModeImm7Offset(SDNode *Op, SDValue N,
14711480 int RHSC;
14721481 // 7 bit constant, shifted by Shift.
14731482 if (isScaledConstantInRange (N, 1 << Shift, 0 , 0x80 , RHSC)) {
1474- OffImm =
1475- ((AM == ISD::PRE_INC) || (AM == ISD::POST_INC))
1476- ? CurDAG-> getTargetConstant (RHSC * ( 1 << Shift), SDLoc (N), MVT::i32 )
1477- : CurDAG->getTargetConstant (-RHSC * (1 << Shift), SDLoc (N),
1478- MVT::i32 );
1483+ OffImm = ((AM == ISD::PRE_INC) || (AM == ISD::POST_INC))
1484+ ? CurDAG-> getSignedConstant (RHSC * ( 1 << Shift), SDLoc (N),
1485+ MVT::i32 , /* isTarget= */ true )
1486+ : CurDAG->getSignedConstant (-RHSC * (1 << Shift), SDLoc (N),
1487+ MVT::i32 , /* isTarget= */ true );
14791488 return true ;
14801489 }
14811490 return false ;
@@ -1485,7 +1494,8 @@ template <int Min, int Max>
14851494bool ARMDAGToDAGISel::SelectImmediateInRange (SDValue N, SDValue &OffImm) {
14861495 int Val;
14871496 if (isScaledConstantInRange (N, 1 , Min, Max, Val)) {
1488- OffImm = CurDAG->getTargetConstant (Val, SDLoc (N), MVT::i32 );
1497+ OffImm =
1498+ CurDAG->getSignedConstant (Val, SDLoc (N), MVT::i32 , /* isTarget=*/ true );
14891499 return true ;
14901500 }
14911501 return false ;
@@ -3861,8 +3871,7 @@ void ARMDAGToDAGISel::Select(SDNode *N) {
38613871 ConstantMaterializationCost (~Imm, Subtarget)) {
38623872 // The current immediate costs more to materialize than a negated
38633873 // immediate, so negate the immediate and use a BIC.
3864- SDValue NewImm =
3865- CurDAG->getConstant (~N1C->getZExtValue (), dl, MVT::i32 );
3874+ SDValue NewImm = CurDAG->getConstant (~Imm, dl, MVT::i32 );
38663875 // If the new constant didn't exist before, reposition it in the topological
38673876 // ordering so it is just before N. Otherwise, don't touch its location.
38683877 if (NewImm->getNodeId () == -1 )
0 commit comments