[llvm-commits] CVS: llvm/lib/Target/Alpha/AlphaInstrInfo.td AlphaInstrFormats.td AlphaISelPattern.cpp

Andrew Lenharth alenhar2 at cs.uiuc.edu
Thu Oct 20 12:39:36 PDT 2005



Changes in directory llvm/lib/Target/Alpha:

AlphaInstrInfo.td updated: 1.63 -> 1.64
AlphaInstrFormats.td updated: 1.7 -> 1.8
AlphaISelPattern.cpp updated: 1.173 -> 1.174
---
Log message:

added a few 1 operand form stuff.  Seems to break regalloc on alpha.  sigh

---
Diffs of the changes:  (+33 -13)

 AlphaISelPattern.cpp |    6 +++---
 AlphaInstrFormats.td |   16 ++++++++++++++++
 AlphaInstrInfo.td    |   24 ++++++++++++++----------
 3 files changed, 33 insertions(+), 13 deletions(-)


Index: llvm/lib/Target/Alpha/AlphaInstrInfo.td
diff -u llvm/lib/Target/Alpha/AlphaInstrInfo.td:1.63 llvm/lib/Target/Alpha/AlphaInstrInfo.td:1.64
--- llvm/lib/Target/Alpha/AlphaInstrInfo.td:1.63	Thu Oct 20 09:42:48 2005
+++ llvm/lib/Target/Alpha/AlphaInstrInfo.td	Thu Oct 20 14:39:24 2005
@@ -145,10 +145,12 @@
                       [(set GPRC:$RC, (or GPRC:$RA, GPRC:$RB))]>;
 def BISi     : OFormL<0x11, 0x20, "bis $RA,$L,$RC",
                       [(set GPRC:$RC, (or GPRC:$RA, immUExt8:$L))]>;
-def CTLZ     : OForm< 0x1C, 0x32, "CTLZ $RB,$RC", []>;
-//                      [(set GPRC:$RC, (ctlz GPRC:$RB))]>;
-def CTPOP    : OForm< 0x1C, 0x30, "CTPOP $RB,$RC", []>; //Count population
-def CTTZ     : OForm< 0x1C, 0x33, "CTTZ $RB,$RC", []>; //Count trailing zero
+def CTLZ     : OFormT<0x1C, 0x32, "CTLZ $RB,$RC", 
+                      [(set GPRC:$RC, (ctlz GPRC:$RB))]>;
+def CTPOP    : OFormT<0x1C, 0x30, "CTPOP $RB,$RC", 
+                      [(set GPRC:$RC, (ctpop GPRC:$RB))]>;
+def CTTZ     : OFormT<0x1C, 0x33, "CTTZ $RB,$RC", 
+                      [(set GPRC:$RC, (cttz GPRC:$RB))]>;
 def EQV      : OForm< 0x11, 0x48, "eqv $RA,$RB,$RC",
                       [(set GPRC:$RC, (xor GPRC:$RA, (not GPRC:$RB)))]>;
 def EQVi     : OFormL<0x11, 0x48, "eqv $RA,$L,$RC", []>;
@@ -252,10 +254,10 @@
                       [(set GPRC:$RC, (sub8 GPRC:$RA, GPRC:$RB))]>;
 def S8SUBQi  : OFormL<0x10, 0x3B, "s8subq $RA,$L,$RC", 
                       [(set GPRC:$RC, (sub8 GPRC:$RA, immUExt8:$L))]>;
-
-def SEXTB    : OForm< 0x1C, 0x00, "sextb $RB,$RC", []>; //Sign extend byte
-def SEXTW    : OForm< 0x1C, 0x01, "sextw $RB,$RC", []>; //Sign extend word
-
+def SEXTB    : OFormT<0x1C, 0x00, "sextb $RB,$RC", 
+                      [(set GPRC:$RC, (sext_inreg GPRC:$RB, i8))]>;
+def SEXTW    : OFormT<0x1C, 0x01, "sextw $RB,$RC", 
+                      [(set GPRC:$RC, (sext_inreg GPRC:$RB, i16))]>;
 def SL       : OForm< 0x12, 0x39, "sll $RA,$RB,$RC",
                       [(set GPRC:$RC, (shl GPRC:$RA, GPRC:$RB))]>;
 def SLi      : OFormL<0x12, 0x39, "sll $RA,$L,$RC",
