blob: 79001e5de192e4add04afe54f0bddd83cf2a6d9c [file] [log] [blame]
Preston Gurd485296d2013-03-04 18:13:57 +00001; RUN: llc < %s -mcpu=atom -mtriple=i686-linux | FileCheck %s
Preston Gurdcdf540d2012-09-04 18:22:17 +00002
NAKAMURA Takumicae53212012-12-12 13:34:14 +00003define i32 @Test_get_quotient(i32 %a, i32 %b) nounwind {
Stephen Lind24ab202013-07-14 06:24:09 +00004; CHECK-LABEL: Test_get_quotient:
Preston Gurdcdf540d2012-09-04 18:22:17 +00005; CHECK: orl %ecx, %edx
6; CHECK-NEXT: testl $-256, %edx
7; CHECK-NEXT: je
8; CHECK: idivl
9; CHECK: ret
10; CHECK: divb
11; CHECK: ret
12 %result = sdiv i32 %a, %b
13 ret i32 %result
14}
15
NAKAMURA Takumicae53212012-12-12 13:34:14 +000016define i32 @Test_get_remainder(i32 %a, i32 %b) nounwind {
Stephen Lind24ab202013-07-14 06:24:09 +000017; CHECK-LABEL: Test_get_remainder:
Preston Gurdcdf540d2012-09-04 18:22:17 +000018; CHECK: orl %ecx, %edx
19; CHECK-NEXT: testl $-256, %edx
20; CHECK-NEXT: je
21; CHECK: idivl
22; CHECK: ret
23; CHECK: divb
24; CHECK: ret
25 %result = srem i32 %a, %b
26 ret i32 %result
27}
28
NAKAMURA Takumicae53212012-12-12 13:34:14 +000029define i32 @Test_get_quotient_and_remainder(i32 %a, i32 %b) nounwind {
Stephen Lind24ab202013-07-14 06:24:09 +000030; CHECK-LABEL: Test_get_quotient_and_remainder:
Preston Gurdcdf540d2012-09-04 18:22:17 +000031; CHECK: orl %ecx, %edx
32; CHECK-NEXT: testl $-256, %edx
33; CHECK-NEXT: je
34; CHECK: idivl
35; CHECK: divb
36; CHECK: addl
37; CHECK: ret
NAKAMURA Takumibe230b82012-12-12 13:34:20 +000038; CHECK-NOT: idivl
Preston Gurdcdf540d2012-09-04 18:22:17 +000039; CHECK-NOT: divb
40 %resultdiv = sdiv i32 %a, %b
41 %resultrem = srem i32 %a, %b
42 %result = add i32 %resultdiv, %resultrem
43 ret i32 %result
44}
45
NAKAMURA Takumicae53212012-12-12 13:34:14 +000046define i32 @Test_use_div_and_idiv(i32 %a, i32 %b) nounwind {
Stephen Lind24ab202013-07-14 06:24:09 +000047; CHECK-LABEL: Test_use_div_and_idiv:
Preston Gurdcdf540d2012-09-04 18:22:17 +000048; CHECK: idivl
49; CHECK: divb
50; CHECK: divl
51; CHECK: divb
52; CHECK: addl
53; CHECK: ret
54 %resultidiv = sdiv i32 %a, %b
55 %resultdiv = udiv i32 %a, %b
56 %result = add i32 %resultidiv, %resultdiv
57 ret i32 %result
58}
59
NAKAMURA Takumicae53212012-12-12 13:34:14 +000060define i32 @Test_use_div_imm_imm() nounwind {
Stephen Lind24ab202013-07-14 06:24:09 +000061; CHECK-LABEL: Test_use_div_imm_imm:
Preston Gurdcdf540d2012-09-04 18:22:17 +000062; CHECK: movl $64
63 %resultdiv = sdiv i32 256, 4
64 ret i32 %resultdiv
65}
66
NAKAMURA Takumicae53212012-12-12 13:34:14 +000067define i32 @Test_use_div_reg_imm(i32 %a) nounwind {
Stephen Lind24ab202013-07-14 06:24:09 +000068; CHECK-LABEL: Test_use_div_reg_imm:
NAKAMURA Takumibe230b82012-12-12 13:34:20 +000069; CHECK-NOT: test
Preston Gurdcdf540d2012-09-04 18:22:17 +000070; CHECK-NOT: idiv
71; CHECK-NOT: divb
72 %resultdiv = sdiv i32 %a, 33
73 ret i32 %resultdiv
74}
75
NAKAMURA Takumicae53212012-12-12 13:34:14 +000076define i32 @Test_use_rem_reg_imm(i32 %a) nounwind {
Stephen Lind24ab202013-07-14 06:24:09 +000077; CHECK-LABEL: Test_use_rem_reg_imm:
NAKAMURA Takumibe230b82012-12-12 13:34:20 +000078; CHECK-NOT: test
Preston Gurdcdf540d2012-09-04 18:22:17 +000079; CHECK-NOT: idiv
80; CHECK-NOT: divb
81 %resultrem = srem i32 %a, 33
82 ret i32 %resultrem
83}
84
NAKAMURA Takumicae53212012-12-12 13:34:14 +000085define i32 @Test_use_divrem_reg_imm(i32 %a) nounwind {
Stephen Lind24ab202013-07-14 06:24:09 +000086; CHECK-LABEL: Test_use_divrem_reg_imm:
NAKAMURA Takumibe230b82012-12-12 13:34:20 +000087; CHECK-NOT: test
Preston Gurdcdf540d2012-09-04 18:22:17 +000088; CHECK-NOT: idiv
89; CHECK-NOT: divb
90 %resultdiv = sdiv i32 %a, 33
91 %resultrem = srem i32 %a, 33
92 %result = add i32 %resultdiv, %resultrem
93 ret i32 %result
94}
95
NAKAMURA Takumicae53212012-12-12 13:34:14 +000096define i32 @Test_use_div_imm_reg(i32 %a) nounwind {
Stephen Lind24ab202013-07-14 06:24:09 +000097; CHECK-LABEL: Test_use_div_imm_reg:
Preston Gurdcdf540d2012-09-04 18:22:17 +000098; CHECK: test
99; CHECK: idiv
100; CHECK: divb
101 %resultdiv = sdiv i32 4, %a
102 ret i32 %resultdiv
103}
104
NAKAMURA Takumicae53212012-12-12 13:34:14 +0000105define i32 @Test_use_rem_imm_reg(i32 %a) nounwind {
Stephen Lind24ab202013-07-14 06:24:09 +0000106; CHECK-LABEL: Test_use_rem_imm_reg:
Preston Gurdcdf540d2012-09-04 18:22:17 +0000107; CHECK: test
108; CHECK: idiv
109; CHECK: divb
110 %resultdiv = sdiv i32 4, %a
111 ret i32 %resultdiv
112}