summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2016-11-16 14:54:34 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2016-11-16 14:54:34 +0000
commit79416ea76a50ad7e1892951ea3f04220381ffadb (patch)
tree9a6c7c10648988c3df3f38a31dabc9682ada980b /llvm
parentc2b49f5abb2973dd18180a36b8c3d25377ee55a4 (diff)
downloadbcm5719-llvm-79416ea76a50ad7e1892951ea3f04220381ffadb.tar.gz
bcm5719-llvm-79416ea76a50ad7e1892951ea3f04220381ffadb.zip
[X86] Add integer division test for PR23590
Shows missed opportunity to recognise reduced integer division result size llvm-svn: 287110
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/CodeGen/X86/divide-by-constant.ll41
1 files changed, 41 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/divide-by-constant.ll b/llvm/test/CodeGen/X86/divide-by-constant.ll
index 431f3672910..ee53dd3233d 100644
--- a/llvm/test/CodeGen/X86/divide-by-constant.ll
+++ b/llvm/test/CodeGen/X86/divide-by-constant.ll
@@ -295,3 +295,44 @@ entry:
%div = udiv i32 %x, 33
ret i32 %div
}
+
+define i64 @PR23590(i64 %x) nounwind {
+; X32-LABEL: PR23590:
+; X32: # BB#0: # %entry
+; X32-NEXT: subl $12, %esp
+; X32-NEXT: pushl $0
+; X32-NEXT: pushl $12345 # imm = 0x3039
+; X32-NEXT: pushl {{[0-9]+}}(%esp)
+; X32-NEXT: pushl {{[0-9]+}}(%esp)
+; X32-NEXT: calll __umoddi3
+; X32-NEXT: addl $16, %esp
+; X32-NEXT: pushl $0
+; X32-NEXT: pushl $7
+; X32-NEXT: pushl %edx
+; X32-NEXT: pushl %eax
+; X32-NEXT: calll __udivdi3
+; X32-NEXT: addl $28, %esp
+; X32-NEXT: retl
+;
+; X64-LABEL: PR23590:
+; X64: # BB#0: # %entry
+; X64-NEXT: movq %rdi, %rcx
+; X64-NEXT: movabsq $6120523590596543007, %rdx # imm = 0x54F077C718E7C21F
+; X64-NEXT: movq %rcx, %rax
+; X64-NEXT: mulq %rdx
+; X64-NEXT: shrq $12, %rdx
+; X64-NEXT: imulq $12345, %rdx, %rax # imm = 0x3039
+; X64-NEXT: subq %rax, %rcx
+; X64-NEXT: movabsq $2635249153387078803, %rdx # imm = 0x2492492492492493
+; X64-NEXT: movq %rcx, %rax
+; X64-NEXT: mulq %rdx
+; X64-NEXT: subq %rdx, %rcx
+; X64-NEXT: shrq %rcx
+; X64-NEXT: leaq (%rcx,%rdx), %rax
+; X64-NEXT: shrq $2, %rax
+; X64-NEXT: retq
+entry:
+ %rem = urem i64 %x, 12345
+ %div = udiv i64 %rem, 7
+ ret i64 %div
+}
OpenPOWER on IntegriCloud