diff options
Diffstat (limited to 'lib/Target/X86/README.txt')
-rw-r--r-- | lib/Target/X86/README.txt | 34 |
1 files changed, 1 insertions, 33 deletions
diff --git a/lib/Target/X86/README.txt b/lib/Target/X86/README.txt index b407955..f9c1d35 100644 --- a/lib/Target/X86/README.txt +++ b/lib/Target/X86/README.txt @@ -56,7 +56,7 @@ cmovs, we should expand to a conditional branch like GCC produces. Some isel ideas: -1. Dynamic programming based approach when compile time if not an +1. Dynamic programming based approach when compile time is not an issue. 2. Code duplication (addressing mode) during isel. 3. Other ideas from "Register-Sensitive Selection, Duplication, and @@ -2060,35 +2060,3 @@ Instead we could generate: The trick is to match "fetch_and_add(X, -C) == C". //===---------------------------------------------------------------------===// - -unsigned log2(unsigned x) { - return x > 1 ? 32-__builtin_clz(x-1) : 0; -} - -generates (x86_64): - xorl %eax, %eax - cmpl $2, %edi - jb LBB0_2 -## BB#1: - decl %edi - movl $63, %ecx - bsrl %edi, %eax - cmovel %ecx, %eax - xorl $-32, %eax - addl $33, %eax -LBB0_2: - ret - -The cmov and the early test are redundant: - xorl %eax, %eax - cmpl $2, %edi - jb LBB0_2 -## BB#1: - decl %edi - bsrl %edi, %eax - xorl $-32, %eax - addl $33, %eax -LBB0_2: - ret - -//===---------------------------------------------------------------------===// |