xref: /aosp_15_r20/external/llvm/test/CodeGen/Lanai/constant_multiply.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; Test custom lowering for 32-bit integer multiplication.
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; CHECK-LABEL: f6:
9*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x1, %r{{[0-9]+}}
10*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
11*9880d681SAndroid Build Coastguard Worker; CHECK: sub %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
12*9880d681SAndroid Build Coastguard Workerdefine i32 @f6(i32 inreg %a) #0 {
13*9880d681SAndroid Build Coastguard Worker  %1 = mul nsw i32 %a, 6
14*9880d681SAndroid Build Coastguard Worker  ret i32 %1
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7:
18*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
19*9880d681SAndroid Build Coastguard Worker; CHECK: sub %r{{[0-9]+}}, %r6, %rv
20*9880d681SAndroid Build Coastguard Workerdefine i32 @f7(i32 inreg %a) #0 {
21*9880d681SAndroid Build Coastguard Worker  %1 = mul nsw i32 %a, 7
22*9880d681SAndroid Build Coastguard Worker  ret i32 %1
23*9880d681SAndroid Build Coastguard Worker}
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8:
26*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x3, %rv
27*9880d681SAndroid Build Coastguard Workerdefine i32 @f8(i32 inreg %a) #0 {
28*9880d681SAndroid Build Coastguard Worker  %1 = shl nsw i32 %a, 3
29*9880d681SAndroid Build Coastguard Worker  ret i32 %1
30*9880d681SAndroid Build Coastguard Worker}
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9:
33*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
34*9880d681SAndroid Build Coastguard Worker; CHECK: add %r{{[0-9]+}}, %r6, %rv
35*9880d681SAndroid Build Coastguard Workerdefine i32 @f9(i32 inreg %a) #0 {
36*9880d681SAndroid Build Coastguard Worker  %1 = mul nsw i32 %a, 9
37*9880d681SAndroid Build Coastguard Worker  ret i32 %1
38*9880d681SAndroid Build Coastguard Worker}
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10:
41*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x1, %r{{[0-9]+}}
42*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
43*9880d681SAndroid Build Coastguard Worker; CHECK: add %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
44*9880d681SAndroid Build Coastguard Workerdefine i32 @f10(i32 inreg %a) #0 {
45*9880d681SAndroid Build Coastguard Worker  %1 = mul nsw i32 %a, 10
46*9880d681SAndroid Build Coastguard Worker  ret i32 %1
47*9880d681SAndroid Build Coastguard Worker}
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1280:
50*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x8, %r{{[0-9]+}}
51*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0xa, %r{{[0-9]+}}
52*9880d681SAndroid Build Coastguard Worker; CHECK: add %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
53*9880d681SAndroid Build Coastguard Workerdefine i32 @f1280(i32 inreg %a) #0 {
54*9880d681SAndroid Build Coastguard Worker  %1 = mul nsw i32 %a, 1280
55*9880d681SAndroid Build Coastguard Worker  ret i32 %1
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fm6:
59*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
60*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x1, %r{{[0-9]+}}
61*9880d681SAndroid Build Coastguard Worker; CHECK: sub %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
62*9880d681SAndroid Build Coastguard Workerdefine i32 @fm6(i32 inreg %a) #0 {
63*9880d681SAndroid Build Coastguard Worker  %1 = mul nsw i32 %a, -6
64*9880d681SAndroid Build Coastguard Worker  ret i32 %1
65*9880d681SAndroid Build Coastguard Worker}
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fm7:
68*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
69*9880d681SAndroid Build Coastguard Worker; CHECK: sub %r6, %r{{[0-9]+}}, %rv
70*9880d681SAndroid Build Coastguard Workerdefine i32 @fm7(i32 inreg %a) #0 {
71*9880d681SAndroid Build Coastguard Worker  %1 = mul nsw i32 %a, -7
72*9880d681SAndroid Build Coastguard Worker  ret i32 %1
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fm8:
76*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
77*9880d681SAndroid Build Coastguard Worker; CHECK: sub %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
78*9880d681SAndroid Build Coastguard Workerdefine i32 @fm8(i32 inreg %a) #0 {
79*9880d681SAndroid Build Coastguard Worker  %1 = mul nsw i32 %a, -8
80*9880d681SAndroid Build Coastguard Worker  ret i32 %1
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fm9:
84*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
85*9880d681SAndroid Build Coastguard Worker; CHECK: sub %r{{[0-9]+}}, %r6, %r{{[0-9]+}}
86*9880d681SAndroid Build Coastguard Worker; CHECK: sub %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
87*9880d681SAndroid Build Coastguard Workerdefine i32 @fm9(i32 inreg %a) #0 {
88*9880d681SAndroid Build Coastguard Worker  %1 = mul nsw i32 %a, -9
89*9880d681SAndroid Build Coastguard Worker  ret i32 %1
90*9880d681SAndroid Build Coastguard Worker}
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fm10:
93*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
94*9880d681SAndroid Build Coastguard Worker; CHECK: sh %r6, 0x1, %r{{[0-9]+}}
95*9880d681SAndroid Build Coastguard Worker; CHECK: sub %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
96*9880d681SAndroid Build Coastguard Worker; CHECK: sub %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
97*9880d681SAndroid Build Coastguard Workerdefine i32 @fm10(i32 inreg %a) #0 {
98*9880d681SAndroid Build Coastguard Worker  %1 = mul nsw i32 %a, -10
99*9880d681SAndroid Build Coastguard Worker  ret i32 %1
100*9880d681SAndroid Build Coastguard Worker}
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: h1:
103*9880d681SAndroid Build Coastguard Worker; CHECK: __mulsi3
104*9880d681SAndroid Build Coastguard Workerdefine i32 @h1(i32 inreg %a) #0 {
105*9880d681SAndroid Build Coastguard Worker  %1 = mul i32 %a, -1431655765
106*9880d681SAndroid Build Coastguard Worker  ret i32 %1
107*9880d681SAndroid Build Coastguard Worker}
108