[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp

Nate Begeman natebegeman at mac.com
Tue Sep 28 19:35:15 PDT 2004



Changes in directory llvm/lib/Target/PowerPC:

PPC32ISelSimple.cpp updated: 1.82 -> 1.83
---
Log message:

To go along with sabre's improved InstCombining, improve recognition of
integers that we can use as immediate values in instructions.

Example from yacr2:
-       lis r10, -1
-       ori r10, r10, 65535
-       add r28, r28, r10
+       addi r28, r28, -1
        addi r7, r7, 1
        addi r9, r9, 1
        b .LBB_main_9   ; loopentry.1.i214


---
Diffs of the changes:  (+9 -21)

Index: llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp
diff -u llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp:1.82 llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp:1.83
--- llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp:1.82	Mon Sep 27 00:07:25 2004
+++ llvm/lib/Target/PowerPC/PPC32ISelSimple.cpp	Tue Sep 28 21:35:05 2004
@@ -32,9 +32,6 @@
 using namespace llvm;
 
 namespace {
-  Statistic<>
-  MultiUseGEP("ppc-codegen", "Number of GEPs folded with more than one use");
-  
   /// TypeClass - Used by the PowerPC backend to group LLVM types by their basic
   /// PPC Representation.
   ///
@@ -491,34 +488,27 @@
   ConstantUInt *Op1Cu;
       
   // ADDI, Compare, and non-indexed Load take SIMM
-  bool cond1 = (Operator == 0) 
-    && (Op1Cs = dyn_cast<ConstantSInt>(CI))
-    && (Op1Cs->getValue() <= 32767)
-    && (Op1Cs->getValue() >= -32768);
+  bool cond1 = (Operator == 0)
+    && ((int32_t)CI->getRawValue() <= 32767)
+    && ((int32_t)CI->getRawValue() >= -32768);
 
   // SUBI takes -SIMM since it is a mnemonic for ADDI
   bool cond2 = (Operator == 1)
-    && (Op1Cs = dyn_cast<ConstantSInt>(CI)) 
-    && (Op1Cs->getValue() <= 32768)
-    && (Op1Cs->getValue() >= -32767);
+    && ((int32_t)CI->getRawValue() <= 32768)
+    && ((int32_t)CI->getRawValue() >= -32767);
       
   // ANDIo, ORI, and XORI take unsigned values
   bool cond3 = (Operator >= 2)
     && (Op1Cs = dyn_cast<ConstantSInt>(CI))
     && (Op1Cs->getValue() >= 0)
-    && (Op1Cs->getValue() <= 32767);
-
-  // ADDI and SUBI take SIMMs, so we have to make sure the UInt would fit
-  bool cond4 = (Operator < 2)
-    && (Op1Cu = dyn_cast<ConstantUInt>(CI)) 
-    && (Op1Cu->getValue() <= 32767);
+    && (Op1Cs->getValue() <= 65535);
 
   // ANDIo, ORI, and XORI take UIMMs, so they can be larger
-  bool cond5 = (Operator >= 2)
+  bool cond4 = (Operator >= 2)
     && (Op1Cu = dyn_cast<ConstantUInt>(CI))
     && (Op1Cu->getValue() <= 65535);
 
-  if (cond1 || cond2 || cond3 || cond4 || cond5)
+  if (cond1 || cond2 || cond3 || cond4)
     return true;
 
   return false;
@@ -3321,10 +3311,8 @@
                                  GetElementPtrInst *GEPI, bool GEPIsFolded) {
   // If we've already emitted this particular GEP, just return to avoid
   // multiple definitions of the base register.
-  if (GEPIsFolded && (GEPMap[GEPI].base != 0)) {
-    MultiUseGEP++;
+  if (GEPIsFolded && (GEPMap[GEPI].base != 0))
     return;
-  }
   
   Value *Src = GEPI->getOperand(0);
   User::op_iterator IdxBegin = GEPI->op_begin()+1;






More information about the llvm-commits mailing list