xref: /llvm-project/llvm/test/CodeGen/X86/knownbits-div.ll (revision d294e3cb763abd33fcabf1e3642cb6659fd304cf)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s
3
4define i8 @sdiv_neg_neg_high_bits(i8 %x, i8 %y) {
5; CHECK-LABEL: sdiv_neg_neg_high_bits:
6; CHECK:       # %bb.0:
7; CHECK-NEXT:    xorl %eax, %eax
8; CHECK-NEXT:    retq
9  %num = or i8 %x, 128
10  %denum = or i8 %y, 131
11  %div = sdiv i8 %num, %denum
12  %r = and i8 %div, 128
13  ret i8 %r
14}
15
16define i8 @sdiv_exact_odd_odd(i8 %x, i8 %y) {
17; CHECK-LABEL: sdiv_exact_odd_odd:
18; CHECK:       # %bb.0:
19; CHECK-NEXT:    movb $1, %al
20; CHECK-NEXT:    retq
21  %num = or i8 %x, 1
22  %denum = or i8 %y, 1
23  %div = sdiv exact i8 %num, %denum
24  %r = and i8 %div, 1
25  ret i8 %r
26}
27
28define i8 @sdiv_exact_even_even_fail_unknown(i8 %x, i8 %y) {
29; CHECK-LABEL: sdiv_exact_even_even_fail_unknown:
30; CHECK:       # %bb.0:
31; CHECK-NEXT:    andb $-2, %dil
32; CHECK-NEXT:    andb $-2, %sil
33; CHECK-NEXT:    movsbl %dil, %eax
34; CHECK-NEXT:    idivb %sil
35; CHECK-NEXT:    andb $1, %al
36; CHECK-NEXT:    retq
37  %num = and i8 %x, -2
38  %denum = and i8 %y, -2
39  %div = sdiv exact i8 %num, %denum
40  %r = and i8 %div, 1
41  ret i8 %r
42}
43
44define i8 @udiv_exact_even_odd(i8 %x, i8 %y) {
45; CHECK-LABEL: udiv_exact_even_odd:
46; CHECK:       # %bb.0:
47; CHECK-NEXT:    xorl %eax, %eax
48; CHECK-NEXT:    retq
49  %num = and i8 %x, -2
50  %denum = or i8 %y, 1
51  %div = udiv exact i8 %num, %denum
52  %r = and i8 %div, 1
53  ret i8 %r
54}
55
56define i8 @udiv_exact_even_even_fail_unknown(i8 %x, i8 %y) {
57; CHECK-LABEL: udiv_exact_even_even_fail_unknown:
58; CHECK:       # %bb.0:
59; CHECK-NEXT:    andb $-2, %dil
60; CHECK-NEXT:    andb $-2, %sil
61; CHECK-NEXT:    movzbl %dil, %eax
62; CHECK-NEXT:    divb %sil
63; CHECK-NEXT:    andb $1, %al
64; CHECK-NEXT:    retq
65  %num = and i8 %x, -2
66  %denum = and i8 %y, -2
67  %div = udiv exact i8 %num, %denum
68  %r = and i8 %div, 1
69  ret i8 %r
70}
71