Use static inline to do the right thing when built in C99 mode. Of course,
[llvm/stm8.git] / test / CodeGen / PowerPC / rotl-2.ll
blobd32ef59be6c41f23f1217d84f72e5cd3cd1eebe8
1 ; RUN: llc < %s -march=ppc32  | grep rlwinm | count 4
2 ; RUN: llc < %s -march=ppc32  | grep rlwnm | count 2
3 ; RUN: llc < %s -march=ppc32  | not grep or
5 define i32 @rotl32(i32 %A, i8 %Amt) nounwind {
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
15 define i32 @rotr32(i32 %A, i8 %Amt) nounwind {
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
25 define i32 @rotli32(i32 %A) nounwind {
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
32 define i32 @rotri32(i32 %A) nounwind {
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