Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / VE / Scalar / right_shift.ll
blob7d1670d28c3cd0a6d57e64b1c358a96b550c0a25
1 ; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s
3 define signext i8 @func1(i8 signext %0, i8 signext %1) {
4 ; CHECK-LABEL: func1:
5 ; CHECK:       # %bb.0:
6 ; CHECK-NEXT:    sra.w.sx %s0, %s0, %s1
7 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
8 ; CHECK-NEXT:    b.l.t (, %s10)
9   %3 = sext i8 %0 to i32
10   %4 = sext i8 %1 to i32
11   %5 = ashr i32 %3, %4
12   %6 = trunc i32 %5 to i8
13   ret i8 %6
16 define signext i16 @func2(i16 signext %0, i16 signext %1) {
17 ; CHECK-LABEL: func2:
18 ; CHECK:       # %bb.0:
19 ; CHECK-NEXT:    sra.w.sx %s0, %s0, %s1
20 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
21 ; CHECK-NEXT:    b.l.t (, %s10)
22   %3 = sext i16 %0 to i32
23   %4 = sext i16 %1 to i32
24   %5 = ashr i32 %3, %4
25   %6 = trunc i32 %5 to i16
26   ret i16 %6
29 define i32 @func3(i32 %0, i32 %1) {
30 ; CHECK-LABEL: func3:
31 ; CHECK:       # %bb.0:
32 ; CHECK-NEXT:    sra.w.sx %s0, %s0, %s1
33 ; CHECK-NEXT:    b.l.t (, %s10)
34   %3 = ashr i32 %0, %1
35   ret i32 %3
38 define i64 @func4(i64 %0, i64 %1) {
39 ; CHECK-LABEL: func4:
40 ; CHECK:       # %bb.0:
41 ; CHECK-NEXT:    sra.l %s0, %s0, %s1
42 ; CHECK-NEXT:    b.l.t (, %s10)
43   %3 = ashr i64 %0, %1
44   ret i64 %3
47 define zeroext i8 @func7(i8 zeroext %0, i8 zeroext %1) {
48 ; CHECK-LABEL: func7:
49 ; CHECK:       # %bb.0:
50 ; CHECK-NEXT:    and %s0, %s0, (32)0
51 ; CHECK-NEXT:    srl %s0, %s0, %s1
52 ; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1
53 ; CHECK-NEXT:    b.l.t (, %s10)
54   %3 = zext i8 %0 to i32
55   %4 = zext i8 %1 to i32
56   %5 = lshr i32 %3, %4
57   %6 = trunc i32 %5 to i8
58   ret i8 %6
61 define zeroext i16 @func8(i16 zeroext %0, i16 zeroext %1) {
62 ; CHECK-LABEL: func8:
63 ; CHECK:       # %bb.0:
64 ; CHECK-NEXT:    and %s0, %s0, (32)0
65 ; CHECK-NEXT:    srl %s0, %s0, %s1
66 ; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1
67 ; CHECK-NEXT:    b.l.t (, %s10)
68   %3 = zext i16 %0 to i32
69   %4 = zext i16 %1 to i32
70   %5 = lshr i32 %3, %4
71   %6 = trunc i32 %5 to i16
72   ret i16 %6
75 define i32 @func9(i32 %0, i32 %1) {
76 ; CHECK-LABEL: func9:
77 ; CHECK:       # %bb.0:
78 ; CHECK-NEXT:    and %s0, %s0, (32)0
79 ; CHECK-NEXT:    srl %s0, %s0, %s1
80 ; CHECK-NEXT:    b.l.t (, %s10)
81   %3 = lshr i32 %0, %1
82   ret i32 %3
85 define i64 @func10(i64 %0, i64 %1) {
86 ; CHECK-LABEL: func10:
87 ; CHECK:       # %bb.0:
88 ; CHECK-NEXT:    srl %s0, %s0, %s1
89 ; CHECK-NEXT:    b.l.t (, %s10)
90   %3 = lshr i64 %0, %1
91   ret i64 %3
94 define signext i8 @func12(i8 signext %0) {
95 ; CHECK-LABEL: func12:
96 ; CHECK:       # %bb.0:
97 ; CHECK-NEXT:    sra.w.sx %s0, %s0, 5
98 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
99 ; CHECK-NEXT:    b.l.t (, %s10)
100   %2 = ashr i8 %0, 5
101   ret i8 %2
104 define signext i16 @func13(i16 signext %0) {
105 ; CHECK-LABEL: func13:
106 ; CHECK:       # %bb.0:
107 ; CHECK-NEXT:    sra.w.sx %s0, %s0, 5
108 ; CHECK-NEXT:    adds.w.sx %s0, %s0, (0)1
109 ; CHECK-NEXT:    b.l.t (, %s10)
110   %2 = ashr i16 %0, 5
111   ret i16 %2
114 define i32 @func14(i32 %0) {
115 ; CHECK-LABEL: func14:
116 ; CHECK:       # %bb.0:
117 ; CHECK-NEXT:    sra.w.sx %s0, %s0, 5
118 ; CHECK-NEXT:    b.l.t (, %s10)
119   %2 = ashr i32 %0, 5
120   ret i32 %2
123 define i64 @func15(i64 %0) {
124 ; CHECK-LABEL: func15:
125 ; CHECK:       # %bb.0:
126 ; CHECK-NEXT:    sra.l %s0, %s0, 5
127 ; CHECK-NEXT:    b.l.t (, %s10)
128   %2 = ashr i64 %0, 5
129   ret i64 %2
132 define zeroext i8 @func17(i8 zeroext %0) {
133 ; CHECK-LABEL: func17:
134 ; CHECK:       # %bb.0:
135 ; CHECK-NEXT:    and %s0, %s0, (32)0
136 ; CHECK-NEXT:    srl %s0, %s0, 5
137 ; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1
138 ; CHECK-NEXT:    b.l.t (, %s10)
139   %2 = lshr i8 %0, 5
140   ret i8 %2
143 define zeroext i16 @func18(i16 zeroext %0) {
144 ; CHECK-LABEL: func18:
145 ; CHECK:       # %bb.0:
146 ; CHECK-NEXT:    and %s0, %s0, (32)0
147 ; CHECK-NEXT:    srl %s0, %s0, 5
148 ; CHECK-NEXT:    adds.w.zx %s0, %s0, (0)1
149 ; CHECK-NEXT:    b.l.t (, %s10)
150   %2 = lshr i16 %0, 5
151   ret i16 %2
154 define i32 @func19(i32 %0) {
155 ; CHECK-LABEL: func19:
156 ; CHECK:       # %bb.0:
157 ; CHECK-NEXT:    and %s0, %s0, (32)0
158 ; CHECK-NEXT:    srl %s0, %s0, 5
159 ; CHECK-NEXT:    b.l.t (, %s10)
160   %2 = lshr i32 %0, 5
161   ret i32 %2
164 define i64 @func20(i64 %0) {
165 ; CHECK-LABEL: func20:
166 ; CHECK:       # %bb.0:
167 ; CHECK-NEXT:    srl %s0, %s0, 5
168 ; CHECK-NEXT:    b.l.t (, %s10)
169   %2 = lshr i64 %0, 5
170   ret i64 %2