Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / ARM / sxt_rot.ll
blobe9649c7a7fd9a17339fcc08dcd5996ca66383081
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=arm-eabi -mattr=+v6 %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-V6
3 ; RUN: llc -mtriple=arm-eabi -mattr=+v7 %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-V7
5 define i32 @test0(i8 %A) {
6 ; CHECK-LABEL: test0:
7 ; CHECK:       @ %bb.0:
8 ; CHECK-NEXT:    sxtb r0, r0
9 ; CHECK-NEXT:    bx lr
10   %B = sext i8 %A to i32
11   ret i32 %B
14 define signext i8 @test1(i32 %A) {
15 ; CHECK-V6-LABEL: test1:
16 ; CHECK-V6:       @ %bb.0:
17 ; CHECK-V6-NEXT:    lsr r0, r0, #8
18 ; CHECK-V6-NEXT:    sxtb r0, r0
19 ; CHECK-V6-NEXT:    bx lr
21 ; CHECK-V7-LABEL: test1:
22 ; CHECK-V7:       @ %bb.0:
23 ; CHECK-V7-NEXT:    sbfx r0, r0, #8, #8
24 ; CHECK-V7-NEXT:    bx lr
25 ; CHECk-V7: sbfx r0, r0, #8, #8
26   %B = lshr i32 %A, 8
27   %C = shl i32 %A, 24
28   %D = or i32 %B, %C
29   %E = trunc i32 %D to i8
30   ret i8 %E
33 define signext i32 @test2(i32 %A, i32 %X) {
34 ; CHECK-LABEL: test2:
35 ; CHECK:       @ %bb.0:
36 ; CHECK-NEXT:    sxtab r0, r1, r0, ror #8
37 ; CHECK-NEXT:    bx lr
38   %B = lshr i32 %A, 8
39   %C = shl i32 %A, 24
40   %D = or i32 %B, %C
41   %E = trunc i32 %D to i8
42   %F = sext i8 %E to i32
43   %G = add i32 %F, %X
44   ret i32 %G
47 define signext i32 @test3(i32 %A, i32 %X) {
48 ; CHECK-LABEL: test3:
49 ; CHECK:       @ %bb.0:
50 ; CHECK-NEXT:    sxtab r0, r1, r0, ror #16
51 ; CHECK-NEXT:    bx lr
52   %B = lshr i32 %A, 16
53   %C = shl i32 %A, 16
54   %D = or i32 %B, %C
55   %E = trunc i32 %D to i8
56   %F = sext i8 %E to i32
57   %G = add i32 %F, %X
58   ret i32 %G
61 define signext i32 @test4(i32 %A, i32 %X) {
62 ; CHECK-LABEL: test4:
63 ; CHECK:       @ %bb.0:
64 ; CHECK-NEXT:    sxtah r0, r1, r0, ror #8
65 ; CHECK-NEXT:    bx lr
66   %B = lshr i32 %A, 8
67   %C = shl i32 %A, 24
68   %D = or i32 %B, %C
69   %E = trunc i32 %D to i16
70   %F = sext i16 %E to i32
71   %G = add i32 %F, %X
72   ret i32 %G
75 define signext i32 @test5(i32 %A, i32 %X) {
76 ; CHECK-LABEL: test5:
77 ; CHECK:       @ %bb.0:
78 ; CHECK-NEXT:    sxtah r0, r1, r0, ror #24
79 ; CHECK-NEXT:    bx lr
80   %B = lshr i32 %A, 24
81   %C = shl i32 %A, 8
82   %D = or i32 %B, %C
83   %E = trunc i32 %D to i16
84   %F = sext i16 %E to i32
85   %G = add i32 %F, %X
86   ret i32 %G
89 define i32 @test6(i8 %A, i32 %X) {
90 ; CHECK-LABEL: test6:
91 ; CHECK:       @ %bb.0:
92 ; CHECK-NEXT:    sxtab r0, r1, r0
93 ; CHECK-NEXT:    bx lr
94   %sext = sext i8 %A to i32
95   %add = add i32 %X, %sext
96   ret i32 %add
99 define i32 @test7(i32 %A, i32 %X) {
100 ; CHECK-LABEL: test7:
101 ; CHECK:       @ %bb.0:
102 ; CHECK-NEXT:    sxtab r0, r1, r0
103 ; CHECK-NEXT:    bx lr
104   %shl = shl i32 %A, 24
105   %shr = ashr i32 %shl, 24
106   %add = add i32 %X, %shr
107   ret i32 %add
110 define i32 @test8(i16 %A, i32 %X) {
111 ; CHECK-LABEL: test8:
112 ; CHECK:       @ %bb.0:
113 ; CHECK-NEXT:    sxtah r0, r1, r0
114 ; CHECK-NEXT:    bx lr
115   %sext = sext i16 %A to i32
116   %add = add i32 %X, %sext
117   ret i32 %add
120 define i32 @test9(i32 %A, i32 %X) {
121 ; CHECK-LABEL: test9:
122 ; CHECK:       @ %bb.0:
123 ; CHECK-NEXT:    sxtah r0, r1, r0
124 ; CHECK-NEXT:    bx lr
125   %shl = shl i32 %A, 16
126   %shr = ashr i32 %shl, 16
127   %add = add i32 %X, %shr
128   ret i32 %add