From 9b108a338d544a6baf2ff087055326e301e6815d Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Sun, 30 Jan 2011 16:38:43 +0000 Subject: Teach DAGCombine to fold fold (sra (trunc (sr x, c1)), c2) -> (trunc (sra x, c1+c2) when c1 equals the amount of bits that are truncated off. This happens all the time when a smul is promoted to a larger type. On x86-64 we now compile "int test(int x) { return x/10; }" into movslq %edi, %rax imulq $1717986919, %rax, %rax movq %rax, %rcx shrq $63, %rcx sarq $34, %rax <- used to be "shrq $32, %rax; sarl $2, %eax" addl %ecx, %eax This fires 96 times in gcc.c on x86-64. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124559 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/README.txt | 21 --------------------- 1 file changed, 21 deletions(-) (limited to 'lib/Target/README.txt') diff --git a/lib/Target/README.txt b/lib/Target/README.txt index 8b5c5ce137..c0a2b760de 100644 --- a/lib/Target/README.txt +++ b/lib/Target/README.txt @@ -2274,24 +2274,3 @@ llc time when it gets inlined, because we can use smaller transfers. This also avoids partial register stalls in some important cases. //===---------------------------------------------------------------------===// - -We miss an optzn when lowering divide by some constants. For example: - int test(int x) { return x/10; } - -We produce: - -_test: ## @test -## BB#0: ## %entry - movslq %edi, %rax - imulq $1717986919, %rax, %rax ## imm = 0x66666667 - movq %rax, %rcx - shrq $63, %rcx -** shrq $32, %rax -** sarl $2, %eax - addl %ecx, %eax - ret - -The two starred instructions could be replaced with a "sarl $34, %rax". This -occurs in 186.crafty very frequently. - -//===---------------------------------------------------------------------===// -- cgit v1.2.3-18-g5258