11
11
define i8 @scalar_i8 (i8 %x , i8 %y , ptr %divdst ) nounwind {
12
12
; X86-LABEL: scalar_i8:
13
13
; X86: # %bb.0:
14
+ ; X86-NEXT: movsbl {{[0-9]+}}(%esp), %eax
15
+ ; X86-NEXT: idivb {{[0-9]+}}(%esp)
14
16
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
15
- ; X86-NEXT: movb {{[0-9]+}}(%esp), %ch
16
- ; X86-NEXT: movb {{[0-9]+}}(%esp), %cl
17
- ; X86-NEXT: movsbl %cl, %eax
18
- ; X86-NEXT: idivb %ch
17
+ ; X86-NEXT: movsbl %ah, %ecx
19
18
; X86-NEXT: movb %al, (%edx)
20
- ; X86-NEXT: mulb %ch
21
- ; X86-NEXT: subb %al, %cl
22
19
; X86-NEXT: movl %ecx, %eax
23
20
; X86-NEXT: retl
24
21
;
25
22
; X64-LABEL: scalar_i8:
26
23
; X64: # %bb.0:
27
- ; X64-NEXT: movsbl %dil, %ecx
28
- ; X64-NEXT: movl %ecx, %eax
24
+ ; X64-NEXT: movsbl %dil, %eax
29
25
; X64-NEXT: idivb %sil
26
+ ; X64-NEXT: movsbl %ah, %ecx
30
27
; X64-NEXT: movb %al, (%rdx)
31
- ; X64-NEXT: mulb %sil
32
- ; X64-NEXT: subb %al, %cl
33
28
; X64-NEXT: movl %ecx, %eax
34
29
; X64-NEXT: retq
35
30
%div = sdiv i8 %x , %y
@@ -42,34 +37,23 @@ define i8 @scalar_i8(i8 %x, i8 %y, ptr %divdst) nounwind {
42
37
define i16 @scalar_i16 (i16 %x , i16 %y , ptr %divdst ) nounwind {
43
38
; X86-LABEL: scalar_i16:
44
39
; X86: # %bb.0:
45
- ; X86-NEXT: pushl %edi
46
- ; X86-NEXT: pushl %esi
47
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
48
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
49
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
50
- ; X86-NEXT: movl %ecx, %eax
40
+ ; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax
51
41
; X86-NEXT: cwtd
52
- ; X86-NEXT: idivw %si
53
- ; X86-NEXT: # kill: def $ax killed $ax def $eax
54
- ; X86-NEXT: movw %ax, (%edi)
55
- ; X86-NEXT: imull %eax, %esi
56
- ; X86-NEXT: subl %esi, %ecx
57
- ; X86-NEXT: movl %ecx, %eax
58
- ; X86-NEXT: popl %esi
59
- ; X86-NEXT: popl %edi
42
+ ; X86-NEXT: idivw {{[0-9]+}}(%esp)
43
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
44
+ ; X86-NEXT: movw %ax, (%ecx)
45
+ ; X86-NEXT: movl %edx, %eax
60
46
; X86-NEXT: retl
61
47
;
62
48
; X64-LABEL: scalar_i16:
63
49
; X64: # %bb.0:
64
50
; X64-NEXT: movq %rdx, %rcx
65
51
; X64-NEXT: movl %edi, %eax
52
+ ; X64-NEXT: # kill: def $ax killed $ax killed $eax
66
53
; X64-NEXT: cwtd
67
54
; X64-NEXT: idivw %si
68
- ; X64-NEXT: # kill: def $ax killed $ax def $eax
69
55
; X64-NEXT: movw %ax, (%rcx)
70
- ; X64-NEXT: imull %eax, %esi
71
- ; X64-NEXT: subl %esi, %edi
72
- ; X64-NEXT: movl %edi, %eax
56
+ ; X64-NEXT: movl %edx, %eax
73
57
; X64-NEXT: retq
74
58
%div = sdiv i16 %x , %y
75
59
store i16 %div , ptr %divdst , align 4
@@ -81,20 +65,12 @@ define i16 @scalar_i16(i16 %x, i16 %y, ptr %divdst) nounwind {
81
65
define i32 @scalar_i32 (i32 %x , i32 %y , ptr %divdst ) nounwind {
82
66
; X86-LABEL: scalar_i32:
83
67
; X86: # %bb.0:
84
- ; X86-NEXT: pushl %edi
85
- ; X86-NEXT: pushl %esi
86
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
87
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
88
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
89
- ; X86-NEXT: movl %ecx, %eax
68
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
90
69
; X86-NEXT: cltd
91
- ; X86-NEXT: idivl %edi
92
- ; X86-NEXT: movl %eax, (%esi)
93
- ; X86-NEXT: imull %edi, %eax
94
- ; X86-NEXT: subl %eax, %ecx
95
- ; X86-NEXT: movl %ecx, %eax
96
- ; X86-NEXT: popl %esi
97
- ; X86-NEXT: popl %edi
70
+ ; X86-NEXT: idivl {{[0-9]+}}(%esp)
71
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
72
+ ; X86-NEXT: movl %eax, (%ecx)
73
+ ; X86-NEXT: movl %edx, %eax
98
74
; X86-NEXT: retl
99
75
;
100
76
; X64-LABEL: scalar_i32:
@@ -104,9 +80,7 @@ define i32 @scalar_i32(i32 %x, i32 %y, ptr %divdst) nounwind {
104
80
; X64-NEXT: cltd
105
81
; X64-NEXT: idivl %esi
106
82
; X64-NEXT: movl %eax, (%rcx)
107
- ; X64-NEXT: imull %esi, %eax
108
- ; X64-NEXT: subl %eax, %edi
109
- ; X64-NEXT: movl %edi, %eax
83
+ ; X64-NEXT: movl %edx, %eax
110
84
; X64-NEXT: retq
111
85
%div = sdiv i32 %x , %y
112
86
store i32 %div , ptr %divdst , align 4
@@ -158,9 +132,7 @@ define i64 @scalar_i64(i64 %x, i64 %y, ptr %divdst) nounwind {
158
132
; X64-NEXT: cqto
159
133
; X64-NEXT: idivq %rsi
160
134
; X64-NEXT: movq %rax, (%rcx)
161
- ; X64-NEXT: imulq %rsi, %rax
162
- ; X64-NEXT: subq %rax, %rdi
163
- ; X64-NEXT: movq %rdi, %rax
135
+ ; X64-NEXT: movq %rdx, %rax
164
136
; X64-NEXT: retq
165
137
%div = sdiv i64 %x , %y
166
138
store i64 %div , ptr %divdst , align 4
@@ -1199,34 +1171,23 @@ define <2 x i64> @vector_i128_i64(<2 x i64> %x, <2 x i64> %y, ptr %divdst) nounw
1199
1171
define i32 @scalar_i32_commutative (i32 %x , ptr %ysrc , ptr %divdst ) nounwind {
1200
1172
; X86-LABEL: scalar_i32_commutative:
1201
1173
; X86: # %bb.0:
1202
- ; X86-NEXT: pushl %edi
1203
- ; X86-NEXT: pushl %esi
1204
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1205
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
1206
1174
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1207
- ; X86-NEXT: movl (%eax), %edi
1208
- ; X86-NEXT: movl %ecx, %eax
1175
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
1209
1176
; X86-NEXT: cltd
1210
- ; X86-NEXT: idivl %edi
1211
- ; X86-NEXT: movl %eax, (%esi)
1212
- ; X86-NEXT: imull %eax, %edi
1213
- ; X86-NEXT: subl %edi, %ecx
1214
- ; X86-NEXT: movl %ecx, %eax
1215
- ; X86-NEXT: popl %esi
1216
- ; X86-NEXT: popl %edi
1177
+ ; X86-NEXT: idivl (%ecx)
1178
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
1179
+ ; X86-NEXT: movl %eax, (%ecx)
1180
+ ; X86-NEXT: movl %edx, %eax
1217
1181
; X86-NEXT: retl
1218
1182
;
1219
1183
; X64-LABEL: scalar_i32_commutative:
1220
1184
; X64: # %bb.0:
1221
1185
; X64-NEXT: movq %rdx, %rcx
1222
- ; X64-NEXT: movl (%rsi), %esi
1223
1186
; X64-NEXT: movl %edi, %eax
1224
1187
; X64-NEXT: cltd
1225
- ; X64-NEXT: idivl %esi
1188
+ ; X64-NEXT: idivl (%rsi)
1226
1189
; X64-NEXT: movl %eax, (%rcx)
1227
- ; X64-NEXT: imull %eax, %esi
1228
- ; X64-NEXT: subl %esi, %edi
1229
- ; X64-NEXT: movl %edi, %eax
1190
+ ; X64-NEXT: movl %edx, %eax
1230
1191
; X64-NEXT: retq
1231
1192
%y = load i32 , ptr %ysrc , align 4
1232
1193
%div = sdiv i32 %x , %y
@@ -1240,24 +1201,20 @@ define i32 @scalar_i32_commutative(i32 %x, ptr %ysrc, ptr %divdst) nounwind {
1240
1201
define i32 @extrause (i32 %x , i32 %y , ptr %divdst , ptr %t1dst ) nounwind {
1241
1202
; X86-LABEL: extrause:
1242
1203
; X86: # %bb.0:
1243
- ; X86-NEXT: pushl %ebx
1244
1204
; X86-NEXT: pushl %edi
1245
1205
; X86-NEXT: pushl %esi
1246
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1247
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
1206
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1248
1207
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
1249
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx
1250
- ; X86-NEXT: movl %ecx, %eax
1251
1208
; X86-NEXT: cltd
1252
- ; X86-NEXT: idivl %ebx
1209
+ ; X86-NEXT: idivl %ecx
1210
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1211
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
1253
1212
; X86-NEXT: movl %eax, (%edi)
1254
- ; X86-NEXT: imull %ebx , %eax
1213
+ ; X86-NEXT: imull %ecx , %eax
1255
1214
; X86-NEXT: movl %eax, (%esi)
1256
- ; X86-NEXT: subl %eax, %ecx
1257
- ; X86-NEXT: movl %ecx, %eax
1215
+ ; X86-NEXT: movl %edx, %eax
1258
1216
; X86-NEXT: popl %esi
1259
1217
; X86-NEXT: popl %edi
1260
- ; X86-NEXT: popl %ebx
1261
1218
; X86-NEXT: retl
1262
1219
;
1263
1220
; X64-LABEL: extrause:
@@ -1269,8 +1226,7 @@ define i32 @extrause(i32 %x, i32 %y, ptr %divdst, ptr %t1dst) nounwind {
1269
1226
; X64-NEXT: movl %eax, (%r8)
1270
1227
; X64-NEXT: imull %esi, %eax
1271
1228
; X64-NEXT: movl %eax, (%rcx)
1272
- ; X64-NEXT: subl %eax, %edi
1273
- ; X64-NEXT: movl %edi, %eax
1229
+ ; X64-NEXT: movl %edx, %eax
1274
1230
; X64-NEXT: retq
1275
1231
%div = sdiv i32 %x , %y
1276
1232
store i32 %div , ptr %divdst , align 4
0 commit comments