[ARM] Use AEABI helpers for i64 div and rem
[oota-llvm.git] / test / CodeGen / ARM / long.ll
1 ; RUN: llc -mtriple=arm-eabi %s -o - | FileCheck %s
2
3 define i64 @f1() {
4 ; CHECK-LABEL: f1:
5 entry:
6         ret i64 0
7 }
8
9 define i64 @f2() {
10 ; CHECK-LABEL: f2:
11 entry:
12         ret i64 1
13 }
14
15 define i64 @f3() {
16 ; CHECK-LABEL: f3:
17 ; CHECK: mvn r0, #-2147483648
18 entry:
19         ret i64 2147483647
20 }
21
22 define i64 @f4() {
23 ; CHECK-LABEL: f4:
24 ; CHECK: mov r0, #-2147483648
25 entry:
26         ret i64 2147483648
27 }
28
29 define i64 @f5() {
30 ; CHECK-LABEL: f5:
31 ; CHECK: mvn r0, #0
32 ; CHECK: mvn r1, #-2147483648
33 entry:
34         ret i64 9223372036854775807
35 }
36
37 define i64 @f6(i64 %x, i64 %y) {
38 ; CHECK-LABEL: f6:
39 ; CHECK: adds
40 ; CHECK: adc
41 entry:
42         %tmp1 = add i64 %y, 1           ; <i64> [#uses=1]
43         ret i64 %tmp1
44 }
45
46 define void @f7() {
47 ; CHECK-LABEL: f7:
48 entry:
49         %tmp = call i64 @f8( )          ; <i64> [#uses=0]
50         ret void
51 }
52
53 declare i64 @f8()
54
55 define i64 @f9(i64 %a, i64 %b) {
56 ; CHECK-LABEL: f9:
57 ; CHECK: subs r
58 ; CHECK: sbc
59 entry:
60         %tmp = sub i64 %a, %b           ; <i64> [#uses=1]
61         ret i64 %tmp
62 }
63
64 define i64 @f(i32 %a, i32 %b) {
65 ; CHECK-LABEL: f:
66 ; CHECK: smull
67 entry:
68         %tmp = sext i32 %a to i64               ; <i64> [#uses=1]
69         %tmp1 = sext i32 %b to i64              ; <i64> [#uses=1]
70         %tmp2 = mul i64 %tmp1, %tmp             ; <i64> [#uses=1]
71         ret i64 %tmp2
72 }
73
74 define i64 @g(i32 %a, i32 %b) {
75 ; CHECK-LABEL: g:
76 ; CHECK: umull
77 entry:
78         %tmp = zext i32 %a to i64               ; <i64> [#uses=1]
79         %tmp1 = zext i32 %b to i64              ; <i64> [#uses=1]
80         %tmp2 = mul i64 %tmp1, %tmp             ; <i64> [#uses=1]
81         ret i64 %tmp2
82 }
83
84 define i64 @f10() {
85 ; CHECK-LABEL: f10:
86 entry:
87         %a = alloca i64, align 8                ; <i64*> [#uses=1]
88         %retval = load i64, i64* %a          ; <i64> [#uses=1]
89         ret i64 %retval
90 }