blob: 576fb83dc91a49e99c6f654c57c9c4a4bd651d6b [file] [log] [blame]
Andrew Lenhartha54f6b12006-10-31 19:50:55 +00001;test all the shifted and signextending adds and subs with and without consts
Reid Spencer22333612007-01-03 04:20:23 +00002;
3; RUN: llvm-as < %s | llc -march=alpha -o %t.s -f &&
4; RUN: grep ' addl' %t.s | wc -l | grep 2 &&
5; RUN: grep ' addq' %t.s | wc -l | grep 2 &&
6; RUN: grep ' subl' %t.s | wc -l | grep 2 &&
7; RUN: grep ' subq' %t.s | wc -l | grep 1 &&
8;
9; RUN: grep 'lda $0,-100($16)' %t.s | wc -l | grep 1 &&
10; RUN: grep 's4addl' %t.s | wc -l | grep 2 &&
11; RUN: grep 's8addl' %t.s | wc -l | grep 2 &&
12; RUN: grep 's4addq' %t.s | wc -l | grep 2 &&
13; RUN: grep 's8addq' %t.s | wc -l | grep 2 &&
14;
15; RUN: grep 's4subl' %t.s | wc -l | grep 2 &&
16; RUN: grep 's8subl' %t.s | wc -l | grep 2 &&
17; RUN: grep 's4subq' %t.s | wc -l | grep 2 &&
18; RUN: grep 's8subq' %t.s | wc -l | grep 2
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000019
20implementation ; Functions:
21
Reid Spencer22333612007-01-03 04:20:23 +000022define i32 @sext %al(i32 @sext %x.s, i32 @sext %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000023entry:
Reid Spencer22333612007-01-03 04:20:23 +000024 %tmp.3.s = add i32 %y.s, %x.s ; <i32> [#uses=1]
25 ret i32 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000026}
27
Reid Spencer22333612007-01-03 04:20:23 +000028define i32 @sext %ali(i32 @sext %x.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000029entry:
Reid Spencer22333612007-01-03 04:20:23 +000030 %tmp.3.s = add i32 100, %x.s ; <i32> [#uses=1]
31 ret i32 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000032}
33
Reid Spencer22333612007-01-03 04:20:23 +000034define i64 @sext %aq(i64 @sext %x.s, i64 @sext %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000035entry:
Reid Spencer22333612007-01-03 04:20:23 +000036 %tmp.3.s = add i64 %y.s, %x.s ; <i64> [#uses=1]
37 ret i64 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000038}
39
Reid Spencer22333612007-01-03 04:20:23 +000040define i64 %aqi(i64 %x.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000041entry:
Reid Spencer22333612007-01-03 04:20:23 +000042 %tmp.3.s = add i64 100, %x.s ; <i64> [#uses=1]
43 ret i64 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000044}
45
Reid Spencer22333612007-01-03 04:20:23 +000046define i32 @sext %sl(i32 @sext %x.s, i32 @sext %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000047entry:
Reid Spencer22333612007-01-03 04:20:23 +000048 %tmp.3.s = sub i32 %y.s, %x.s ; <i32> [#uses=1]
49 ret i32 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000050}
51
Reid Spencer22333612007-01-03 04:20:23 +000052define i32 @sext %sli(i32 @sext %x.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000053entry:
Reid Spencer22333612007-01-03 04:20:23 +000054 %tmp.3.s = sub i32 %x.s, 100 ; <i32> [#uses=1]
55 ret i32 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000056}
57
Reid Spencer22333612007-01-03 04:20:23 +000058define i64 %sq(i64 %x.s, i64 %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000059entry:
Reid Spencer22333612007-01-03 04:20:23 +000060 %tmp.3.s = sub i64 %y.s, %x.s ; <i64> [#uses=1]
61 ret i64 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000062}
63
Reid Spencer22333612007-01-03 04:20:23 +000064define i64 %sqi(i64 %x.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000065entry:
Reid Spencer22333612007-01-03 04:20:23 +000066 %tmp.3.s = sub i64 %x.s, 100 ; <i64> [#uses=1]
67 ret i64 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000068}
69
Reid Spencer22333612007-01-03 04:20:23 +000070define i32 @sext %a4l(i32 @sext %x.s, i32 @sext %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000071entry:
Reid Spencer22333612007-01-03 04:20:23 +000072 %tmp.1.s = shl i32 %y.s, i8 2 ; <i32> [#uses=1]
73 %tmp.3.s = add i32 %tmp.1.s, %x.s ; <i32> [#uses=1]
74 ret i32 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000075}
76
Reid Spencer22333612007-01-03 04:20:23 +000077define i32 @sext %a8l(i32 @sext %x.s, i32 @sext %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000078entry:
Reid Spencer22333612007-01-03 04:20:23 +000079 %tmp.1.s = shl i32 %y.s, i8 3 ; <i32> [#uses=1]
80 %tmp.3.s = add i32 %tmp.1.s, %x.s ; <i32> [#uses=1]
81 ret i32 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000082}
83
Reid Spencer22333612007-01-03 04:20:23 +000084define i64 %a4q(i64 %x.s, i64 %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000085entry:
Reid Spencer22333612007-01-03 04:20:23 +000086 %tmp.1.s = shl i64 %y.s, i8 2 ; <i64> [#uses=1]
87 %tmp.3.s = add i64 %tmp.1.s, %x.s ; <i64> [#uses=1]
88 ret i64 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000089}
90
Reid Spencer22333612007-01-03 04:20:23 +000091define i64 %a8q(i64 %x.s, i64 %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000092entry:
Reid Spencer22333612007-01-03 04:20:23 +000093 %tmp.1.s = shl i64 %y.s, i8 3 ; <i64> [#uses=1]
94 %tmp.3.s = add i64 %tmp.1.s, %x.s ; <i64> [#uses=1]
95 ret i64 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000096}
97
Reid Spencer22333612007-01-03 04:20:23 +000098define i32 @sext %a4li(i32 @sext %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +000099entry:
Reid Spencer22333612007-01-03 04:20:23 +0000100 %tmp.1.s = shl i32 %y.s, i8 2 ; <i32> [#uses=1]
101 %tmp.3.s = add i32 100, %tmp.1.s ; <i32> [#uses=1]
102 ret i32 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000103}
104
Reid Spencer22333612007-01-03 04:20:23 +0000105define i32 @sext %a8li(i32 @sext %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000106entry:
Reid Spencer22333612007-01-03 04:20:23 +0000107 %tmp.1.s = shl i32 %y.s, i8 3 ; <i32> [#uses=1]
108 %tmp.3.s = add i32 100, %tmp.1.s ; <i32> [#uses=1]
109 ret i32 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000110}
111
Reid Spencer22333612007-01-03 04:20:23 +0000112define i64 %a4qi(i64 %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000113entry:
Reid Spencer22333612007-01-03 04:20:23 +0000114 %tmp.1.s = shl i64 %y.s, i8 2 ; <i64> [#uses=1]
115 %tmp.3.s = add i64 100, %tmp.1.s ; <i64> [#uses=1]
116 ret i64 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000117}
118
Reid Spencer22333612007-01-03 04:20:23 +0000119define i64 %a8qi(i64 %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000120entry:
Reid Spencer22333612007-01-03 04:20:23 +0000121 %tmp.1.s = shl i64 %y.s, i8 3 ; <i64> [#uses=1]
122 %tmp.3.s = add i64 100, %tmp.1.s ; <i64> [#uses=1]
123 ret i64 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000124}
125
Reid Spencer22333612007-01-03 04:20:23 +0000126define i32 @sext %s4l(i32 @sext %x.s, i32 @sext %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000127entry:
Reid Spencer22333612007-01-03 04:20:23 +0000128 %tmp.1.s = shl i32 %y.s, i8 2 ; <i32> [#uses=1]
129 %tmp.3.s = sub i32 %tmp.1.s, %x.s ; <i32> [#uses=1]
130 ret i32 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000131}
132
Reid Spencer22333612007-01-03 04:20:23 +0000133define i32 @sext %s8l(i32 @sext %x.s, i32 @sext %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000134entry:
Reid Spencer22333612007-01-03 04:20:23 +0000135 %tmp.1.s = shl i32 %y.s, i8 3 ; <i32> [#uses=1]
136 %tmp.3.s = sub i32 %tmp.1.s, %x.s ; <i32> [#uses=1]
137 ret i32 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000138}
139
Reid Spencer22333612007-01-03 04:20:23 +0000140define i64 %s4q(i64 %x.s, i64 %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000141entry:
Reid Spencer22333612007-01-03 04:20:23 +0000142 %tmp.1.s = shl i64 %y.s, i8 2 ; <i64> [#uses=1]
143 %tmp.3.s = sub i64 %tmp.1.s, %x.s ; <i64> [#uses=1]
144 ret i64 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000145}
146
Reid Spencer22333612007-01-03 04:20:23 +0000147define i64 %s8q(i64 %x.s, i64 %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000148entry:
Reid Spencer22333612007-01-03 04:20:23 +0000149 %tmp.1.s = shl i64 %y.s, i8 3 ; <i64> [#uses=1]
150 %tmp.3.s = sub i64 %tmp.1.s, %x.s ; <i64> [#uses=1]
151 ret i64 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000152}
153
Reid Spencer22333612007-01-03 04:20:23 +0000154define i32 @sext %s4li(i32 @sext %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000155entry:
Reid Spencer22333612007-01-03 04:20:23 +0000156 %tmp.1.s = shl i32 %y.s, i8 2 ; <i32> [#uses=1]
157 %tmp.3.s = sub i32 %tmp.1.s, 100 ; <i32> [#uses=1]
158 ret i32 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000159}
160
Reid Spencer22333612007-01-03 04:20:23 +0000161define i32 @sext %s8li(i32 @sext %y.s) {
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000162entry:
Reid Spencer22333612007-01-03 04:20:23 +0000163 %tmp.1.s = shl i32 %y.s, i8 3 ; <i32> [#uses=1]
164 %tmp.3.s = sub i32 %tmp.1.s, 100 ; <i32> [#uses=1]
165 ret i32 %tmp.3.s
Andrew Lenhartha54f6b12006-10-31 19:50:55 +0000166}
167
Reid Spencer22333612007-01-03 04:20:23 +0000168define i64 %s4qi(i64 %y.s) {
169entry:
170 %tmp.1.s = shl i64 %y.s, i8 2 ; <i64> [#uses=1]
171 %tmp.3.s = sub i64 %tmp.1.s, 100 ; <i64> [#uses=1]
172 ret i64 %tmp.3.s
173}
174
175define i64 %s8qi(i64 %y.s) {
176entry:
177 %tmp.1.s = shl i64 %y.s, i8 3 ; <i64> [#uses=1]
178 %tmp.3.s = sub i64 %tmp.1.s, 100 ; <i64> [#uses=1]
179 ret i64 %tmp.3.s
180}