@@ -276,8 +278,10 @@
                       [(set GPRC:$RC, (sub GPRC:$RA, GPRC:$RB))]>;
 def SUBQi    : OFormL<0x10, 0x29, "subq $RA,$L,$RC",
                       [(set GPRC:$RC, (sub GPRC:$RA, immUExt8:$L))]>;
-def UMULH    : OForm< 0x13, 0x30, "umulh $RA,$RB,$RC", []>; //Unsigned multiply quadword high
-def UMULHi   : OFormL<0x13, 0x30, "umulh $RA,$L,$RC", []>; //Unsigned multiply quadword high
+def UMULH    : OForm< 0x13, 0x30, "umulh $RA,$RB,$RC",
+                      [(set GPRC:$RC, (mulhu GPRC:$RA, GPRC:$RB))]>;                     
+def UMULHi   : OFormL<0x13, 0x30, "umulh $RA,$L,$RC", 
+                      [(set GPRC:$RC, (mulhu GPRC:$RA, immUExt8:$L))]>;
 def XOR      : OForm< 0x11, 0x40, "xor $RA,$RB,$RC",
                       [(set GPRC:$RC, (xor GPRC:$RA, GPRC:$RB))]>;
 def XORi     : OFormL<0x11, 0x40, "xor $RA,$L,$RC",


Index: llvm/lib/Target/Alpha/AlphaInstrFormats.td
diff -u llvm/lib/Target/Alpha/AlphaInstrFormats.td:1.7 llvm/lib/Target/Alpha/AlphaInstrFormats.td:1.8
--- llvm/lib/Target/Alpha/AlphaInstrFormats.td:1.7	Wed Oct 19 19:28:31 2005
+++ llvm/lib/Target/Alpha/AlphaInstrFormats.td	Thu Oct 20 14:39:24 2005
@@ -110,6 +110,22 @@
   let Inst{4-0} = Rc;
 }
 
+class OFormT<bits<6> opcode, bits<7> fun, string asmstr, list<dag> pattern> 
+        : InstAlpha<opcode, (ops GPRC:$RC, GPRC:$RB), asmstr> {
+  let Pattern = pattern;
+
+  bits<5> Rc;
+  bits<5> Rb;
+  bits<7> Function = fun;
+
+  let Inst{25-21} = 0;
+  let Inst{20-16} = Rb;
+  let Inst{15-13} = 0;
+  let Inst{12} = 0;
+  let Inst{11-5} = Function;
+  let Inst{4-0} = Rc;
+}
+
 class OcmForm<bits<6> opcode, bits<7> fun, dag OL, string asmstr> 
         : InstAlpha<opcode, OL, asmstr> {
   bits<5> Ra;


Index: llvm/lib/Target/Alpha/AlphaISelPattern.cpp
diff -u llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.173 llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.174
--- llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.173	Thu Oct  6 11:54:29 2005
+++ llvm/lib/Target/Alpha/AlphaISelPattern.cpp	Thu Oct 20 14:39:24 2005
@@ -697,7 +697,7 @@
     Opc = opcode == ISD::CTPOP ? Alpha::CTPOP :
     (opcode == ISD::CTTZ ? Alpha::CTTZ : Alpha::CTLZ);
     Tmp1 = SelectExpr(N.getOperand(0));
-    BuildMI(BB, Opc, 1, Result).addReg(Alpha::R31).addReg(Tmp1);
+    BuildMI(BB, Opc, 1, Result).addReg(Tmp1);
     return Result;
 
   case ISD::MULHU:
@@ -1084,10 +1084,10 @@
           break;
         }
       case MVT::i16:
-        BuildMI(BB, Alpha::SEXTW, 1, Result).addReg(Alpha::R31).addReg(Tmp1);
+        BuildMI(BB, Alpha::SEXTW, 1, Result).addReg(Tmp1);
         break;
       case MVT::i8:
-        BuildMI(BB, Alpha::SEXTB, 1, Result).addReg(Alpha::R31).addReg(Tmp1);
+        BuildMI(BB, Alpha::SEXTB, 1, Result).addReg(Tmp1);
         break;
       case MVT::i1:
         Tmp2 = MakeReg(MVT::i64);






More information about the llvm-commits mailing list