1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=generic -mtriple=i686-pc-linux-gnu -asm-verbose=0 | FileCheck %s 2*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32" 3*9880d681SAndroid Build Coastguard Workertarget triple = "i686-pc-linux-gnu" 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @test1(i16 zeroext %x) nounwind { 6*9880d681SAndroid Build Coastguard Workerentry: 7*9880d681SAndroid Build Coastguard Worker %div = udiv i16 %x, 33 8*9880d681SAndroid Build Coastguard Worker ret i16 %div 9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1: 10*9880d681SAndroid Build Coastguard Worker; CHECK: imull $63551, %eax 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $21, %eax 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @test2(i8 signext %x, i16 zeroext %c) nounwind readnone ssp noredzone { 16*9880d681SAndroid Build Coastguard Workerentry: 17*9880d681SAndroid Build Coastguard Worker %div = udiv i16 %c, 3 18*9880d681SAndroid Build Coastguard Worker ret i16 %div 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2: 21*9880d681SAndroid Build Coastguard Worker; CHECK: imull $43691, %eax 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $17, %eax 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @test3(i8 zeroext %x, i8 zeroext %c) nounwind readnone ssp noredzone { 27*9880d681SAndroid Build Coastguard Workerentry: 28*9880d681SAndroid Build Coastguard Worker %div = udiv i8 %c, 3 29*9880d681SAndroid Build Coastguard Worker ret i8 %div 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3: 32*9880d681SAndroid Build Coastguard Worker; CHECK: movzbl 8(%esp), %eax 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: imull $171, %eax 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $65024, %eax 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $9, %eax 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerdefine signext i16 @test4(i16 signext %x) nounwind { 40*9880d681SAndroid Build Coastguard Workerentry: 41*9880d681SAndroid Build Coastguard Worker %div = sdiv i16 %x, 33 ; <i32> [#uses=1] 42*9880d681SAndroid Build Coastguard Worker ret i16 %div 43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test4: 44*9880d681SAndroid Build Coastguard Worker; CHECK: imull $1986, %eax 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine i32 @test5(i32 %A) nounwind { 48*9880d681SAndroid Build Coastguard Worker %tmp1 = udiv i32 %A, 1577682821 ; <i32> [#uses=1] 49*9880d681SAndroid Build Coastguard Worker ret i32 %tmp1 50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test5: 51*9880d681SAndroid Build Coastguard Worker; CHECK: movl $365384439, %eax 52*9880d681SAndroid Build Coastguard Worker; CHECK: mull 4(%esp) 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdefine signext i16 @test6(i16 signext %x) nounwind { 56*9880d681SAndroid Build Coastguard Workerentry: 57*9880d681SAndroid Build Coastguard Worker %div = sdiv i16 %x, 10 58*9880d681SAndroid Build Coastguard Worker ret i16 %div 59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test6: 60*9880d681SAndroid Build Coastguard Worker; CHECK: imull $26215, %eax 61*9880d681SAndroid Build Coastguard Worker; CHECK: movl %eax, %ecx 62*9880d681SAndroid Build Coastguard Worker; CHECK: shrl $31, %ecx 63*9880d681SAndroid Build Coastguard Worker; CHECK: sarl $18, %eax 64*9880d681SAndroid Build Coastguard Worker} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Workerdefine i32 @test7(i32 %x) nounwind { 67*9880d681SAndroid Build Coastguard Worker %div = udiv i32 %x, 28 68*9880d681SAndroid Build Coastguard Worker ret i32 %div 69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test7: 70*9880d681SAndroid Build Coastguard Worker; CHECK: shrl $2 71*9880d681SAndroid Build Coastguard Worker; CHECK: movl $613566757 72*9880d681SAndroid Build Coastguard Worker; CHECK: mull 73*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: shrl 74*9880d681SAndroid Build Coastguard Worker; CHECK: ret 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Worker; PR13326 78*9880d681SAndroid Build Coastguard Workerdefine i8 @test8(i8 %x) nounwind { 79*9880d681SAndroid Build Coastguard Worker %div = udiv i8 %x, 78 80*9880d681SAndroid Build Coastguard Worker ret i8 %div 81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8: 82*9880d681SAndroid Build Coastguard Worker; CHECK: shrb % 83*9880d681SAndroid Build Coastguard Worker; CHECK: imull $211 84*9880d681SAndroid Build Coastguard Worker; CHECK: shrl $13 85*9880d681SAndroid Build Coastguard Worker; CHECK: ret 86*9880d681SAndroid Build Coastguard Worker} 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Workerdefine i8 @test9(i8 %x) nounwind { 89*9880d681SAndroid Build Coastguard Worker %div = udiv i8 %x, 116 90*9880d681SAndroid Build Coastguard Worker ret i8 %div 91*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test9: 92*9880d681SAndroid Build Coastguard Worker; CHECK: shrb $2 93*9880d681SAndroid Build Coastguard Worker; CHECK: imull $71 94*9880d681SAndroid Build Coastguard Worker; CHECK: shrl $11 95*9880d681SAndroid Build Coastguard Worker; CHECK: ret 96*9880d681SAndroid Build Coastguard Worker} 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Workerdefine i32 @testsize1(i32 %x) minsize nounwind { 99*9880d681SAndroid Build Coastguard Workerentry: 100*9880d681SAndroid Build Coastguard Worker %div = sdiv i32 %x, 32 101*9880d681SAndroid Build Coastguard Worker ret i32 %div 102*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: testsize1: 103*9880d681SAndroid Build Coastguard Worker; CHECK: divl 104*9880d681SAndroid Build Coastguard Worker} 105*9880d681SAndroid Build Coastguard Worker 106*9880d681SAndroid Build Coastguard Workerdefine i32 @testsize2(i32 %x) minsize nounwind { 107*9880d681SAndroid Build Coastguard Workerentry: 108*9880d681SAndroid Build Coastguard Worker %div = sdiv i32 %x, 33 109*9880d681SAndroid Build Coastguard Worker ret i32 %div 110*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: testsize2: 111*9880d681SAndroid Build Coastguard Worker; CHECK: divl 112*9880d681SAndroid Build Coastguard Worker} 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Workerdefine i32 @testsize3(i32 %x) minsize nounwind { 115*9880d681SAndroid Build Coastguard Workerentry: 116*9880d681SAndroid Build Coastguard Worker %div = udiv i32 %x, 32 117*9880d681SAndroid Build Coastguard Worker ret i32 %div 118*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: testsize3: 119*9880d681SAndroid Build Coastguard Worker; CHECK: shrl 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Workerdefine i32 @testsize4(i32 %x) minsize nounwind { 123*9880d681SAndroid Build Coastguard Workerentry: 124*9880d681SAndroid Build Coastguard Worker %div = udiv i32 %x, 33 125*9880d681SAndroid Build Coastguard Worker ret i32 %div 126*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: testsize4: 127*9880d681SAndroid Build Coastguard Worker; CHECK: divl 128*9880d681SAndroid Build Coastguard Worker} 129