Fix a couple of minor bugs. The first fixes povray, the second fixes things
authorChris Lattner <sabre@nondot.org>
Tue, 25 Oct 2005 19:32:37 +0000 (19:32 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 25 Oct 2005 19:32:37 +0000 (19:32 +0000)
if the dag combiner isn't run

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

lib/Target/PowerPC/PPCISelDAGToDAG.cpp

index 336c2b1540868af8e23f617ba5875e0968f183b0..7b3227dcaa8e8e0a441f9d6df00c3746d45bd2b4 100644 (file)
@@ -898,8 +898,11 @@ SDOperand PPCDAGToDAGISel::Select(SDOperand Op) {
       Tmp = CurDAG->getTargetNode(PPC::ADDIS, MVT::i32, getGlobalBaseReg(),CPI);
     else
       Tmp = CurDAG->getTargetNode(PPC::LIS, MVT::i32, CPI);
-    CurDAG->SelectNodeTo(N, PPC::LA, MVT::i32, Tmp, CPI);
-    return SDOperand(N, 0);
+    if (N->hasOneUse()) {
+      CurDAG->SelectNodeTo(N, PPC::LA, MVT::i32, Tmp, CPI);
+      return SDOperand(N, 0);
+    }
+    return CurDAG->getTargetNode(PPC::LA, MVT::i32, Tmp, CPI);
   }
   case ISD::GlobalAddress: {
     GlobalValue *GV = cast<GlobalAddressSDNode>(N)->getGlobal();
@@ -1035,7 +1038,10 @@ SDOperand PPCDAGToDAGISel::Select(SDOperand Op) {
       unsigned SH, MB, ME;
       if (isRotateAndMask(N->getOperand(0).Val, Imm, false, SH, MB, ME)) {
         Val = Select(N->getOperand(0).getOperand(0));
-      } else {
+      } else if (Imm == 0) {
+        // AND X, 0 -> 0, not "rlwinm 32".
+        return Select(N->getOperand(1));
+      } else {        
         Val = Select(N->getOperand(0));
         isRunOfOnes(Imm, MB, ME);
         SH = 0;