1; RUN: llc < %s -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
9
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.
13
14define void @bar(i64 %x, i64 %y, i64* %z) nounwind readnone {
15entry:
16	%t0 = add i64 %x, %y
17	%t1 = and i64 %t0, 4294967295
18        store i64 %t1, i64* %z
19	ret void
20}
21define void @easy(i32 %x, i32 %y, i64* %z) nounwind readnone {
22entry:
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
28}
29define void @cola(i64 *%x, i64 %y, i64* %z, i64 %u) nounwind readnone {
30entry:
31        %p = load i64, 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
37}
38define void @yaks(i64 *%x, i64 %y, i64* %z, i64 %u) nounwind readnone {
39entry:
40        %p = load i64, 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
46}
47define void @foo(i64 *%x, i64 *%y, i64* %z) nounwind readnone {
48entry:
49        %a = load i64, i64* %x
50        %b = load i64, i64* %y
51	%t0 = add i64 %a, %b
52	%t1 = and i64 %t0, 4294967295
53        store i64 %t1, i64* %z
54	ret void
55}
56define void @avo(i64 %x, i64* %z, i64 %u) nounwind readnone {
57entry:
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
63}
64define void @phe(i64 %x, i64* %z, i64 %u) nounwind readnone {
65entry:
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
71}
72define void @oze(i64 %y, i64* %z) nounwind readnone {
73entry:
74	%t0 = add i64 %y, 1
75	%t1 = and i64 %t0, 4294967295
76        store i64 %t1, i64* %z
77	ret void
78}
79
80define void @sbar(i64 %x, i64 %y, i64* %z) nounwind readnone {
81entry:
82	%t0 = sub i64 %x, %y
83	%t1 = and i64 %t0, 4294967295
84        store i64 %t1, i64* %z
85	ret void
86}
87define void @seasy(i32 %x, i32 %y, i64* %z) nounwind readnone {
88entry:
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
94}
95define void @scola(i64 *%x, i64 %y, i64* %z, i64 %u) nounwind readnone {
96entry:
97        %p = load i64, 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
103}
104define void @syaks(i64 *%x, i64 %y, i64* %z, i64 %u) nounwind readnone {
105entry:
106        %p = load i64, 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
112}
113define void @sfoo(i64 *%x, i64 *%y, i64* %z) nounwind readnone {
114entry:
115        %a = load i64, i64* %x
116        %b = load i64, i64* %y
117	%t0 = sub i64 %a, %b
118	%t1 = and i64 %t0, 4294967295
119        store i64 %t1, i64* %z
120	ret void
121}
122define void @swya(i64 %y, i64* %z) nounwind readnone {
123entry:
124	%t0 = sub i64 0, %y
125	%t1 = and i64 %t0, 4294967295
126        store i64 %t1, i64* %z
127	ret void
128}
129define void @soze(i64 %y, i64* %z) nounwind readnone {
130entry:
131	%t0 = sub i64 %y, 1
132	%t1 = and i64 %t0, 4294967295
133        store i64 %t1, i64* %z
134	ret void
135}
136