1 ; RUN: llc < %s | FileCheck %s
3 ; Test custom lowering for 32-bit integer multiplication.
5 target datalayout = "E-m:e-p:32:32-i64:64-a:0:32-n32-S64"
6 target triple = "lanai"
9 ; CHECK: sh %r6, 0x1, %r{{[0-9]+}}
10 ; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
11 ; CHECK: sub %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
12 define i32 @f6(i32 inreg %a) #0 {
13 %1 = mul nsw i32 %a, 6
18 ; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
19 ; CHECK: sub %r{{[0-9]+}}, %r6, %rv
20 define i32 @f7(i32 inreg %a) #0 {
21 %1 = mul nsw i32 %a, 7
26 ; CHECK: sh %r6, 0x3, %rv
27 define i32 @f8(i32 inreg %a) #0 {
28 %1 = shl nsw i32 %a, 3
33 ; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
34 ; CHECK: add %r{{[0-9]+}}, %r6, %rv
35 define i32 @f9(i32 inreg %a) #0 {
36 %1 = mul nsw i32 %a, 9
41 ; CHECK: sh %r6, 0x1, %r{{[0-9]+}}
42 ; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
43 ; CHECK: add %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
44 define i32 @f10(i32 inreg %a) #0 {
45 %1 = mul nsw i32 %a, 10
50 ; CHECK: sh %r6, 0x8, %r{{[0-9]+}}
51 ; CHECK: sh %r6, 0xa, %r{{[0-9]+}}
52 ; CHECK: add %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
53 define i32 @f1280(i32 inreg %a) #0 {
54 %1 = mul nsw i32 %a, 1280
59 ; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
60 ; CHECK: sh %r6, 0x1, %r{{[0-9]+}}
61 ; CHECK: sub %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
62 define i32 @fm6(i32 inreg %a) #0 {
63 %1 = mul nsw i32 %a, -6
68 ; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
69 ; CHECK: sub %r6, %r{{[0-9]+}}, %rv
70 define i32 @fm7(i32 inreg %a) #0 {
71 %1 = mul nsw i32 %a, -7
76 ; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
77 ; CHECK: sub %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
78 define i32 @fm8(i32 inreg %a) #0 {
79 %1 = mul nsw i32 %a, -8
84 ; CHECK: sub %r0, %r6, %r{{[0-9]+}}
85 ; CHECK: sh %r6, 0x3, %r9
86 ; CHECK: sub %r{{[0-9]+}}, %r9, %rv
87 define i32 @fm9(i32 inreg %a) #0 {
88 %1 = mul nsw i32 %a, -9
93 ; CHECK: sh %r6, 0x1, %r{{[0-9]+}}
94 ; CHECK: sub %r{{[0-9]+}}, %r{{[0-9]+}}, %r{{[0-9]+}}
95 ; CHECK: sh %r6, 0x3, %r{{[0-9]+}}
96 ; CHECK: sub %r{{[0-9]+}}, %r{{[0-9]+}}, %rv
97 define i32 @fm10(i32 inreg %a) #0 {
98 %1 = mul nsw i32 %a, -10
104 define i32 @h1(i32 inreg %a) #0 {
105 %1 = mul i32 %a, -1431655765