xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/fast-isel-fold.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=ELF64
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker@a = global i8 1, align 1
4*9880d681SAndroid Build Coastguard Worker@b = global i16 2, align 2
5*9880d681SAndroid Build Coastguard Worker@c = global i32 4, align 4
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine void @t1() nounwind {
8*9880d681SAndroid Build Coastguard Worker; ELF64: t1
9*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* @a, align 1
10*9880d681SAndroid Build Coastguard Worker  call void @foo1(i8 zeroext %1)
11*9880d681SAndroid Build Coastguard Worker; ELF64: lbz
12*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rldicl
13*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rlwinm
14*9880d681SAndroid Build Coastguard Worker  ret void
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerdefine void @t2() nounwind {
18*9880d681SAndroid Build Coastguard Worker; ELF64: t2
19*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* @b, align 2
20*9880d681SAndroid Build Coastguard Worker  call void @foo2(i16 zeroext %1)
21*9880d681SAndroid Build Coastguard Worker; ELF64: lhz
22*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rldicl
23*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rlwinm
24*9880d681SAndroid Build Coastguard Worker  ret void
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerdefine void @t2a() nounwind {
28*9880d681SAndroid Build Coastguard Worker; ELF64: t2a
29*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* @c, align 4
30*9880d681SAndroid Build Coastguard Worker  call void @foo3(i32 zeroext %1)
31*9880d681SAndroid Build Coastguard Worker; ELF64: lwz
32*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rldicl
33*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rlwinm
34*9880d681SAndroid Build Coastguard Worker  ret void
35*9880d681SAndroid Build Coastguard Worker}
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerdeclare void @foo1(i8 zeroext)
38*9880d681SAndroid Build Coastguard Workerdeclare void @foo2(i16 zeroext)
39*9880d681SAndroid Build Coastguard Workerdeclare void @foo3(i32 zeroext)
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdefine i32 @t3() nounwind {
42*9880d681SAndroid Build Coastguard Worker; ELF64: t3
43*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* @a, align 1
44*9880d681SAndroid Build Coastguard Worker  %2 = zext i8 %1 to i32
45*9880d681SAndroid Build Coastguard Worker; ELF64: lbz
46*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rlwinm
47*9880d681SAndroid Build Coastguard Worker  ret i32 %2
48*9880d681SAndroid Build Coastguard Worker}
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Workerdefine i32 @t4() nounwind {
51*9880d681SAndroid Build Coastguard Worker; ELF64: t4
52*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* @b, align 2
53*9880d681SAndroid Build Coastguard Worker  %2 = zext i16 %1 to i32
54*9880d681SAndroid Build Coastguard Worker; ELF64: lhz
55*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rlwinm
56*9880d681SAndroid Build Coastguard Worker  ret i32 %2
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerdefine i32 @t5() nounwind {
60*9880d681SAndroid Build Coastguard Worker; ELF64: t5
61*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* @b, align 2
62*9880d681SAndroid Build Coastguard Worker  %2 = sext i16 %1 to i32
63*9880d681SAndroid Build Coastguard Worker; ELF64: lha
64*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rlwinm
65*9880d681SAndroid Build Coastguard Worker  ret i32 %2
66*9880d681SAndroid Build Coastguard Worker}
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Workerdefine i32 @t6() nounwind {
69*9880d681SAndroid Build Coastguard Worker; ELF64: t6
70*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* @a, align 2
71*9880d681SAndroid Build Coastguard Worker  %2 = sext i8 %1 to i32
72*9880d681SAndroid Build Coastguard Worker; ELF64: lbz
73*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rlwinm
74*9880d681SAndroid Build Coastguard Worker  ret i32 %2
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Workerdefine i64 @t7() nounwind {
78*9880d681SAndroid Build Coastguard Worker; ELF64: t7
79*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* @a, align 1
80*9880d681SAndroid Build Coastguard Worker  %2 = zext i8 %1 to i64
81*9880d681SAndroid Build Coastguard Worker; ELF64: lbz
82*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rldicl
83*9880d681SAndroid Build Coastguard Worker  ret i64 %2
84*9880d681SAndroid Build Coastguard Worker}
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Workerdefine i64 @t8() nounwind {
87*9880d681SAndroid Build Coastguard Worker; ELF64: t8
88*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* @b, align 2
89*9880d681SAndroid Build Coastguard Worker  %2 = zext i16 %1 to i64
90*9880d681SAndroid Build Coastguard Worker; ELF64: lhz
91*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rldicl
92*9880d681SAndroid Build Coastguard Worker  ret i64 %2
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workerdefine i64 @t9() nounwind {
96*9880d681SAndroid Build Coastguard Worker; ELF64: t9
97*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* @b, align 2
98*9880d681SAndroid Build Coastguard Worker  %2 = sext i16 %1 to i64
99*9880d681SAndroid Build Coastguard Worker; ELF64: lha
100*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: extsh
101*9880d681SAndroid Build Coastguard Worker  ret i64 %2
102*9880d681SAndroid Build Coastguard Worker}
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Workerdefine i64 @t10() nounwind {
105*9880d681SAndroid Build Coastguard Worker; ELF64: t10
106*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* @a, align 2
107*9880d681SAndroid Build Coastguard Worker  %2 = sext i8 %1 to i64
108*9880d681SAndroid Build Coastguard Worker; ELF64: lbz
109*9880d681SAndroid Build Coastguard Worker; ELF64: extsb
110*9880d681SAndroid Build Coastguard Worker  ret i64 %2
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Workerdefine i64 @t11() nounwind {
114*9880d681SAndroid Build Coastguard Worker; ELF64: t11
115*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* @c, align 4
116*9880d681SAndroid Build Coastguard Worker  %2 = zext i32 %1 to i64
117*9880d681SAndroid Build Coastguard Worker; ELF64: lwz
118*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: rldicl
119*9880d681SAndroid Build Coastguard Worker  ret i64 %2
120*9880d681SAndroid Build Coastguard Worker}
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Workerdefine i64 @t12() nounwind {
123*9880d681SAndroid Build Coastguard Worker; ELF64: t12
124*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* @c, align 4
125*9880d681SAndroid Build Coastguard Worker  %2 = sext i32 %1 to i64
126*9880d681SAndroid Build Coastguard Worker; ELF64: lwa
127*9880d681SAndroid Build Coastguard Worker; ELF64-NOT: extsw
128*9880d681SAndroid Build Coastguard Worker  ret i64 %2
129*9880d681SAndroid Build Coastguard Worker}
130