Fix a regression in the 32-bit port from the 64-bit port landing.
authorChris Lattner <sabre@nondot.org>
Wed, 13 Sep 2006 04:45:25 +0000 (04:45 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 13 Sep 2006 04:45:25 +0000 (04:45 +0000)
We now compile CodeGen/X86/lea-2.ll into:

_test:
        movl 4(%esp), %eax
        movl 8(%esp), %ecx
        leal -5(%ecx,%eax,4), %eax
        ret

instead of:

_test:
        movl 4(%esp), %eax
        leal (,%eax,4), %eax
        addl 8(%esp), %eax
        addl $4294967291, %eax
        ret

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30288 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelDAGToDAG.cpp

index 20e7edc668f18f79da0cd1adab79eece71ca059a..9d655b0677b0b7ddd430b04f8103fbbeb7950e6a 100644 (file)
@@ -498,7 +498,7 @@ bool X86DAGToDAGISel::MatchAddress(SDOperand N, X86ISelAddressMode &AM,
   // RIP relative addressing: %rip + 32-bit displacement!
   if (AM.isRIPRel) {
     if (!AM.ES && AM.JT != -1 && N.getOpcode() == ISD::Constant) {
-      uint64_t Val = cast<ConstantSDNode>(N)->getValue();
+      int64_t Val = cast<ConstantSDNode>(N)->getSignExtended();
       if (isInt32(AM.Disp + Val)) {
         AM.Disp += Val;
         return false;
@@ -513,7 +513,7 @@ bool X86DAGToDAGISel::MatchAddress(SDOperand N, X86ISelAddressMode &AM,
   switch (N.getOpcode()) {
   default: break;
   case ISD::Constant: {
-    uint64_t Val = cast<ConstantSDNode>(N)->getValue();
+    int64_t Val = cast<ConstantSDNode>(N)->getSignExtended();
     if (isInt32(AM.Disp + Val)) {
       AM.Disp += Val;
       return false;