Recommit r310809 with a fix for the spill problem
[llvm-core.git] / test / CodeGen / Lanai / constant_multiply.ll
blob80054dbc0f9dab983f60e026a9d919628bf04f75
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"
8 ; CHECK-LABEL: f6:
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
14   ret i32 %1
17 ; CHECK-LABEL: f7:
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
22   ret i32 %1
25 ; CHECK-LABEL: f8:
26 ; CHECK: sh %r6, 0x3, %rv
27 define i32 @f8(i32 inreg %a) #0 {
28   %1 = shl nsw i32 %a, 3
29   ret i32 %1
32 ; CHECK-LABEL: f9:
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
37   ret i32 %1
40 ; CHECK-LABEL: f10:
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
46   ret i32 %1
49 ; CHECK-LABEL: f1280:
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
55   ret i32 %1
58 ; CHECK-LABEL: fm6:
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
64   ret i32 %1
67 ; CHECK-LABEL: fm7:
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
72   ret i32 %1
75 ; CHECK-LABEL: fm8:
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
80   ret i32 %1
83 ; CHECK-LABEL: fm9:
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
89   ret i32 %1
92 ; CHECK-LABEL: fm10:
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
99   ret i32 %1
102 ; CHECK-LABEL: h1:
103 ; CHECK: __mulsi3
104 define i32 @h1(i32 inreg %a) #0 {
105   %1 = mul i32 %a, -1431655765
106   ret i32 %1