1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+idivl-to-divb < %s | FileCheck -check-prefix=DIV32 %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+idivq-to-divw < %s | FileCheck -check-prefix=DIV64 %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine i32 @div32(i32 %a, i32 %b) { 5*9880d681SAndroid Build Coastguard Workerentry: 6*9880d681SAndroid Build Coastguard Worker; DIV32-LABEL: div32: 7*9880d681SAndroid Build Coastguard Worker; DIV32: orl %{{.*}}, [[REG:%[a-z]+]] 8*9880d681SAndroid Build Coastguard Worker; DIV32: testl $-256, [[REG]] 9*9880d681SAndroid Build Coastguard Worker; DIV32: divb 10*9880d681SAndroid Build Coastguard Worker; DIV64-LABEL: div32: 11*9880d681SAndroid Build Coastguard Worker; DIV64-NOT: divb 12*9880d681SAndroid Build Coastguard Worker %div = sdiv i32 %a, %b 13*9880d681SAndroid Build Coastguard Worker ret i32 %div 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdefine i64 @div64(i64 %a, i64 %b) { 17*9880d681SAndroid Build Coastguard Workerentry: 18*9880d681SAndroid Build Coastguard Worker; DIV32-LABEL: div64: 19*9880d681SAndroid Build Coastguard Worker; DIV32-NOT: divw 20*9880d681SAndroid Build Coastguard Worker; DIV64-LABEL: div64: 21*9880d681SAndroid Build Coastguard Worker; DIV64: orq %{{.*}}, [[REG:%[a-z]+]] 22*9880d681SAndroid Build Coastguard Worker; DIV64: testq $-65536, [[REG]] 23*9880d681SAndroid Build Coastguard Worker; DIV64: divw 24*9880d681SAndroid Build Coastguard Worker %div = sdiv i64 %a, %b 25*9880d681SAndroid Build Coastguard Worker ret i64 %div 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker; Verify that no extra code is generated when optimizing for size. 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine i32 @div32_optsize(i32 %a, i32 %b) optsize { 31*9880d681SAndroid Build Coastguard Worker; DIV32-LABEL: div32_optsize: 32*9880d681SAndroid Build Coastguard Worker; DIV32-NOT: divb 33*9880d681SAndroid Build Coastguard Worker %div = sdiv i32 %a, %b 34*9880d681SAndroid Build Coastguard Worker ret i32 %div 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerdefine i32 @div32_minsize(i32 %a, i32 %b) minsize { 38*9880d681SAndroid Build Coastguard Worker; DIV32-LABEL: div32_minsize: 39*9880d681SAndroid Build Coastguard Worker; DIV32-NOT: divb 40*9880d681SAndroid Build Coastguard Worker %div = sdiv i32 %a, %b 41*9880d681SAndroid Build Coastguard Worker ret i32 %div 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44