1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=x86_64-none-linux -fast-isel -fast-isel-abort=1 -verify-machineinstrs < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=i686-none-linux -fast-isel -fast-isel-abort=1 -verify-machineinstrs < %s | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine i8 @test_sdiv8(i8 %dividend, i8 %divisor) nounwind { 5*9880d681SAndroid Build Coastguard Workerentry: 6*9880d681SAndroid Build Coastguard Worker %result = sdiv i8 %dividend, %divisor 7*9880d681SAndroid Build Coastguard Worker ret i8 %result 8*9880d681SAndroid Build Coastguard Worker} 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sdiv8: 11*9880d681SAndroid Build Coastguard Worker; CHECK: movsbw 12*9880d681SAndroid Build Coastguard Worker; CHECK: idivb 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine i8 @test_srem8(i8 %dividend, i8 %divisor) nounwind { 15*9880d681SAndroid Build Coastguard Workerentry: 16*9880d681SAndroid Build Coastguard Worker %result = srem i8 %dividend, %divisor 17*9880d681SAndroid Build Coastguard Worker ret i8 %result 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srem8: 21*9880d681SAndroid Build Coastguard Worker; CHECK: movsbw 22*9880d681SAndroid Build Coastguard Worker; CHECK: idivb 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine i8 @test_udiv8(i8 %dividend, i8 %divisor) nounwind { 25*9880d681SAndroid Build Coastguard Workerentry: 26*9880d681SAndroid Build Coastguard Worker %result = udiv i8 %dividend, %divisor 27*9880d681SAndroid Build Coastguard Worker ret i8 %result 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_udiv8: 31*9880d681SAndroid Build Coastguard Worker; CHECK: movzbw 32*9880d681SAndroid Build Coastguard Worker; CHECK: divb 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdefine i8 @test_urem8(i8 %dividend, i8 %divisor) nounwind { 35*9880d681SAndroid Build Coastguard Workerentry: 36*9880d681SAndroid Build Coastguard Worker %result = urem i8 %dividend, %divisor 37*9880d681SAndroid Build Coastguard Worker ret i8 %result 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_urem8: 41*9880d681SAndroid Build Coastguard Worker; CHECK: movzbw 42*9880d681SAndroid Build Coastguard Worker; CHECK: divb 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine i16 @test_sdiv16(i16 %dividend, i16 %divisor) nounwind { 45*9880d681SAndroid Build Coastguard Workerentry: 46*9880d681SAndroid Build Coastguard Worker %result = sdiv i16 %dividend, %divisor 47*9880d681SAndroid Build Coastguard Worker ret i16 %result 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sdiv16: 51*9880d681SAndroid Build Coastguard Worker; CHECK: cwtd 52*9880d681SAndroid Build Coastguard Worker; CHECK: idivw 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdefine i16 @test_srem16(i16 %dividend, i16 %divisor) nounwind { 55*9880d681SAndroid Build Coastguard Workerentry: 56*9880d681SAndroid Build Coastguard Worker %result = srem i16 %dividend, %divisor 57*9880d681SAndroid Build Coastguard Worker ret i16 %result 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srem16: 61*9880d681SAndroid Build Coastguard Worker; CHECK: cwtd 62*9880d681SAndroid Build Coastguard Worker; CHECK: idivw 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerdefine i16 @test_udiv16(i16 %dividend, i16 %divisor) nounwind { 65*9880d681SAndroid Build Coastguard Workerentry: 66*9880d681SAndroid Build Coastguard Worker %result = udiv i16 %dividend, %divisor 67*9880d681SAndroid Build Coastguard Worker ret i16 %result 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_udiv16: 71*9880d681SAndroid Build Coastguard Worker; CHECK: xorl 72*9880d681SAndroid Build Coastguard Worker; CHECK: divw 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdefine i16 @test_urem16(i16 %dividend, i16 %divisor) nounwind { 75*9880d681SAndroid Build Coastguard Workerentry: 76*9880d681SAndroid Build Coastguard Worker %result = urem i16 %dividend, %divisor 77*9880d681SAndroid Build Coastguard Worker ret i16 %result 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_urem16: 81*9880d681SAndroid Build Coastguard Worker; CHECK: xorl 82*9880d681SAndroid Build Coastguard Worker; CHECK: divw 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Workerdefine i32 @test_sdiv32(i32 %dividend, i32 %divisor) nounwind { 85*9880d681SAndroid Build Coastguard Workerentry: 86*9880d681SAndroid Build Coastguard Worker %result = sdiv i32 %dividend, %divisor 87*9880d681SAndroid Build Coastguard Worker ret i32 %result 88*9880d681SAndroid Build Coastguard Worker} 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_sdiv32: 91*9880d681SAndroid Build Coastguard Worker; CHECK: cltd 92*9880d681SAndroid Build Coastguard Worker; CHECK: idivl 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerdefine i32 @test_srem32(i32 %dividend, i32 %divisor) nounwind { 95*9880d681SAndroid Build Coastguard Workerentry: 96*9880d681SAndroid Build Coastguard Worker %result = srem i32 %dividend, %divisor 97*9880d681SAndroid Build Coastguard Worker ret i32 %result 98*9880d681SAndroid Build Coastguard Worker} 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_srem32: 101*9880d681SAndroid Build Coastguard Worker; CHECK: cltd 102*9880d681SAndroid Build Coastguard Worker; CHECK: idivl 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Workerdefine i32 @test_udiv32(i32 %dividend, i32 %divisor) nounwind { 105*9880d681SAndroid Build Coastguard Workerentry: 106*9880d681SAndroid Build Coastguard Worker %result = udiv i32 %dividend, %divisor 107*9880d681SAndroid Build Coastguard Worker ret i32 %result 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_udiv32: 111*9880d681SAndroid Build Coastguard Worker; CHECK: xorl 112*9880d681SAndroid Build Coastguard Worker; CHECK: divl 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Workerdefine i32 @test_urem32(i32 %dividend, i32 %divisor) nounwind { 115*9880d681SAndroid Build Coastguard Workerentry: 116*9880d681SAndroid Build Coastguard Worker %result = urem i32 %dividend, %divisor 117*9880d681SAndroid Build Coastguard Worker ret i32 %result 118*9880d681SAndroid Build Coastguard Worker} 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_urem32: 121*9880d681SAndroid Build Coastguard Worker; CHECK: xorl 122*9880d681SAndroid Build Coastguard Worker; CHECK: divl 123