xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/rm-zext.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-i64:64-n32:64"
3*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-unknown-linux-gnu"
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
6*9880d681SAndroid Build Coastguard Workerdefine signext i32 @foo(i32 signext %a) #0 {
7*9880d681SAndroid Build Coastguard Workerentry:
8*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i32 %a, %a
9*9880d681SAndroid Build Coastguard Worker  %shr2 = lshr i32 %mul, 5
10*9880d681SAndroid Build Coastguard Worker  ret i32 %shr2
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @foo
13*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: rldicl 3, {{[0-9]+}}, 0, 32
14*9880d681SAndroid Build Coastguard Worker; CHECK: blr
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @test6(i32 zeroext %x) #0 {
18*9880d681SAndroid Build Coastguard Workerentry:
19*9880d681SAndroid Build Coastguard Worker  %and = lshr i32 %x, 16
20*9880d681SAndroid Build Coastguard Worker  %shr = and i32 %and, 255
21*9880d681SAndroid Build Coastguard Worker  %and1 = shl i32 %x, 16
22*9880d681SAndroid Build Coastguard Worker  %shl = and i32 %and1, 16711680
23*9880d681SAndroid Build Coastguard Worker  %or = or i32 %shr, %shl
24*9880d681SAndroid Build Coastguard Worker  ret i32 %or
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test6
27*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: rldicl 3, {{[0-9]+}}, 0, 32
28*9880d681SAndroid Build Coastguard Worker; CHECK: blr
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @min(i32 zeroext %a, i32 zeroext %b) #0 {
32*9880d681SAndroid Build Coastguard Workerentry:
33*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ule i32 %a, %b
34*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %a, i32 %b
35*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @min
38*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: rldicl 3, {{[0-9]+}}, 0, 32
39*9880d681SAndroid Build Coastguard Worker; CHECK: blr
40*9880d681SAndroid Build Coastguard Worker}
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
43*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.bswap.i32(i32) #0
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readonly
46*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @bs32(i32* nocapture readonly %x) #1 {
47*9880d681SAndroid Build Coastguard Workerentry:
48*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %x, align 4
49*9880d681SAndroid Build Coastguard Worker  %1 = tail call i32 @llvm.bswap.i32(i32 %0)
50*9880d681SAndroid Build Coastguard Worker  ret i32 %1
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @bs32
53*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: rldicl 3, {{[0-9]+}}, 0, 32
54*9880d681SAndroid Build Coastguard Worker; CHECK: blr
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readonly
58*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @bs16(i16* nocapture readonly %x) #1 {
59*9880d681SAndroid Build Coastguard Workerentry:
60*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* %x, align 2
61*9880d681SAndroid Build Coastguard Worker  %1 = tail call i16 @llvm.bswap.i16(i16 %0)
62*9880d681SAndroid Build Coastguard Worker  ret i16 %1
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @bs16
65*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: rldicl 3, {{[0-9]+}}, 0, 32
66*9880d681SAndroid Build Coastguard Worker; CHECK: blr
67*9880d681SAndroid Build Coastguard Worker}
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
70*9880d681SAndroid Build Coastguard Workerdeclare i16 @llvm.bswap.i16(i16) #0
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
73*9880d681SAndroid Build Coastguard Workerdefine zeroext i32 @ctlz32(i32 zeroext %x) #0 {
74*9880d681SAndroid Build Coastguard Workerentry:
75*9880d681SAndroid Build Coastguard Worker  %0 = tail call i32 @llvm.ctlz.i32(i32 %x, i1 false)
76*9880d681SAndroid Build Coastguard Worker  ret i32 %0
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ctlz32
79*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: rldicl 3, {{[0-9]+}}, 0, 32
80*9880d681SAndroid Build Coastguard Worker; CHECK: blr
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
84*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ctlz.i32(i32, i1) #0
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone }
88*9880d681SAndroid Build Coastguard Workerattributes #1 = { nounwind readonly }
89*9880d681SAndroid Build Coastguard Worker
90