[WinEH] Add some test cases I forgot to add to previous commits
[oota-llvm.git] / test / CodeGen / AArch64 / mul_pow2.ll
1 ; RUN: llc < %s -march=aarch64 | FileCheck %s
2
3 ; Convert mul x, pow2 to shift.
4 ; Convert mul x, pow2 +/- 1 to shift + add/sub.
5
6 define i32 @test2(i32 %x) {
7 ; CHECK-LABEL: test2
8 ; CHECK: lsl w0, w0, #1
9
10   %mul = shl nsw i32 %x, 1
11   ret i32 %mul
12 }
13
14 define i32 @test3(i32 %x) {
15 ; CHECK-LABEL: test3
16 ; CHECK: add w0, w0, w0, lsl #1
17
18   %mul = mul nsw i32 %x, 3
19   ret i32 %mul
20 }
21
22 define i32 @test4(i32 %x) {
23 ; CHECK-LABEL: test4
24 ; CHECK: lsl w0, w0, #2
25
26   %mul = shl nsw i32 %x, 2
27   ret i32 %mul
28 }
29
30 define i32 @test5(i32 %x) {
31 ; CHECK-LABEL: test5
32 ; CHECK: add w0, w0, w0, lsl #2
33
34
35   %mul = mul nsw i32 %x, 5
36   ret i32 %mul
37 }
38
39 define i32 @test7(i32 %x) {
40 ; CHECK-LABEL: test7
41 ; CHECK: lsl {{w[0-9]+}}, w0, #3
42 ; CHECK: sub w0, {{w[0-9]+}}, w0
43
44   %mul = mul nsw i32 %x, 7
45   ret i32 %mul
46 }
47
48 define i32 @test8(i32 %x) {
49 ; CHECK-LABEL: test8
50 ; CHECK: lsl w0, w0, #3
51
52   %mul = shl nsw i32 %x, 3
53   ret i32 %mul
54 }
55
56 define i32 @test9(i32 %x) {
57 ; CHECK-LABEL: test9
58 ; CHECK: add w0, w0, w0, lsl #3
59
60   %mul = mul nsw i32 %x, 9
61   ret i32 %mul
62 }
63
64 ; Convert mul x, -pow2 to shift.
65 ; Convert mul x, -(pow2 +/- 1) to shift + add/sub.
66
67 define i32 @ntest2(i32 %x) {
68 ; CHECK-LABEL: ntest2
69 ; CHECK: neg w0, w0, lsl #1
70
71   %mul = mul nsw i32 %x, -2
72   ret i32 %mul
73 }
74
75 define i32 @ntest3(i32 %x) {
76 ; CHECK-LABEL: ntest3
77 ; CHECK: sub w0, w0, w0, lsl #2
78
79   %mul = mul nsw i32 %x, -3
80   ret i32 %mul
81 }
82
83 define i32 @ntest4(i32 %x) {
84 ; CHECK-LABEL: ntest4
85 ; CHECK:neg w0, w0, lsl #2
86
87   %mul = mul nsw i32 %x, -4
88   ret i32 %mul
89 }
90
91 define i32 @ntest5(i32 %x) {
92 ; CHECK-LABEL: ntest5
93 ; CHECK: add {{w[0-9]+}}, w0, w0, lsl #2
94 ; CHECK: neg w0, {{w[0-9]+}}
95   %mul = mul nsw i32 %x, -5
96   ret i32 %mul
97 }
98
99 define i32 @ntest7(i32 %x) {
100 ; CHECK-LABEL: ntest7
101 ; CHECK: sub w0, w0, w0, lsl #3
102
103   %mul = mul nsw i32 %x, -7
104   ret i32 %mul
105 }
106
107 define i32 @ntest8(i32 %x) {
108 ; CHECK-LABEL: ntest8
109 ; CHECK: neg w0, w0, lsl #3
110
111   %mul = mul nsw i32 %x, -8
112   ret i32 %mul
113 }
114
115 define i32 @ntest9(i32 %x) {
116 ; CHECK-LABEL: ntest9
117 ; CHECK: add {{w[0-9]+}}, w0, w0, lsl #3
118 ; CHECK: neg w0, {{w[0-9]+}}
119
120   %mul = mul nsw i32 %x, -9
121   ret i32 %mul
122 }