1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=atom -mtriple=i686-linux | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine i32 @Test_get_quotient(i32 %a, i32 %b) nounwind { 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Test_get_quotient: 5*9880d681SAndroid Build Coastguard Worker; CHECK: orl %ecx, %edx 6*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: testl $-256, %edx 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: je 8*9880d681SAndroid Build Coastguard Worker; CHECK: idivl 9*9880d681SAndroid Build Coastguard Worker; CHECK: ret 10*9880d681SAndroid Build Coastguard Worker; CHECK: divb 11*9880d681SAndroid Build Coastguard Worker; CHECK: ret 12*9880d681SAndroid Build Coastguard Worker %result = sdiv i32 %a, %b 13*9880d681SAndroid Build Coastguard Worker ret i32 %result 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdefine i32 @Test_get_remainder(i32 %a, i32 %b) nounwind { 17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Test_get_remainder: 18*9880d681SAndroid Build Coastguard Worker; CHECK: orl %ecx, %edx 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: testl $-256, %edx 20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: je 21*9880d681SAndroid Build Coastguard Worker; CHECK: idivl 22*9880d681SAndroid Build Coastguard Worker; CHECK: ret 23*9880d681SAndroid Build Coastguard Worker; CHECK: divb 24*9880d681SAndroid Build Coastguard Worker; CHECK: ret 25*9880d681SAndroid Build Coastguard Worker %result = srem i32 %a, %b 26*9880d681SAndroid Build Coastguard Worker ret i32 %result 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdefine i32 @Test_get_quotient_and_remainder(i32 %a, i32 %b) nounwind { 30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Test_get_quotient_and_remainder: 31*9880d681SAndroid Build Coastguard Worker; CHECK: orl %ecx, %edx 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: testl $-256, %edx 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: je 34*9880d681SAndroid Build Coastguard Worker; CHECK: idivl 35*9880d681SAndroid Build Coastguard Worker; CHECK: divb 36*9880d681SAndroid Build Coastguard Worker; CHECK: addl 37*9880d681SAndroid Build Coastguard Worker; CHECK: ret 38*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: idivl 39*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: divb 40*9880d681SAndroid Build Coastguard Worker %resultdiv = sdiv i32 %a, %b 41*9880d681SAndroid Build Coastguard Worker %resultrem = srem i32 %a, %b 42*9880d681SAndroid Build Coastguard Worker %result = add i32 %resultdiv, %resultrem 43*9880d681SAndroid Build Coastguard Worker ret i32 %result 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerdefine i32 @Test_use_div_and_idiv(i32 %a, i32 %b) nounwind { 47*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Test_use_div_and_idiv: 48*9880d681SAndroid Build Coastguard Worker; CHECK: idivl 49*9880d681SAndroid Build Coastguard Worker; CHECK: divb 50*9880d681SAndroid Build Coastguard Worker; CHECK: divl 51*9880d681SAndroid Build Coastguard Worker; CHECK: divb 52*9880d681SAndroid Build Coastguard Worker; CHECK: addl 53*9880d681SAndroid Build Coastguard Worker; CHECK: ret 54*9880d681SAndroid Build Coastguard Worker %resultidiv = sdiv i32 %a, %b 55*9880d681SAndroid Build Coastguard Worker %resultdiv = udiv i32 %a, %b 56*9880d681SAndroid Build Coastguard Worker %result = add i32 %resultidiv, %resultdiv 57*9880d681SAndroid Build Coastguard Worker ret i32 %result 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine i32 @Test_use_div_imm_imm() nounwind { 61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Test_use_div_imm_imm: 62*9880d681SAndroid Build Coastguard Worker; CHECK: movl $64 63*9880d681SAndroid Build Coastguard Worker %resultdiv = sdiv i32 256, 4 64*9880d681SAndroid Build Coastguard Worker ret i32 %resultdiv 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerdefine i32 @Test_use_div_reg_imm(i32 %a) nounwind { 68*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Test_use_div_reg_imm: 69*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: test 70*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: idiv 71*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: divb 72*9880d681SAndroid Build Coastguard Worker %resultdiv = sdiv i32 %a, 33 73*9880d681SAndroid Build Coastguard Worker ret i32 %resultdiv 74*9880d681SAndroid Build Coastguard Worker} 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Workerdefine i32 @Test_use_rem_reg_imm(i32 %a) nounwind { 77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Test_use_rem_reg_imm: 78*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: test 79*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: idiv 80*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: divb 81*9880d681SAndroid Build Coastguard Worker %resultrem = srem i32 %a, 33 82*9880d681SAndroid Build Coastguard Worker ret i32 %resultrem 83*9880d681SAndroid Build Coastguard Worker} 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerdefine i32 @Test_use_divrem_reg_imm(i32 %a) nounwind { 86*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Test_use_divrem_reg_imm: 87*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: test 88*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: idiv 89*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: divb 90*9880d681SAndroid Build Coastguard Worker %resultdiv = sdiv i32 %a, 33 91*9880d681SAndroid Build Coastguard Worker %resultrem = srem i32 %a, 33 92*9880d681SAndroid Build Coastguard Worker %result = add i32 %resultdiv, %resultrem 93*9880d681SAndroid Build Coastguard Worker ret i32 %result 94*9880d681SAndroid Build Coastguard Worker} 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Workerdefine i32 @Test_use_div_imm_reg(i32 %a) nounwind { 97*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Test_use_div_imm_reg: 98*9880d681SAndroid Build Coastguard Worker; CHECK: test 99*9880d681SAndroid Build Coastguard Worker; CHECK: idiv 100*9880d681SAndroid Build Coastguard Worker; CHECK: divb 101*9880d681SAndroid Build Coastguard Worker %resultdiv = sdiv i32 4, %a 102*9880d681SAndroid Build Coastguard Worker ret i32 %resultdiv 103*9880d681SAndroid Build Coastguard Worker} 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Workerdefine i32 @Test_use_rem_imm_reg(i32 %a) nounwind { 106*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Test_use_rem_imm_reg: 107*9880d681SAndroid Build Coastguard Worker; CHECK: test 108*9880d681SAndroid Build Coastguard Worker; CHECK: idiv 109*9880d681SAndroid Build Coastguard Worker; CHECK: divb 110*9880d681SAndroid Build Coastguard Worker %resultdiv = sdiv i32 4, %a 111*9880d681SAndroid Build Coastguard Worker ret i32 %resultdiv 112*9880d681SAndroid Build Coastguard Worker} 113