Add a nasty hack to fix Alpha/IA64 multiplies by a power of two.
authorChris Lattner <sabre@nondot.org>
Sat, 22 Jan 2005 00:20:42 +0000 (00:20 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 22 Jan 2005 00:20:42 +0000 (00:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19737 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/SelectionDAG.cpp

index 3d7d3bfa6fa42435054f2a981f4c6ae6e658369a..1ed3dc17fda97f1555103a8fcf9d3c5558148a49 100644 (file)
@@ -446,6 +446,7 @@ SDOperand SelectionDAG::getSetCC(ISD::CondCode Cond, MVT::ValueType VT,
         else {
           assert(N1.getOpcode() == ISD::SUB && "Unexpected operation!");
           // (Z-X) == X  --> Z == X<<1
+          if (N2.getValueType() != MVT::i64)   // FIXME: HACK HACK HACK!
           return getSetCC(Cond, VT, N1.getOperand(0),
                           getNode(ISD::SHL, N2.getValueType(), 
                                   N2, getConstant(1, MVT::i8)));
@@ -654,8 +655,10 @@ SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
       // FIXME: This should only be done if the target supports shift
       // operations.
       if ((C2 & C2-1) == 0) {
-        SDOperand ShAmt = getConstant(ExactLog2(C2), MVT::i8);
-        return getNode(ISD::SHL, VT, N1, ShAmt);
+        if (N2.getValueType() != MVT::i64) {  // FIXME: HACK HACK HACK!
+          SDOperand ShAmt = getConstant(ExactLog2(C2), MVT::i8);
+          return getNode(ISD::SHL, VT, N1, ShAmt);
+        }
       }
       break;
 
@@ -663,8 +666,10 @@ SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
       // FIXME: This should only be done if the target supports shift
       // operations.
       if ((C2 & C2-1) == 0 && C2) {
-        SDOperand ShAmt = getConstant(ExactLog2(C2), MVT::i8);
-        return getNode(ISD::SRL, VT, N1, ShAmt);
+        if (N2.getValueType() != MVT::i64) {   // FIXME: HACK HACK HACK!
+          SDOperand ShAmt = getConstant(ExactLog2(C2), MVT::i8);
+          return getNode(ISD::SRL, VT, N1, ShAmt);
+        }
       }
       break;