Note switch-lowering inefficiency.
authorEli Friedman <eli.friedman@gmail.com>
Sat, 3 Jul 2010 07:38:12 +0000 (07:38 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Sat, 3 Jul 2010 07:38:12 +0000 (07:38 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107565 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/README.txt

index b1080b594ff1cd100e1219f23c44f490208cd4d9..8f785393fd04e388591b355c6727445358306115 100644 (file)
@@ -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. :) )
 
 //===---------------------------------------------------------------------===//
+
+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.
+
+//===---------------------------------------------------------------------===//