mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
add a note
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118806 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2ff9e83a82
commit
af510f16ec
@ -1984,3 +1984,31 @@ void check_c28 () {
|
||||
}
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
We compile this:
|
||||
|
||||
int foo(int a) { return (a & (~15)) / 16; }
|
||||
|
||||
Into:
|
||||
|
||||
define i32 @foo(i32 %a) nounwind readnone ssp {
|
||||
entry:
|
||||
%and = and i32 %a, -16
|
||||
%div = sdiv i32 %and, 16
|
||||
ret i32 %div
|
||||
}
|
||||
|
||||
but this code (X & -A)/A is X >> log2(A) when A is a power of 2, so this case
|
||||
should be instcombined into just "a >> 4".
|
||||
|
||||
We do get this at the codegen level, so something knows about it, but
|
||||
instcombine should catch it earlier:
|
||||
|
||||
_foo: ## @foo
|
||||
## BB#0: ## %entry
|
||||
movl %edi, %eax
|
||||
sarl $4, %eax
|
||||
ret
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user