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