mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-07 14:33:15 +00:00
Note switch-lowering inefficiency.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107565 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
68b559e5f3
commit
b4a74c1d82
@ -1888,3 +1888,39 @@ of the ADD, and replacing the ADD with the ADDE, should give the desired result.
|
|||||||
(That said, we are doing a lot better than gcc on this testcase. :) )
|
(That said, we are doing a lot better than gcc on this testcase. :) )
|
||||||
|
|
||||||
//===---------------------------------------------------------------------===//
|
//===---------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
Switch lowering generates less than ideal code for the following switch:
|
||||||
|
define void @a(i32 %x) nounwind {
|
||||||
|
entry:
|
||||||
|
switch i32 %x, label %if.end [
|
||||||
|
i32 0, label %if.then
|
||||||
|
i32 1, label %if.then
|
||||||
|
i32 2, label %if.then
|
||||||
|
i32 3, label %if.then
|
||||||
|
i32 5, label %if.then
|
||||||
|
]
|
||||||
|
if.then:
|
||||||
|
tail call void @foo() nounwind
|
||||||
|
ret void
|
||||||
|
if.end:
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
declare void @foo()
|
||||||
|
|
||||||
|
Generated code on x86-64 (other platforms give similar results):
|
||||||
|
a:
|
||||||
|
cmpl $5, %edi
|
||||||
|
ja .LBB0_2
|
||||||
|
movl %edi, %eax
|
||||||
|
movl $47, %ecx
|
||||||
|
btq %rax, %rcx
|
||||||
|
jb .LBB0_3
|
||||||
|
.LBB0_2:
|
||||||
|
ret
|
||||||
|
.LBB0_3:
|
||||||
|
xorb %al, %al
|
||||||
|
jmp foo@PLT # TAILCALL
|
||||||
|
|
||||||
|
The movl+movl+btq+jb could be simplified to a cmpl+jne.
|
||||||
|
|
||||||
|
//===---------------------------------------------------------------------===//
|
||||||
|
Loading…
x
Reference in New Issue
Block a user