Shrink Thumb2 movcc instructions.
[llvm/avr.git] / test / CodeGen / X86 / subreg-to-reg-4.ll
blobbb6af3988c95c42abb3b19ae34ac2baa724eb342
1 ; RUN: llvm-as < %s | llc -march=x86-64 > %t
2 ; RUN: not grep leaq %t
3 ; RUN: not grep incq %t
4 ; RUN: not grep decq %t
5 ; RUN: not grep negq %t
6 ; RUN: not grep addq %t
7 ; RUN: not grep subq %t
8 ; RUN: not grep {movl   %} %t
10 ; Utilize implicit zero-extension on x86-64 to eliminate explicit
11 ; zero-extensions. Shrink 64-bit adds to 32-bit when the high
12 ; 32-bits will be zeroed.
14 define void @bar(i64 %x, i64 %y, i64* %z) nounwind readnone {
15 entry:
16         %t0 = add i64 %x, %y
17         %t1 = and i64 %t0, 4294967295
18         store i64 %t1, i64* %z
19         ret void
21 define void @easy(i32 %x, i32 %y, i64* %z) nounwind readnone {
22 entry:
23         %t0 = add i32 %x, %y
24         %tn = zext i32 %t0 to i64
25         %t1 = and i64 %tn, 4294967295
26         store i64 %t1, i64* %z
27         ret void
29 define void @cola(i64 *%x, i64 %y, i64* %z, i64 %u) nounwind readnone {
30 entry:
31         %p = load i64* %x
32         %t0 = add i64 %p, %y
33         %t1 = and i64 %t0, 4294967295
34         %t2 = xor i64 %t1, %u
35         store i64 %t2, i64* %z
36         ret void
38 define void @yaks(i64 *%x, i64 %y, i64* %z, i64 %u) nounwind readnone {
39 entry:
40         %p = load i64* %x
41         %t0 = add i64 %p, %y
42         %t1 = xor i64 %t0, %u
43         %t2 = and i64 %t1, 4294967295
44         store i64 %t2, i64* %z
45         ret void
47 define void @foo(i64 *%x, i64 *%y, i64* %z) nounwind readnone {
48 entry:
49         %a = load i64* %x
50         %b = load i64* %y
51         %t0 = add i64 %a, %b
52         %t1 = and i64 %t0, 4294967295
53         store i64 %t1, i64* %z
54         ret void
56 define void @avo(i64 %x, i64* %z, i64 %u) nounwind readnone {
57 entry:
58         %t0 = add i64 %x, 734847
59         %t1 = and i64 %t0, 4294967295
60         %t2 = xor i64 %t1, %u
61         store i64 %t2, i64* %z
62         ret void
64 define void @phe(i64 %x, i64* %z, i64 %u) nounwind readnone {
65 entry:
66         %t0 = add i64 %x, 734847
67         %t1 = xor i64 %t0, %u
68         %t2 = and i64 %t1, 4294967295
69         store i64 %t2, i64* %z
70         ret void
72 define void @oze(i64 %y, i64* %z) nounwind readnone {
73 entry:
74         %t0 = add i64 %y, 1
75         %t1 = and i64 %t0, 4294967295
76         store i64 %t1, i64* %z
77         ret void
80 define void @sbar(i64 %x, i64 %y, i64* %z) nounwind readnone {
81 entry:
82         %t0 = sub i64 %x, %y
83         %t1 = and i64 %t0, 4294967295
84         store i64 %t1, i64* %z
85         ret void
87 define void @seasy(i32 %x, i32 %y, i64* %z) nounwind readnone {
88 entry:
89         %t0 = sub i32 %x, %y
90         %tn = zext i32 %t0 to i64
91         %t1 = and i64 %tn, 4294967295
92         store i64 %t1, i64* %z
93         ret void
95 define void @scola(i64 *%x, i64 %y, i64* %z, i64 %u) nounwind readnone {
96 entry:
97         %p = load i64* %x
98         %t0 = sub i64 %p, %y
99         %t1 = and i64 %t0, 4294967295
100         %t2 = xor i64 %t1, %u
101         store i64 %t2, i64* %z
102         ret void
104 define void @syaks(i64 *%x, i64 %y, i64* %z, i64 %u) nounwind readnone {
105 entry:
106         %p = load i64* %x
107         %t0 = sub i64 %p, %y
108         %t1 = xor i64 %t0, %u
109         %t2 = and i64 %t1, 4294967295
110         store i64 %t2, i64* %z
111         ret void
113 define void @sfoo(i64 *%x, i64 *%y, i64* %z) nounwind readnone {
114 entry:
115         %a = load i64* %x
116         %b = load i64* %y
117         %t0 = sub i64 %a, %b
118         %t1 = and i64 %t0, 4294967295
119         store i64 %t1, i64* %z
120         ret void
122 define void @swya(i64 %y, i64* %z) nounwind readnone {
123 entry:
124         %t0 = sub i64 0, %y
125         %t1 = and i64 %t0, 4294967295
126         store i64 %t1, i64* %z
127         ret void
129 define void @soze(i64 %y, i64* %z) nounwind readnone {
130 entry:
131         %t0 = sub i64 %y, 1
132         %t1 = and i64 %t0, 4294967295
133         store i64 %t1, i64* %z
134         ret void