remove 32 sign extend after 32 sextload and handle small negative constant
authorAndrew Lenharth <andrewl@lenharth.org>
Wed, 2 Mar 2005 17:23:03 +0000 (17:23 +0000)
committerAndrew Lenharth <andrewl@lenharth.org>
Wed, 2 Mar 2005 17:23:03 +0000 (17:23 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20408 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Alpha/AlphaISelPattern.cpp

index 41028da7a255d2af3b96f03232124609b5976c12..f2d922a808bcdfc6dd583b213bf0118be678eda2 100644 (file)
@@ -1027,6 +1027,10 @@ unsigned ISel::SelectExpr(SDOperand N) {
             }
             return Result;
           }
+        case ISD::SEXTLOAD:
+          //SelectionDag isn't deleting the signextend after sextloads
+          Reg = Result = SelectExpr(N.getOperand(0));
+          return Result;
         default: break; //Fall Though;
         }
       } //Every thing else fall though too, including unhandled opcodes above
@@ -1304,10 +1308,11 @@ unsigned ISel::SelectExpr(SDOperand N) {
         BuildMI(BB, Opc, 2, Result).addReg(Tmp1).addImm(Tmp2);
       }
       else if(N.getOperand(1).getOpcode() == ISD::Constant &&
-              cast<ConstantSDNode>(N.getOperand(1))->getValue() <= 32767)
-      { //LDA  //FIXME: expand the above condition a bit
+              (cast<ConstantSDNode>(N.getOperand(1))->getValue() <= 32767 ||
+               (long)cast<ConstantSDNode>(N.getOperand(1))->getValue() >= -32767))
+      { //LDA
         Tmp1 = SelectExpr(N.getOperand(0));
-        Tmp2 = cast<ConstantSDNode>(N.getOperand(1))->getValue();
+        Tmp2 = (long)cast<ConstantSDNode>(N.getOperand(1))->getValue();
         if (!isAdd)
           Tmp2 = -Tmp2;
         BuildMI(BB, Alpha::LDA, 2, Result).addImm(Tmp2).addReg(Tmp1);
@@ -1387,7 +1392,7 @@ unsigned ISel::SelectExpr(SDOperand N) {
     {
       unsigned long val = cast<ConstantSDNode>(N)->getValue();
       if (val < 32000 && (long)val > -32000)
-        BuildMI(BB, Alpha::LOAD_IMM, 1, Result).addImm(val);
+        BuildMI(BB, Alpha::LOAD_IMM, 1, Result).addImm((long)val);
       else {
         MachineConstantPool *CP = BB->getParent()->getConstantPool();
         ConstantUInt *C = ConstantUInt::get(Type::getPrimitiveType(Type::ULongTyID) , val);