[llvm-commits] CVS: llvm/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp

Vikram Adve vadve at cs.uiuc.edu
Tue Jul 29 14:51:01 PDT 2003


Changes in directory llvm/lib/CodeGen/InstrSelection:

InstrSelectionSupport.cpp updated: 1.54 -> 1.55

---
Log message:

All constant-evaluation code now unified into
TargetInstrInfo::ConvertConstantToIntType().


---
Diffs of the changes:

Index: llvm/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp
diff -u llvm/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp:1.54 llvm/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp:1.55
--- llvm/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp:1.54	Wed Jul 23 10:17:51 2003
+++ llvm/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp	Tue Jul 29 14:50:12 2003
@@ -87,43 +87,20 @@
   getImmedValue = 0;
 
   // To use reg or immed, constant needs to be integer, bool, or a NULL pointer
-  Constant *CPV = dyn_cast<Constant>(val);
-  if (CPV == NULL
-      || CPV->isConstantExpr()
-      || (! CPV->getType()->isIntegral() &&
-          ! (isa<PointerType>(CPV->getType()) && CPV->isNullValue())))
+  // TargetInstrInfo::ConvertConstantToIntType() does the right conversions:
+  bool isValidConstant;
+  uint64_t valueToUse =
+    target.getInstrInfo().ConvertConstantToIntType(target, val, val->getType(),
+                                                   isValidConstant);
+  if (! isValidConstant)
     return MachineOperand::MO_VirtualRegister;
 
-  // Now get the constant value and check if it fits in the IMMED field.
-  // Take advantage of the fact that the max unsigned value will rarely
-  // fit into any IMMED field and ignore that case (i.e., cast smaller
-  // unsigned constants to signed).
+  // Now check if the constant value fits in the IMMED field.
   // 
-  int64_t intValue;
-  if (isa<PointerType>(CPV->getType()))
-    intValue = 0;                       // We checked above that it is NULL 
-  else if (ConstantBool* CB = dyn_cast<ConstantBool>(CPV))
-    intValue = CB->getValue();
-  else if (CPV->getType()->isSigned())
-    intValue = cast<ConstantSInt>(CPV)->getValue();
-  else
-    { // get the int value and sign-extend if original was less than 64 bits
-      intValue = cast<ConstantUInt>(CPV)->getValue();
-      switch(CPV->getType()->getPrimitiveID())
-        {
-        case Type::UByteTyID:  intValue = (int64_t) (int8_t) intValue; break;
-        case Type::UShortTyID: intValue = (int64_t) (short)  intValue; break;
-        case Type::UIntTyID:   intValue = (int64_t) (int)    intValue; break;
-        default: break;
-        }
-    }
-
-  return ChooseRegOrImmed(intValue, CPV->getType()->isSigned(),
+  return ChooseRegOrImmed((int64_t) valueToUse, val->getType()->isSigned(),
                           opCode, target, canUseImmed,
                           getMachineRegNum, getImmedValue);
 }
-
-
 
 //---------------------------------------------------------------------------
 // Function: FixConstantOperandsForInstr





More information about the llvm-commits mailing list