Bypass Slow Divides
[oota-llvm.git] / test / CodeGen / X86 / atom-bypass-slow-division-64.ll
1 ; RUN: llc < %s -mcpu=atom -mtriple=i686-linux -march=x86-64 | FileCheck %s
2
3 ; Additional tests for 64-bit divide bypass
4
5 define i64 @Test_get_quotient(i64 %a, i64 %b) nounwind {
6 ; CHECK: Test_get_quotient:
7 ; CHECK: orq %rsi, %rcx
8 ; CHECK-NEXT: testq $-65536, %rcx
9 ; CHECK-NEXT: je
10 ; CHECK: idivq
11 ; CHECK: ret
12 ; CHECK: divw
13 ; CHECK: ret
14   %result = sdiv i64 %a, %b
15   ret i64 %result
16 }
17
18 define i64 @Test_get_remainder(i64 %a, i64 %b) nounwind {
19 ; CHECK: Test_get_remainder:
20 ; CHECK: orq %rsi, %rcx
21 ; CHECK-NEXT: testq $-65536, %rcx
22 ; CHECK-NEXT: je
23 ; CHECK: idivq
24 ; CHECK: ret
25 ; CHECK: divw
26 ; CHECK: ret
27   %result = srem i64 %a, %b
28   ret i64 %result
29 }
30
31 define i64 @Test_get_quotient_and_remainder(i64 %a, i64 %b) nounwind {
32 ; CHECK: Test_get_quotient_and_remainder:
33 ; CHECK: orq %rsi, %rcx
34 ; CHECK-NEXT: testq $-65536, %rcx
35 ; CHECK-NEXT: je
36 ; CHECK: idivq
37 ; CHECK: divw
38 ; CHECK: addq
39 ; CHECK: ret
40 ; CHECK-NOT: idivq
41 ; CHECK-NOT: divw
42   %resultdiv = sdiv i64 %a, %b
43   %resultrem = srem i64 %a, %b
44   %result = add i64 %resultdiv, %resultrem
45   ret i64 %result
46 }