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

Chris Lattner sabre at nondot.org
Mon May 14 18:31:24 PDT 2007



Changes in directory llvm/lib/Target/PowerPC:

PPCISelLowering.cpp updated: 1.269 -> 1.270
---
Log message:

fix some subtle inline asm selection issues


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

 PPCISelLowering.cpp |   26 +++++++++++++++++---------
 1 files changed, 17 insertions(+), 9 deletions(-)


Index: llvm/lib/Target/PowerPC/PPCISelLowering.cpp
diff -u llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.269 llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.270
--- llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.269	Mon Apr  9 17:10:05 2007
+++ llvm/lib/Target/PowerPC/PPCISelLowering.cpp	Mon May 14 20:31:05 2007
@@ -3326,31 +3326,39 @@
   case 'N':
   case 'O':
   case 'P': {
-    if (!isa<ConstantSDNode>(Op)) return SDOperand(0,0);// Must be an immediate.
-    unsigned Value = cast<ConstantSDNode>(Op)->getValue();
+    ConstantSDNode *CST = dyn_cast<ConstantSDNode>(Op);
+    if (!CST) return SDOperand(0, 0); // Must be an immediate to match.
+    unsigned Value = CST->getValue();
     switch (Letter) {
     default: assert(0 && "Unknown constraint letter!");
     case 'I':  // "I" is a signed 16-bit constant.
-      if ((short)Value == (int)Value) return Op;
+      if ((short)Value == (int)Value)
+        return DAG.getTargetConstant(Value, Op.getValueType());
       break;
     case 'J':  // "J" is a constant with only the high-order 16 bits nonzero.
     case 'L':  // "L" is a signed 16-bit constant shifted left 16 bits.
-      if ((short)Value == 0) return Op;
+      if ((short)Value == 0)
+        return DAG.getTargetConstant(Value, Op.getValueType());
       break;
     case 'K':  // "K" is a constant with only the low-order 16 bits nonzero.
-      if ((Value >> 16) == 0) return Op;
+      if ((Value >> 16) == 0)
+        return DAG.getTargetConstant(Value, Op.getValueType());
       break;
     case 'M':  // "M" is a constant that is greater than 31.
-      if (Value > 31) return Op;
+      if (Value > 31)
+        return DAG.getTargetConstant(Value, Op.getValueType());
       break;
     case 'N':  // "N" is a positive constant that is an exact power of two.
-      if ((int)Value > 0 && isPowerOf2_32(Value)) return Op;
+      if ((int)Value > 0 && isPowerOf2_32(Value))
+        return DAG.getTargetConstant(Value, Op.getValueType());
       break;
     case 'O':  // "O" is the constant zero. 
-      if (Value == 0) return Op;
+      if (Value == 0)
+        return DAG.getTargetConstant(Value, Op.getValueType());
       break;
     case 'P':  // "P" is a constant whose negation is a signed 16-bit constant.
-      if ((short)-Value == (int)-Value) return Op;
+      if ((short)-Value == (int)-Value)
+        return DAG.getTargetConstant(Value, Op.getValueType());
       break;
     }
     break;






More information about the llvm-commits mailing list