[FastISel][AArch64] Use the correct register class to make the MI verifier happy.
[oota-llvm.git] / test / CodeGen / AArch64 / fast-isel-shift.ll
1 ; RUN: llc -fast-isel -fast-isel-abort -mtriple=arm64-apple-darwin -verify-machineinstrs < %s | FileCheck %s
2
3 ; CHECK-LABEL: lsl_i8
4 ; CHECK: ubfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
5 define zeroext i8 @lsl_i8(i8 %a) {
6   %1 = shl i8 %a, 4
7   ret i8 %1
8 }
9
10 ; CHECK-LABEL: lsl_i16
11 ; CHECK: ubfiz {{w[0-9]*}}, {{w[0-9]*}}, #8, #8
12 define zeroext i16 @lsl_i16(i16 %a) {
13   %1 = shl i16 %a, 8
14   ret i16 %1
15 }
16
17 ; CHECK-LABEL: lsl_i32
18 ; CHECK: lsl {{w[0-9]*}}, {{w[0-9]*}}, #16
19 define zeroext i32 @lsl_i32(i32 %a) {
20   %1 = shl i32 %a, 16
21   ret i32 %1
22 }
23
24 ; FIXME: This shouldn't use the variable shift version.
25 ; CHECK-LABEL: lsl_i64
26 ; CHECK: lsl {{x[0-9]*}}, {{x[0-9]*}}, {{x[0-9]*}}
27 define i64 @lsl_i64(i64 %a) {
28   %1 = shl i64 %a, 32
29   ret i64 %1
30 }
31
32 ; CHECK-LABEL: lsr_i8
33 ; CHECK: ubfx {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
34 define zeroext i8 @lsr_i8(i8 %a) {
35   %1 = lshr i8 %a, 4
36   ret i8 %1
37 }
38
39 ; CHECK-LABEL: lsr_i16
40 ; CHECK: ubfx {{w[0-9]*}}, {{w[0-9]*}}, #8, #8
41 define zeroext i16 @lsr_i16(i16 %a) {
42   %1 = lshr i16 %a, 8
43   ret i16 %1
44 }
45
46 ; CHECK-LABEL: lsr_i32
47 ; CHECK: lsr {{w[0-9]*}}, {{w[0-9]*}}, #16
48 define zeroext i32 @lsr_i32(i32 %a) {
49   %1 = lshr i32 %a, 16
50   ret i32 %1
51 }
52
53 ; FIXME: This shouldn't use the variable shift version.
54 ; CHECK-LABEL: lsr_i64
55 ; CHECK: lsr {{x[0-9]*}}, {{x[0-9]*}}, {{x[0-9]*}}
56 define i64 @lsr_i64(i64 %a) {
57   %1 = lshr i64 %a, 32
58   ret i64 %1
59 }
60
61 ; CHECK-LABEL: asr_i8
62 ; CHECK: sbfx {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
63 define zeroext i8 @asr_i8(i8 %a) {
64   %1 = ashr i8 %a, 4
65   ret i8 %1
66 }
67
68 ; CHECK-LABEL: asr_i16
69 ; CHECK: sbfx {{w[0-9]*}}, {{w[0-9]*}}, #8, #8
70 define zeroext i16 @asr_i16(i16 %a) {
71   %1 = ashr i16 %a, 8
72   ret i16 %1
73 }
74
75 ; CHECK-LABEL: asr_i32
76 ; CHECK: asr {{w[0-9]*}}, {{w[0-9]*}}, #16
77 define zeroext i32 @asr_i32(i32 %a) {
78   %1 = ashr i32 %a, 16
79   ret i32 %1
80 }
81
82 ; FIXME: This shouldn't use the variable shift version.
83 ; CHECK-LABEL: asr_i64
84 ; CHECK: asr {{x[0-9]*}}, {{x[0-9]*}}, {{x[0-9]*}}
85 define i64 @asr_i64(i64 %a) {
86   %1 = ashr i64 %a, 32
87   ret i64 %1
88 }
89
90 ; CHECK-LABEL: shift_test1
91 ; CHECK:       ubfiz {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
92 ; CHECK-NEXT:  sbfx  {{w[0-9]*}}, {{w[0-9]*}}, #4, #4
93 define i32 @shift_test1(i8 %a) {
94   %1 = shl i8 %a, 4
95   %2 = ashr i8 %1, 4
96   %3 = sext i8 %2 to i32
97   ret i32 %3
98 }
99