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