add test to show suboptimal load merging behavior
[oota-llvm.git] / test / CodeGen / X86 / fast-isel-divrem.ll
1 ; RUN: llc -mtriple=x86_64-none-linux -fast-isel -fast-isel-abort=1 -verify-machineinstrs < %s | FileCheck %s
2 ; RUN: llc -mtriple=i686-none-linux -fast-isel -fast-isel-abort=1 -verify-machineinstrs < %s | FileCheck %s
3
4 define i8 @test_sdiv8(i8 %dividend, i8 %divisor) nounwind {
5 entry:
6   %result = sdiv i8 %dividend, %divisor
7   ret i8 %result
8 }
9
10 ; CHECK-LABEL: test_sdiv8:
11 ; CHECK: movsbw
12 ; CHECK: idivb
13
14 define i8 @test_srem8(i8 %dividend, i8 %divisor) nounwind {
15 entry:
16   %result = srem i8 %dividend, %divisor
17   ret i8 %result
18 }
19
20 ; CHECK-LABEL: test_srem8:
21 ; CHECK: movsbw
22 ; CHECK: idivb
23
24 define i8 @test_udiv8(i8 %dividend, i8 %divisor) nounwind {
25 entry:
26   %result = udiv i8 %dividend, %divisor
27   ret i8 %result
28 }
29
30 ; CHECK-LABEL: test_udiv8:
31 ; CHECK: movzbw
32 ; CHECK: divb
33
34 define i8 @test_urem8(i8 %dividend, i8 %divisor) nounwind {
35 entry:
36   %result = urem i8 %dividend, %divisor
37   ret i8 %result
38 }
39
40 ; CHECK-LABEL: test_urem8:
41 ; CHECK: movzbw
42 ; CHECK: divb
43
44 define i16 @test_sdiv16(i16 %dividend, i16 %divisor) nounwind {
45 entry:
46   %result = sdiv i16 %dividend, %divisor
47   ret i16 %result
48 }
49
50 ; CHECK-LABEL: test_sdiv16:
51 ; CHECK: cwtd
52 ; CHECK: idivw
53
54 define i16 @test_srem16(i16 %dividend, i16 %divisor) nounwind {
55 entry:
56   %result = srem i16 %dividend, %divisor
57   ret i16 %result
58 }
59
60 ; CHECK-LABEL: test_srem16:
61 ; CHECK: cwtd
62 ; CHECK: idivw
63
64 define i16 @test_udiv16(i16 %dividend, i16 %divisor) nounwind {
65 entry:
66   %result = udiv i16 %dividend, %divisor
67   ret i16 %result
68 }
69
70 ; CHECK-LABEL: test_udiv16:
71 ; CHECK: xorl
72 ; CHECK: divw
73
74 define i16 @test_urem16(i16 %dividend, i16 %divisor) nounwind {
75 entry:
76   %result = urem i16 %dividend, %divisor
77   ret i16 %result
78 }
79
80 ; CHECK-LABEL: test_urem16:
81 ; CHECK: xorl
82 ; CHECK: divw
83
84 define i32 @test_sdiv32(i32 %dividend, i32 %divisor) nounwind {
85 entry:
86   %result = sdiv i32 %dividend, %divisor
87   ret i32 %result
88 }
89
90 ; CHECK-LABEL: test_sdiv32:
91 ; CHECK: cltd
92 ; CHECK: idivl
93
94 define i32 @test_srem32(i32 %dividend, i32 %divisor) nounwind {
95 entry:
96   %result = srem i32 %dividend, %divisor
97   ret i32 %result
98 }
99
100 ; CHECK-LABEL: test_srem32:
101 ; CHECK: cltd
102 ; CHECK: idivl
103
104 define i32 @test_udiv32(i32 %dividend, i32 %divisor) nounwind {
105 entry:
106   %result = udiv i32 %dividend, %divisor
107   ret i32 %result
108 }
109
110 ; CHECK-LABEL: test_udiv32:
111 ; CHECK: xorl
112 ; CHECK: divl
113
114 define i32 @test_urem32(i32 %dividend, i32 %divisor) nounwind {
115 entry:
116   %result = urem i32 %dividend, %divisor
117   ret i32 %result
118 }
119
120 ; CHECK-LABEL: test_urem32:
121 ; CHECK: xorl
122 ; CHECK: divl