xref: /aosp_15_r20/external/llvm/test/CodeGen/Lanai/i32.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -asm-verbose=false | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; Test that basic 32-bit integer operations assemble as expected.
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-p:32:32-i64:64-a:0:32-n32-S64"
6*9880d681SAndroid Build Coastguard Workertarget triple = "lanai"
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
9*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ctpop.i32(i32) #1
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
12*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.ctlz.i32(i32, i1) #1
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind readnone
15*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.cttz.i32(i32, i1) #1
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add32:
18*9880d681SAndroid Build Coastguard Worker; CHECK: add  %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
19*9880d681SAndroid Build Coastguard Workerdefine i32 @add32(i32 %x, i32 %y) {
20*9880d681SAndroid Build Coastguard Worker  %a = add i32 %x, %y
21*9880d681SAndroid Build Coastguard Worker  ret i32 %a
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sub32:
25*9880d681SAndroid Build Coastguard Worker; CHECK: sub  %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
26*9880d681SAndroid Build Coastguard Workerdefine i32 @sub32(i32 %x, i32 %y) {
27*9880d681SAndroid Build Coastguard Worker  %a = sub i32 %x, %y
28*9880d681SAndroid Build Coastguard Worker  ret i32 %a
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: mul32:
32*9880d681SAndroid Build Coastguard Worker; CHECK: bt __mulsi3
33*9880d681SAndroid Build Coastguard Workerdefine i32 @mul32(i32 %x, i32 %y) {
34*9880d681SAndroid Build Coastguard Worker  %a = mul i32 %x, %y
35*9880d681SAndroid Build Coastguard Worker  ret i32 %a
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sdiv32:
39*9880d681SAndroid Build Coastguard Worker; CHECK: bt __divsi3
40*9880d681SAndroid Build Coastguard Workerdefine i32 @sdiv32(i32 %x, i32 %y) {
41*9880d681SAndroid Build Coastguard Worker  %a = sdiv i32 %x, %y
42*9880d681SAndroid Build Coastguard Worker  ret i32 %a
43*9880d681SAndroid Build Coastguard Worker}
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: udiv32:
46*9880d681SAndroid Build Coastguard Worker; CHECK: bt __udivsi3
47*9880d681SAndroid Build Coastguard Workerdefine i32 @udiv32(i32 %x, i32 %y) {
48*9880d681SAndroid Build Coastguard Worker  %a = udiv i32 %x, %y
49*9880d681SAndroid Build Coastguard Worker  ret i32 %a
50*9880d681SAndroid Build Coastguard Worker}
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: srem32:
53*9880d681SAndroid Build Coastguard Worker; CHECK: bt __modsi3
54*9880d681SAndroid Build Coastguard Workerdefine i32 @srem32(i32 %x, i32 %y) {
55*9880d681SAndroid Build Coastguard Worker  %a = srem i32 %x, %y
56*9880d681SAndroid Build Coastguard Worker  ret i32 %a
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: urem32:
60*9880d681SAndroid Build Coastguard Worker; CHECK: bt __umodsi3
61*9880d681SAndroid Build Coastguard Workerdefine i32 @urem32(i32 %x, i32 %y) {
62*9880d681SAndroid Build Coastguard Worker  %a = urem i32 %x, %y
63*9880d681SAndroid Build Coastguard Worker  ret i32 %a
64*9880d681SAndroid Build Coastguard Worker}
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and32:
67*9880d681SAndroid Build Coastguard Worker; CHECK: and %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
68*9880d681SAndroid Build Coastguard Workerdefine i32 @and32(i32 %x, i32 %y) {
69*9880d681SAndroid Build Coastguard Worker  %a = and i32 %x, %y
70*9880d681SAndroid Build Coastguard Worker  ret i32 %a
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or32:
74*9880d681SAndroid Build Coastguard Worker; CHECK: or %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
75*9880d681SAndroid Build Coastguard Workerdefine i32 @or32(i32 %x, i32 %y) {
76*9880d681SAndroid Build Coastguard Worker  %a = or i32 %x, %y
77*9880d681SAndroid Build Coastguard Worker  ret i32 %a
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor32:
81*9880d681SAndroid Build Coastguard Worker; CHECK: xor %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
82*9880d681SAndroid Build Coastguard Workerdefine i32 @xor32(i32 %x, i32 %y) {
83*9880d681SAndroid Build Coastguard Worker  %a = xor i32 %x, %y
84*9880d681SAndroid Build Coastguard Worker  ret i32 %a
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl32:
88*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
89*9880d681SAndroid Build Coastguard Workerdefine i32 @shl32(i32 %x, i32 %y) {
90*9880d681SAndroid Build Coastguard Worker  %a = shl i32 %x, %y
91*9880d681SAndroid Build Coastguard Worker  ret i32 %a
92*9880d681SAndroid Build Coastguard Worker}
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shr32:
95*9880d681SAndroid Build Coastguard Worker; CHECK: sub %r0, %r{{[0-9]+}}, %r{{[0-9]+}}
96*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
97*9880d681SAndroid Build Coastguard Workerdefine i32 @shr32(i32 %x, i32 %y) {
98*9880d681SAndroid Build Coastguard Worker  %a = lshr i32 %x, %y
99*9880d681SAndroid Build Coastguard Worker  ret i32 %a
100*9880d681SAndroid Build Coastguard Worker}
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sar32
103*9880d681SAndroid Build Coastguard Worker; CHECK: sub %r0, %r{{[0-9]+}}, %r{{[0-9]+}}
104*9880d681SAndroid Build Coastguard Worker; CHECK: sha %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
105*9880d681SAndroid Build Coastguard Workerdefine i32 @sar32(i32 %x, i32 %y) {
106*9880d681SAndroid Build Coastguard Worker  %a = ashr i32 %x, %y
107*9880d681SAndroid Build Coastguard Worker  ret i32 %a
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clz32:
111*9880d681SAndroid Build Coastguard Worker; CHECK: leadz %r{{[0-9]+}}, %rv
112*9880d681SAndroid Build Coastguard Workerdefine i32 @clz32(i32 %x) {
113*9880d681SAndroid Build Coastguard Worker  %a = call i32 @llvm.ctlz.i32(i32 %x, i1 false)
114*9880d681SAndroid Build Coastguard Worker  ret i32 %a
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: clz32_zero_undef:
118*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: sub.f
119*9880d681SAndroid Build Coastguard Worker; CHECK: leadz %r{{[0-9]+}}, %rv
120*9880d681SAndroid Build Coastguard Workerdefine i32 @clz32_zero_undef(i32 %x) {
121*9880d681SAndroid Build Coastguard Worker  %a = call i32 @llvm.ctlz.i32(i32 %x, i1 true)
122*9880d681SAndroid Build Coastguard Worker  ret i32 %a
123*9880d681SAndroid Build Coastguard Worker}
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ctz32:
126*9880d681SAndroid Build Coastguard Worker; CHECK: trailz %r{{[0-9]+}}, %rv
127*9880d681SAndroid Build Coastguard Workerdefine i32 @ctz32(i32 %x) {
128*9880d681SAndroid Build Coastguard Worker  %a = call i32 @llvm.cttz.i32(i32 %x, i1 false)
129*9880d681SAndroid Build Coastguard Worker  ret i32 %a
130*9880d681SAndroid Build Coastguard Worker}
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ctz32_zero_undef:
133*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: sub.f
134*9880d681SAndroid Build Coastguard Worker; CHECK: trailz  %r{{[0-9]+}}, %rv
135*9880d681SAndroid Build Coastguard Workerdefine i32 @ctz32_zero_undef(i32 %x) {
136*9880d681SAndroid Build Coastguard Worker  %a = call i32 @llvm.cttz.i32(i32 %x, i1 true)
137*9880d681SAndroid Build Coastguard Worker  ret i32 %a
138*9880d681SAndroid Build Coastguard Worker}
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: popcnt32:
141*9880d681SAndroid Build Coastguard Worker; CHECK: popc %r{{[0-9]+}}, %rv
142*9880d681SAndroid Build Coastguard Workerdefine i32 @popcnt32(i32 %x) {
143*9880d681SAndroid Build Coastguard Worker  %a = call i32 @llvm.ctpop.i32(i32 %x)
144*9880d681SAndroid Build Coastguard Worker  ret i32 %a
145*9880d681SAndroid Build Coastguard Worker}
146