blockfreq: Temporarily turn on -debug-only=block-freq
[oota-llvm.git] / test / CodeGen / X86 / atom-bypass-slow-division-64.ll
1 ; RUN: llc -debug-only=block-freq < %s -mcpu=atom -march=x86-64 | FileCheck %s
2 ; REQUIRES: asserts
3
4 target triple = "x86_64-unknown-linux-gnu"
5
6 ; Additional tests for 64-bit divide bypass
7
8 define i64 @Test_get_quotient(i64 %a, i64 %b) nounwind {
9 ; CHECK-LABEL: Test_get_quotient:
10 ; CHECK: movq %rdi, %rax
11 ; CHECK: orq %rsi, %rax
12 ; CHECK-NEXT: testq $-65536, %rax
13 ; CHECK-NEXT: je
14 ; CHECK: idivq
15 ; CHECK: ret
16 ; CHECK: divw
17 ; CHECK: ret
18   %result = sdiv i64 %a, %b
19   ret i64 %result
20 }
21
22 define i64 @Test_get_remainder(i64 %a, i64 %b) nounwind {
23 ; CHECK-LABEL: Test_get_remainder:
24 ; CHECK: movq %rdi, %rax
25 ; CHECK: orq %rsi, %rax
26 ; CHECK-NEXT: testq $-65536, %rax
27 ; CHECK-NEXT: je
28 ; CHECK: idivq
29 ; CHECK: ret
30 ; CHECK: divw
31 ; CHECK: ret
32   %result = srem i64 %a, %b
33   ret i64 %result
34 }
35
36 define i64 @Test_get_quotient_and_remainder(i64 %a, i64 %b) nounwind {
37 ; CHECK-LABEL: Test_get_quotient_and_remainder:
38 ; CHECK: movq %rdi, %rax
39 ; CHECK: orq %rsi, %rax
40 ; CHECK-NEXT: testq $-65536, %rax
41 ; CHECK-NEXT: je
42 ; CHECK: idivq
43 ; CHECK: divw
44 ; CHECK: addq
45 ; CHECK: ret
46 ; CHECK-NOT: idivq
47 ; CHECK-NOT: divw
48   %resultdiv = sdiv i64 %a, %b
49   %resultrem = srem i64 %a, %b
50   %result = add i64 %resultdiv, %resultrem
51   ret i64 %result
52 }