0512357584f772ec3b00f3df220d5296e11df5b1
[oota-llvm.git] / test / CodeGen / PowerPC / rotl-2.ll
1 ; RUN: llvm-as < %s | llc -march=ppc32 | grep rlwinm | wc -l | grep 4 &&
2 ; RUN: llvm-as < %s | llc -march=ppc32 | grep rlwnm | wc -l | grep 2 &&
3 ; RUN: llvm-as < %s | llc -march=ppc32 | not grep or
4
5 define i32 @rotl32(i32 %A, i8 %Amt) {
6         %shift.upgrd.1 = zext i8 %Amt to i32            ; <i32> [#uses=1]
7         %B = shl i32 %A, %shift.upgrd.1         ; <i32> [#uses=1]
8         %Amt2 = sub i8 32, %Amt         ; <i8> [#uses=1]
9         %shift.upgrd.2 = zext i8 %Amt2 to i32           ; <i32> [#uses=1]
10         %C = lshr i32 %A, %shift.upgrd.2                ; <i32> [#uses=1]
11         %D = or i32 %B, %C              ; <i32> [#uses=1]
12         ret i32 %D
13 }
14
15 define i32 @rotr32(i32 %A, i8 %Amt) {
16         %shift.upgrd.3 = zext i8 %Amt to i32            ; <i32> [#uses=1]
17         %B = lshr i32 %A, %shift.upgrd.3                ; <i32> [#uses=1]
18         %Amt2 = sub i8 32, %Amt         ; <i8> [#uses=1]
19         %shift.upgrd.4 = zext i8 %Amt2 to i32           ; <i32> [#uses=1]
20         %C = shl i32 %A, %shift.upgrd.4         ; <i32> [#uses=1]
21         %D = or i32 %B, %C              ; <i32> [#uses=1]
22         ret i32 %D
23 }
24
25 define i32 @rotli32(i32 %A) {
26         %B = shl i32 %A, 5              ; <i32> [#uses=1]
27         %C = lshr i32 %A, 27            ; <i32> [#uses=1]
28         %D = or i32 %B, %C              ; <i32> [#uses=1]
29         ret i32 %D
30 }
31
32 define i32 @rotri32(i32 %A) {
33         %B = lshr i32 %A, 5             ; <i32> [#uses=1]
34         %C = shl i32 %A, 27             ; <i32> [#uses=1]
35         %D = or i32 %B, %C              ; <i32> [#uses=1]
36         ret i32 %D
37 }
38