Mercurial > hg > Members > tobaru > cbc > CbC_llvm
view test/CodeGen/X86/atom-bypass-slow-division.ll @ 33:e4204d083e25
LLVM 3.5
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Dec 2013 14:32:10 +0900 |
parents | 95c75e76d11b |
children |
line wrap: on
line source
; RUN: llc < %s -mcpu=atom -mtriple=i686-linux | FileCheck %s define i32 @Test_get_quotient(i32 %a, i32 %b) nounwind { ; CHECK-LABEL: Test_get_quotient: ; CHECK: orl %ecx, %edx ; CHECK-NEXT: testl $-256, %edx ; CHECK-NEXT: je ; CHECK: idivl ; CHECK: ret ; CHECK: divb ; CHECK: ret %result = sdiv i32 %a, %b ret i32 %result } define i32 @Test_get_remainder(i32 %a, i32 %b) nounwind { ; CHECK-LABEL: Test_get_remainder: ; CHECK: orl %ecx, %edx ; CHECK-NEXT: testl $-256, %edx ; CHECK-NEXT: je ; CHECK: idivl ; CHECK: ret ; CHECK: divb ; CHECK: ret %result = srem i32 %a, %b ret i32 %result } define i32 @Test_get_quotient_and_remainder(i32 %a, i32 %b) nounwind { ; CHECK-LABEL: Test_get_quotient_and_remainder: ; CHECK: orl %ecx, %edx ; CHECK-NEXT: testl $-256, %edx ; CHECK-NEXT: je ; CHECK: idivl ; CHECK: divb ; CHECK: addl ; CHECK: ret ; CHECK-NOT: idivl ; CHECK-NOT: divb %resultdiv = sdiv i32 %a, %b %resultrem = srem i32 %a, %b %result = add i32 %resultdiv, %resultrem ret i32 %result } define i32 @Test_use_div_and_idiv(i32 %a, i32 %b) nounwind { ; CHECK-LABEL: Test_use_div_and_idiv: ; CHECK: idivl ; CHECK: divb ; CHECK: divl ; CHECK: divb ; CHECK: addl ; CHECK: ret %resultidiv = sdiv i32 %a, %b %resultdiv = udiv i32 %a, %b %result = add i32 %resultidiv, %resultdiv ret i32 %result } define i32 @Test_use_div_imm_imm() nounwind { ; CHECK-LABEL: Test_use_div_imm_imm: ; CHECK: movl $64 %resultdiv = sdiv i32 256, 4 ret i32 %resultdiv } define i32 @Test_use_div_reg_imm(i32 %a) nounwind { ; CHECK-LABEL: Test_use_div_reg_imm: ; CHECK-NOT: test ; CHECK-NOT: idiv ; CHECK-NOT: divb %resultdiv = sdiv i32 %a, 33 ret i32 %resultdiv } define i32 @Test_use_rem_reg_imm(i32 %a) nounwind { ; CHECK-LABEL: Test_use_rem_reg_imm: ; CHECK-NOT: test ; CHECK-NOT: idiv ; CHECK-NOT: divb %resultrem = srem i32 %a, 33 ret i32 %resultrem } define i32 @Test_use_divrem_reg_imm(i32 %a) nounwind { ; CHECK-LABEL: Test_use_divrem_reg_imm: ; CHECK-NOT: test ; CHECK-NOT: idiv ; CHECK-NOT: divb %resultdiv = sdiv i32 %a, 33 %resultrem = srem i32 %a, 33 %result = add i32 %resultdiv, %resultrem ret i32 %result } define i32 @Test_use_div_imm_reg(i32 %a) nounwind { ; CHECK-LABEL: Test_use_div_imm_reg: ; CHECK: test ; CHECK: idiv ; CHECK: divb %resultdiv = sdiv i32 4, %a ret i32 %resultdiv } define i32 @Test_use_rem_imm_reg(i32 %a) nounwind { ; CHECK-LABEL: Test_use_rem_imm_reg: ; CHECK: test ; CHECK: idiv ; CHECK: divb %resultdiv = sdiv i32 4, %a ret i32 %resultdiv }