Add a few patterns to match allzeros without having to use the fp unit.
[oota-llvm.git] / test / CodeGen / Alpha / add.ll
1 ;test all the shifted and signextending adds and subs with and without consts
2 ;
3 ; RUN: llc < %s -march=alpha -o %t.s
4 ; RUN: grep {   addl} %t.s | count 2
5 ; RUN: grep {   addq} %t.s | count 2
6 ; RUN: grep {   subl} %t.s | count 2
7 ; RUN: grep {   subq} %t.s | count 2
8 ;
9 ; RUN: grep {s4addl} %t.s | count 2
10 ; RUN: grep {s8addl} %t.s | count 2
11 ; RUN: grep {s4addq} %t.s | count 2
12 ; RUN: grep {s8addq} %t.s | count 2
13 ;
14 ; RUN: grep {s4subl} %t.s | count 2
15 ; RUN: grep {s8subl} %t.s | count 2
16 ; RUN: grep {s4subq} %t.s | count 2
17 ; RUN: grep {s8subq} %t.s | count 2
18
19
20 define signext i32 @al(i32 signext %x.s, i32 signext %y.s) {
21 entry:
22         %tmp.3.s = add i32 %y.s, %x.s           ; <i32> [#uses=1]
23         ret i32 %tmp.3.s
24 }
25
26 define signext i32 @ali(i32 signext %x.s)  {
27 entry:
28         %tmp.3.s = add i32 100, %x.s            ; <i32> [#uses=1]
29         ret i32 %tmp.3.s
30 }
31
32 define signext i64 @aq(i64 signext %x.s, i64 signext %y.s)  {
33 entry:
34         %tmp.3.s = add i64 %y.s, %x.s           ; <i64> [#uses=1]
35         ret i64 %tmp.3.s
36 }
37
38 define i64 @aqi(i64 %x.s) {
39 entry:
40         %tmp.3.s = add i64 100, %x.s            ; <i64> [#uses=1]
41         ret i64 %tmp.3.s
42 }
43
44 define signext i32 @sl(i32 signext %x.s, i32 signext %y.s)  {
45 entry:
46         %tmp.3.s = sub i32 %y.s, %x.s           ; <i32> [#uses=1]
47         ret i32 %tmp.3.s
48 }
49
50 define signext i32 @sli(i32 signext %x.s)  {
51 entry:
52         %tmp.3.s = sub i32 %x.s, 100            ; <i32> [#uses=1]
53         ret i32 %tmp.3.s
54 }
55
56 define i64 @sq(i64 %x.s, i64 %y.s) {
57 entry:
58         %tmp.3.s = sub i64 %y.s, %x.s           ; <i64> [#uses=1]
59         ret i64 %tmp.3.s
60 }
61
62 define i64 @sqi(i64 %x.s) {
63 entry:
64         %tmp.3.s = sub i64 %x.s, 100            ; <i64> [#uses=1]
65         ret i64 %tmp.3.s
66 }
67
68 define signext i32 @a4l(i32 signext %x.s, i32 signext %y.s)  {
69 entry:
70         %tmp.1.s = shl i32 %y.s, 2              ; <i32> [#uses=1]
71         %tmp.3.s = add i32 %tmp.1.s, %x.s               ; <i32> [#uses=1]
72         ret i32 %tmp.3.s
73 }
74
75 define signext i32 @a8l(i32 signext %x.s, i32 signext %y.s)  {
76 entry:
77         %tmp.1.s = shl i32 %y.s, 3              ; <i32> [#uses=1]
78         %tmp.3.s = add i32 %tmp.1.s, %x.s               ; <i32> [#uses=1]
79         ret i32 %tmp.3.s
80 }
81
82 define i64 @a4q(i64 %x.s, i64 %y.s) {
83 entry:
84         %tmp.1.s = shl i64 %y.s, 2              ; <i64> [#uses=1]
85         %tmp.3.s = add i64 %tmp.1.s, %x.s               ; <i64> [#uses=1]
86         ret i64 %tmp.3.s
87 }
88
89 define i64 @a8q(i64 %x.s, i64 %y.s) {
90 entry:
91         %tmp.1.s = shl i64 %y.s, 3              ; <i64> [#uses=1]
92         %tmp.3.s = add i64 %tmp.1.s, %x.s               ; <i64> [#uses=1]
93         ret i64 %tmp.3.s
94 }
95
96 define signext i32 @a4li(i32 signext %y.s)  {
97 entry:
98         %tmp.1.s = shl i32 %y.s, 2              ; <i32> [#uses=1]
99         %tmp.3.s = add i32 100, %tmp.1.s                ; <i32> [#uses=1]
100         ret i32 %tmp.3.s
101 }
102
103 define signext i32 @a8li(i32 signext %y.s)  {
104 entry:
105         %tmp.1.s = shl i32 %y.s, 3              ; <i32> [#uses=1]
106         %tmp.3.s = add i32 100, %tmp.1.s                ; <i32> [#uses=1]
107         ret i32 %tmp.3.s
108 }
109
110 define i64 @a4qi(i64 %y.s) {
111 entry:
112         %tmp.1.s = shl i64 %y.s, 2              ; <i64> [#uses=1]
113         %tmp.3.s = add i64 100, %tmp.1.s                ; <i64> [#uses=1]
114         ret i64 %tmp.3.s
115 }
116
117 define i64 @a8qi(i64 %y.s) {
118 entry:
119         %tmp.1.s = shl i64 %y.s, 3              ; <i64> [#uses=1]
120         %tmp.3.s = add i64 100, %tmp.1.s                ; <i64> [#uses=1]
121         ret i64 %tmp.3.s
122 }
123
124 define signext i32 @s4l(i32 signext %x.s, i32 signext %y.s)  {
125 entry:
126         %tmp.1.s = shl i32 %y.s, 2              ; <i32> [#uses=1]
127         %tmp.3.s = sub i32 %tmp.1.s, %x.s               ; <i32> [#uses=1]
128         ret i32 %tmp.3.s
129 }
130
131 define signext i32 @s8l(i32 signext %x.s, i32 signext %y.s)  {
132 entry:
133         %tmp.1.s = shl i32 %y.s, 3              ; <i32> [#uses=1]
134         %tmp.3.s = sub i32 %tmp.1.s, %x.s               ; <i32> [#uses=1]
135         ret i32 %tmp.3.s
136 }
137
138 define i64 @s4q(i64 %x.s, i64 %y.s) {
139 entry:
140         %tmp.1.s = shl i64 %y.s, 2              ; <i64> [#uses=1]
141         %tmp.3.s = sub i64 %tmp.1.s, %x.s               ; <i64> [#uses=1]
142         ret i64 %tmp.3.s
143 }
144
145 define i64 @s8q(i64 %x.s, i64 %y.s) {
146 entry:
147         %tmp.1.s = shl i64 %y.s, 3              ; <i64> [#uses=1]
148         %tmp.3.s = sub i64 %tmp.1.s, %x.s               ; <i64> [#uses=1]
149         ret i64 %tmp.3.s
150 }
151
152 define signext i32 @s4li(i32 signext %y.s)  {
153 entry:
154         %tmp.1.s = shl i32 %y.s, 2              ; <i32> [#uses=1]
155         %tmp.3.s = sub i32 %tmp.1.s, 100                ; <i32> [#uses=1]
156         ret i32 %tmp.3.s
157 }
158
159 define signext i32 @s8li(i32 signext %y.s)  {
160 entry:
161         %tmp.1.s = shl i32 %y.s, 3              ; <i32> [#uses=1]
162         %tmp.3.s = sub i32 %tmp.1.s, 100                ; <i32> [#uses=1]
163         ret i32 %tmp.3.s
164 }
165
166 define i64 @s4qi(i64 %y.s) {
167 entry:
168         %tmp.1.s = shl i64 %y.s, 2              ; <i64> [#uses=1]
169         %tmp.3.s = sub i64 %tmp.1.s, 100                ; <i64> [#uses=1]
170         ret i64 %tmp.3.s
171 }
172
173 define i64 @s8qi(i64 %y.s) {
174 entry:
175         %tmp.1.s = shl i64 %y.s, 3              ; <i64> [#uses=1]
176         %tmp.3.s = sub i64 %tmp.1.s, 100                ; <i64> [#uses=1]
177         ret i64 %tmp.3.s
178 }