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