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