[llvm-commits] [llvm] r75981 - in /llvm/trunk: lib/Target/SystemZ/SystemZInstrInfo.td test/CodeGen/SystemZ/2009-06-02-Rotate.ll

Anton Korobeynikov asl at math.spbu.ru
Thu Jul 16 07:06:49 PDT 2009


Author: asl
Date: Thu Jul 16 09:06:49 2009
New Revision: 75981

URL: http://llvm.org/viewvc/llvm-project?rev=75981&view=rev
Log:
Add rotates

Added:
    llvm/trunk/test/CodeGen/SystemZ/2009-06-02-Rotate.ll
Modified:
    llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.td

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

==============================================================================
--- llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.td (original)
+++ llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.td Thu Jul 16 09:06:49 2009
@@ -587,7 +587,6 @@
                       "sllg\t{$dst, $src, $amt}",
                       [(set GR64:$dst, (shl GR64:$src, (i32 imm:$amt)))]>;
 
-
 let Defs = [PSW] in {
 let isTwoAddress = 1 in
 def SRA32rri : Pseudo<(outs GR32:$dst), (ins GR32:$src, riaddr32:$amt),
@@ -604,6 +603,17 @@
                        (implicit PSW)]>;
 } // Defs = [PSW]
 
+let isTwoAddress = 1 in
+def ROTL32rri : Pseudo<(outs GR32:$dst), (ins GR32:$src, riaddr32:$amt),
+                       "rll\t{$src, $amt}",
+                       [(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)))]>;
+
 //===----------------------------------------------------------------------===//
 // Test instructions (like AND but do not produce any result
 

Added: llvm/trunk/test/CodeGen/SystemZ/2009-06-02-Rotate.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/SystemZ/2009-06-02-Rotate.ll?rev=75981&view=auto

==============================================================================
--- llvm/trunk/test/CodeGen/SystemZ/2009-06-02-Rotate.ll (added)
+++ llvm/trunk/test/CodeGen/SystemZ/2009-06-02-Rotate.ll Thu Jul 16 09:06:49 2009
@@ -0,0 +1,13 @@
+; RUN: llvm-as < %s | llc -march=systemz | grep rll
+
+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 i32 @rotl(i32 %x, i32 %y, i32 %z) nounwind readnone {
+entry:
+	%shl = shl i32 %x, 0		; <i32> [#uses=1]
+	%sub = sub i32 32, 0		; <i32> [#uses=1]
+	%shr = lshr i32 %x, %sub		; <i32> [#uses=1]
+	%or = or i32 %shr, %shl		; <i32> [#uses=1]
+	ret i32 %or
+}





More information about the llvm-commits mailing list