Another high-prio selection performance bug
authorChris Lattner <sabre@nondot.org>
Tue, 31 Jan 2006 02:10:06 +0000 (02:10 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 31 Jan 2006 02:10:06 +0000 (02:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25828 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/README.txt

index b0b17da0e99fe5cb7d2d7f28028506f00ba71e8f..40d9dbbf20d5cf81c35b21e206b26fa583e1c7ae 100644 (file)
@@ -314,3 +314,49 @@ _cmp:
 
 Think about doing i64 math in SSE regs.
 
+//===---------------------------------------------------------------------===//
+
+The DAG Isel doesn't fold the loads into the adds in this testcase.  The
+pattern selector does.  This is because the chain value of the load gets 
+selected first, and the loads aren't checking to see if they are only used by
+and add.
+
+.ll:
+
+int %test(int* %x, int* %y, int* %z) {
+        %X = load int* %x
+        %Y = load int* %y
+        %Z = load int* %z
+        %a = add int %X, %Y
+        %b = add int %a, %Z
+        ret int %b
+}
+
+dag isel:
+
+_test:
+        movl 4(%esp), %eax
+        movl (%eax), %eax
+        movl 8(%esp), %ecx
+        movl (%ecx), %ecx
+        addl %ecx, %eax
+        movl 12(%esp), %ecx
+        movl (%ecx), %ecx
+        addl %ecx, %eax
+        ret
+
+pattern isel:
+
+_test:
+        movl 12(%esp), %ecx
+        movl 4(%esp), %edx
+        movl 8(%esp), %eax
+        movl (%eax), %eax
+        addl (%edx), %eax
+        addl (%ecx), %eax
+        ret
+
+This is bad for register pressure, though the dag isel is producing a 
+better schedule. :)
+
+