mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-20 14:29:27 +00:00
add note about switch lowering
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30308 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a4646b61e4
commit
08c33011d1
@ -607,6 +607,34 @@ or eax, 2
|
|||||||
cmp eax, 6
|
cmp eax, 6
|
||||||
jz label
|
jz label
|
||||||
|
|
||||||
|
If we aren't going to do this, we should lower the switch better. We compile
|
||||||
|
the code to:
|
||||||
|
|
||||||
|
_f:
|
||||||
|
movl 8(%esp), %eax
|
||||||
|
movl 4(%esp), %ecx
|
||||||
|
cmpl $6, %ecx
|
||||||
|
jl LBB1_4 #entry
|
||||||
|
jmp LBB1_3 #entry
|
||||||
|
LBB1_3: #entry
|
||||||
|
cmpl $6, %ecx
|
||||||
|
je LBB1_1 #bb
|
||||||
|
jmp LBB1_2 #UnifiedReturnBlock
|
||||||
|
LBB1_4: #entry
|
||||||
|
cmpl $4, %ecx
|
||||||
|
jne LBB1_2 #UnifiedReturnBlock
|
||||||
|
LBB1_1: #bb
|
||||||
|
incl %eax
|
||||||
|
ret
|
||||||
|
LBB1_2: #UnifiedReturnBlock
|
||||||
|
ret
|
||||||
|
|
||||||
|
In the code above, the 'if' is turned into a 'switch' at the mid-level. It looks
|
||||||
|
like the 'lower to branches' mode could be improved a little here. In particular,
|
||||||
|
the fall-through to LBB1_3 doesn't need a branch. It would also be nice to
|
||||||
|
eliminate the redundant "cmp 6", maybe by lowering to a linear sequence of
|
||||||
|
compares if there are below a certain number of cases (instead of a binary sequence)?
|
||||||
|
|
||||||
//===---------------------------------------------------------------------===//
|
//===---------------------------------------------------------------------===//
|
||||||
|
|
||||||
Compile:
|
Compile:
|
||||||
@ -675,3 +703,4 @@ _f:
|
|||||||
etc.
|
etc.
|
||||||
|
|
||||||
//===---------------------------------------------------------------------===//
|
//===---------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user