Changes in directory llvm/lib/Target/X86:
README.txt updated: 1.132 -> 1.133 --- Log message: add note about switch lowering --- Diffs of the changes: (+29 -0) README.txt | 29 +++++++++++++++++++++++++++++ 1 files changed, 29 insertions(+) Index: llvm/lib/Target/X86/README.txt diff -u llvm/lib/Target/X86/README.txt:1.132 llvm/lib/Target/X86/README.txt:1.133 --- llvm/lib/Target/X86/README.txt:1.132 Tue Sep 12 23:19:50 2006 +++ llvm/lib/Target/X86/README.txt Wed Sep 13 18:37:16 2006 @@ -607,6 +607,34 @@ 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 @@ etc. //===---------------------------------------------------------------------===// + _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits