[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