mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-18 14:31: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
|
||||
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:
|
||||
@ -675,3 +703,4 @@ _f:
|
||||
etc.
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user