• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc < %s -mcpu=atom -mtriple=i686-linux -march=x86-64 | FileCheck %s
2
3; Additional tests for 64-bit divide bypass
4
5define i64 @Test_get_quotient(i64 %a, i64 %b) nounwind {
6; CHECK-LABEL: Test_get_quotient:
7; CHECK: movq %rdi, %rax
8; CHECK: orq %rsi, %rax
9; CHECK-NEXT: testq $-65536, %rax
10; CHECK-NEXT: je
11; CHECK: idivq
12; CHECK: ret
13; CHECK: divw
14; CHECK: ret
15  %result = sdiv i64 %a, %b
16  ret i64 %result
17}
18
19define i64 @Test_get_remainder(i64 %a, i64 %b) nounwind {
20; CHECK-LABEL: Test_get_remainder:
21; CHECK: movq %rdi, %rax
22; CHECK: orq %rsi, %rax
23; CHECK-NEXT: testq $-65536, %rax
24; CHECK-NEXT: je
25; CHECK: idivq
26; CHECK: ret
27; CHECK: divw
28; CHECK: ret
29  %result = srem i64 %a, %b
30  ret i64 %result
31}
32
33define i64 @Test_get_quotient_and_remainder(i64 %a, i64 %b) nounwind {
34; CHECK-LABEL: Test_get_quotient_and_remainder:
35; CHECK: movq %rdi, %rax
36; CHECK: orq %rsi, %rax
37; CHECK-NEXT: testq $-65536, %rax
38; CHECK-NEXT: je
39; CHECK: idivq
40; CHECK: divw
41; CHECK: addq
42; CHECK: ret
43; CHECK-NOT: idivq
44; CHECK-NOT: divw
45  %resultdiv = sdiv i64 %a, %b
46  %resultrem = srem i64 %a, %b
47  %result = add i64 %resultdiv, %resultrem
48  ret i64 %result
49}
50