Skip to content

Commit c2ef371

Browse files
committed
1
1 parent 940108b commit c2ef371

File tree

1 file changed

+40
-4
lines changed

1 file changed

+40
-4
lines changed

llvm/test/CodeGen/X86/div-rem-pair-recomposition-signed.ll

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1194,6 +1194,42 @@ define <2 x i64> @vector_i128_i64(<2 x i64> %x, <2 x i64> %y, ptr %divdst) nounw
11941194
ret <2 x i64> %t2
11951195
}
11961196

1197+
define i32 @scalar_i32_const_pow2_divisor(i32 %0, ptr %1) minsize nounwind {
1198+
; X86-LABEL: scalar_i32_const_pow2_divisor:
1199+
; X86: # %bb.0:
1200+
; X86-NEXT: pushl %edi
1201+
; X86-NEXT: pushl %esi
1202+
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
1203+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
1204+
; X86-NEXT: movl $256, %edi # imm = 0x100
1205+
; X86-NEXT: movl %ecx, %eax
1206+
; X86-NEXT: cltd
1207+
; X86-NEXT: idivl %edi
1208+
; X86-NEXT: movl %eax, %edx
1209+
; X86-NEXT: shll $8, %edx
1210+
; X86-NEXT: subl %edx, %ecx
1211+
; X86-NEXT: movl %ecx, (%esi)
1212+
; X86-NEXT: popl %esi
1213+
; X86-NEXT: popl %edi
1214+
; X86-NEXT: retl
1215+
;
1216+
; X64-LABEL: scalar_i32_const_pow2_divisor:
1217+
; X64: # %bb.0:
1218+
; X64-NEXT: movl $256, %ecx # imm = 0x100
1219+
; X64-NEXT: movl %edi, %eax
1220+
; X64-NEXT: cltd
1221+
; X64-NEXT: idivl %ecx
1222+
; X64-NEXT: movl %eax, %ecx
1223+
; X64-NEXT: shll $8, %ecx
1224+
; X64-NEXT: subl %ecx, %edi
1225+
; X64-NEXT: movl %edi, (%rsi)
1226+
; X64-NEXT: retq
1227+
%3 = srem i32 %0, 256
1228+
store i32 %3, ptr %1, align 4
1229+
%4 = sdiv i32 %0, 256
1230+
ret i32 %4
1231+
}
1232+
11971233
; Special tests.
11981234

11991235
define i32 @scalar_i32_commutative(i32 %x, ptr %ysrc, ptr %divdst) nounwind {
@@ -1296,14 +1332,14 @@ define i32 @multiple_bb(i32 %x, i32 %y, ptr %divdst, i1 zeroext %store_srem, ptr
12961332
; X86-NEXT: idivl %esi
12971333
; X86-NEXT: movl %eax, (%edi)
12981334
; X86-NEXT: testb %bl, %bl
1299-
; X86-NEXT: je .LBB11_2
1335+
; X86-NEXT: je .LBB12_2
13001336
; X86-NEXT: # %bb.1: # %do_srem
13011337
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
13021338
; X86-NEXT: movl %eax, %edi
13031339
; X86-NEXT: imull %esi, %edi
13041340
; X86-NEXT: subl %edi, %ecx
13051341
; X86-NEXT: movl %ecx, (%edx)
1306-
; X86-NEXT: .LBB11_2: # %end
1342+
; X86-NEXT: .LBB12_2: # %end
13071343
; X86-NEXT: popl %esi
13081344
; X86-NEXT: popl %edi
13091345
; X86-NEXT: popl %ebx
@@ -1317,13 +1353,13 @@ define i32 @multiple_bb(i32 %x, i32 %y, ptr %divdst, i1 zeroext %store_srem, ptr
13171353
; X64-NEXT: idivl %esi
13181354
; X64-NEXT: movl %eax, (%r9)
13191355
; X64-NEXT: testl %ecx, %ecx
1320-
; X64-NEXT: je .LBB11_2
1356+
; X64-NEXT: je .LBB12_2
13211357
; X64-NEXT: # %bb.1: # %do_srem
13221358
; X64-NEXT: movl %eax, %ecx
13231359
; X64-NEXT: imull %esi, %ecx
13241360
; X64-NEXT: subl %ecx, %edi
13251361
; X64-NEXT: movl %edi, (%r8)
1326-
; X64-NEXT: .LBB11_2: # %end
1362+
; X64-NEXT: .LBB12_2: # %end
13271363
; X64-NEXT: retq
13281364
%div = sdiv i32 %x, %y
13291365
store i32 %div, ptr %divdst, align 4

0 commit comments

Comments
 (0)