[llvm-commits] [llvm] r76005 - in /llvm/trunk: lib/Target/SystemZ/SystemZISelLowering.cpp lib/Target/SystemZ/SystemZInstrInfo.td lib/Target/SystemZ/SystemZOperands.td test/CodeGen/SystemZ/2009-07-05-Shifts.ll

Anton Korobeynikov asl at math.spbu.ru
Thu Jul 16 07:15:25 PDT 2009


Author: asl
Date: Thu Jul 16 09:15:24 2009
New Revision: 76005

URL: http://llvm.org/viewvc/llvm-project?rev=76005&view=rev
Log:
Implement shifts properly (hopefilly - finally!)

Added:
    llvm/trunk/test/CodeGen/SystemZ/2009-07-05-Shifts.ll
Modified:
    llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp
    llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.td
    llvm/trunk/lib/Target/SystemZ/SystemZOperands.td

Modified: llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp?rev=76005&r1=76004&r2=76005&view=diff

==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp Thu Jul 16 09:15:24 2009
@@ -52,7 +52,7 @@
 
   // Set shifts properties
   setShiftAmountFlavor(Extend);
-  setShiftAmountType(MVT::i32);
+  setShiftAmountType(MVT::i64);
 
   // Provide all sorts of operation actions
   setLoadExtAction(ISD::SEXTLOAD, MVT::i1, Promote);

Modified: llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.td?rev=76005&r1=76004&r2=76005&view=diff

==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.td (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.td Thu Jul 16 09:15:24 2009
@@ -627,10 +627,7 @@
                       [(set GR32:$dst, (srl GR32:$src, riaddr32:$amt))]>;
 def SRL64rri : Pseudo<(outs GR64:$dst), (ins GR64:$src, riaddr:$amt),
                       "srlg\t{$dst, $src, $amt}",
-                      [(set GR64:$dst, (srl GR64:$src, (i32 (trunc riaddr:$amt))))]>;
-def SRLA64ri  : Pseudo<(outs GR64:$dst), (ins GR64:$src, i32imm:$amt),
-                      "srlg\t{$dst, $src, $amt}",
-                      [(set GR64:$dst, (srl GR64:$src, (i32 imm:$amt)))]>;
+                      [(set GR64:$dst, (srl GR64:$src, riaddr:$amt))]>;
 
 let isTwoAddress = 1 in
 def SHL32rri : Pseudo<(outs GR32:$dst), (ins GR32:$src, riaddr32:$amt),
@@ -638,10 +635,7 @@
                       [(set GR32:$dst, (shl GR32:$src, riaddr32:$amt))]>;
 def SHL64rri : Pseudo<(outs GR64:$dst), (ins GR64:$src, riaddr:$amt),
                       "sllg\t{$dst, $src, $amt}",
-                      [(set GR64:$dst, (shl GR64:$src, (i32 (trunc riaddr:$amt))))]>;
-def SHL64ri  : Pseudo<(outs GR64:$dst), (ins GR64:$src, i32imm:$amt),
-                      "sllg\t{$dst, $src, $amt}",
-                      [(set GR64:$dst, (shl GR64:$src, (i32 imm:$amt)))]>;
+                      [(set GR64:$dst, (shl GR64:$src, riaddr:$amt))]>;
 
 let Defs = [PSW] in {
 let isTwoAddress = 1 in
@@ -649,13 +643,10 @@
                       "sra\t{$src, $amt}",
                       [(set GR32:$dst, (sra GR32:$src, riaddr32:$amt)),
                        (implicit PSW)]>;
+
 def SRA64rri : Pseudo<(outs GR64:$dst), (ins GR64:$src, riaddr:$amt),
                       "srag\t{$dst, $src, $amt}",
-                      [(set GR64:$dst, (sra GR64:$src, (i32 (trunc riaddr:$amt)))),
-                       (implicit PSW)]>;
-def SRA64ri  : Pseudo<(outs GR64:$dst), (ins GR64:$src, i32imm:$amt),
-                      "srag\t{$dst, $src, $amt}",
-                      [(set GR64:$dst, (sra GR64:$src, (i32 imm:$amt))),
+                      [(set GR64:$dst, (sra GR64:$src, riaddr:$amt)),
                        (implicit PSW)]>;
 } // Defs = [PSW]
 
@@ -664,10 +655,7 @@
                        [(set GR32:$dst, (rotl GR32:$src, riaddr32:$amt))]>;
 def ROTL64rri : Pseudo<(outs GR64:$dst), (ins GR64:$src, riaddr:$amt),
                        "rllg\t{$dst, $src, $amt}",
-                       [(set GR64:$dst, (rotl GR64:$src, (i32 (trunc riaddr:$amt))))]>;
-def ROTL64ri  : Pseudo<(outs GR64:$dst), (ins GR64:$src, i32imm:$amt),
-                       "rllg\t{$dst, $src, $amt}",
-                       [(set GR64:$dst, (rotl GR64:$src, (i32 imm:$amt)))]>;
+                       [(set GR64:$dst, (rotl GR64:$src, riaddr:$amt))]>;
 
 //===----------------------------------------------------------------------===//
 // Test instructions (like AND but do not produce any result)

Modified: llvm/trunk/lib/Target/SystemZ/SystemZOperands.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZOperands.td?rev=76005&r1=76004&r2=76005&view=diff

==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZOperands.td (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZOperands.td Thu Jul 16 09:15:24 2009
@@ -251,10 +251,10 @@
 // Address operands
 
 // riaddr := reg + imm
-def riaddr32 : Operand<i32>,
-               ComplexPattern<i32, 2, "SelectAddrRI12Only", []> {
+def riaddr32 : Operand<i64>,
+               ComplexPattern<i64, 2, "SelectAddrRI12Only", []> {
   let PrintMethod = "printRIAddrOperand";
-  let MIOperandInfo = (ops ADDR32:$base, u12imm:$disp);
+  let MIOperandInfo = (ops ADDR64:$base, u12imm:$disp);
 }
 
 def riaddr12 : Operand<i64>,

Added: llvm/trunk/test/CodeGen/SystemZ/2009-07-05-Shifts.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/SystemZ/2009-07-05-Shifts.ll?rev=76005&view=auto

==============================================================================
--- llvm/trunk/test/CodeGen/SystemZ/2009-07-05-Shifts.ll (added)
+++ llvm/trunk/test/CodeGen/SystemZ/2009-07-05-Shifts.ll Thu Jul 16 09:15:24 2009
@@ -0,0 +1,25 @@
+; RUN: llvm-as < %s | llc
+
+target datalayout = "E-p:64:64:64-i8:8:16-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-a0:16:16"
+target triple = "s390x-linux"
+
+define signext i32 @bit_place_piece(i32 signext %col, i32 signext %player, i64* nocapture %b1, i64* nocapture %b2) nounwind {
+entry:
+	br i1 undef, label %for.body, label %return
+
+for.body:		; preds = %entry
+	%add = add i32 0, %col		; <i32> [#uses=1]
+	%sh_prom = zext i32 %add to i64		; <i64> [#uses=1]
+	%shl = shl i64 1, %sh_prom		; <i64> [#uses=1]
+	br i1 undef, label %if.then13, label %if.else
+
+if.then13:		; preds = %for.body
+	ret i32 0
+
+if.else:		; preds = %for.body
+	%or34 = or i64 undef, %shl		; <i64> [#uses=0]
+	ret i32 0
+
+return:		; preds = %entry
+	ret i32 1
+}





More information about the llvm-commits mailing list