blob: 87c6ceab85bbcb897a852f742d4506016a4ebd13 [file] [log] [blame]
Jan Voung70d68832014-06-17 10:02:37 -07001; This is a regression test that idiv and div operands are legalized
2; (they cannot be constants and can only be reg/mem for x86).
3
Karl Schimpf2a5324a2014-09-25 09:37:49 -07004; RUN: %p2i -i %s --args -O2 --verbose none \
Jan Voungdddc3062014-08-29 12:59:02 -07005; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \
6; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s
Karl Schimpf2a5324a2014-09-25 09:37:49 -07007; RUN: %p2i -i %s --args -Om1 --verbose none \
Jan Voungdddc3062014-08-29 12:59:02 -07008; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \
9; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s
Karl Schimpf2a5324a2014-09-25 09:37:49 -070010; RUN: %p2i -i %s --args --verbose none | FileCheck --check-prefix=ERRORS %s
11; RUN: %p2i -i %s --insts | %szdiff %s | FileCheck --check-prefix=DUMP %s
Jan Voung70d68832014-06-17 10:02:37 -070012
13define i32 @Sdiv_const8_b(i8 %a) {
14; CHECK-LABEL: Sdiv_const8_b
15entry:
16 %div = sdiv i8 %a, 12
17; CHECK: mov {{.*}}, 12
18; CHECK-NOT: idiv 12
19 %div_ext = sext i8 %div to i32
20 ret i32 %div_ext
21}
22
23define i32 @Sdiv_const16_b(i16 %a) {
24; CHECK-LABEL: Sdiv_const16_b
25entry:
26 %div = sdiv i16 %a, 1234
27; CHECK: mov {{.*}}, 1234
28; CHECK-NOT: idiv 1234
29 %div_ext = sext i16 %div to i32
30 ret i32 %div_ext
31}
32
33define i32 @Sdiv_const32_b(i32 %a) {
34; CHECK-LABEL: Sdiv_const32_b
35entry:
36 %div = sdiv i32 %a, 1234
37; CHECK: mov {{.*}}, 1234
38; CHECK-NOT: idiv 1234
39 ret i32 %div
40}
41
42define i32 @Srem_const_b(i32 %a) {
43; CHECK-LABEL: Srem_const_b
44entry:
45 %rem = srem i32 %a, 2345
46; CHECK: mov {{.*}}, 2345
47; CHECK-NOT: idiv 2345
48 ret i32 %rem
49}
50
51define i32 @Udiv_const_b(i32 %a) {
52; CHECK-LABEL: Udiv_const_b
53entry:
54 %div = udiv i32 %a, 3456
55; CHECK: mov {{.*}}, 3456
56; CHECK-NOT: div 3456
57 ret i32 %div
58}
59
60define i32 @Urem_const_b(i32 %a) {
61; CHECK-LABEL: Urem_const_b
62entry:
63 %rem = urem i32 %a, 4567
64; CHECK: mov {{.*}}, 4567
65; CHECK-NOT: div 4567
66 ret i32 %rem
67}
68
69; ERRORS-NOT: ICE translation error
70; DUMP-NOT: SZ