add a note
authorChris Lattner <sabre@nondot.org>
Sun, 26 Dec 2010 03:53:31 +0000 (03:53 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 26 Dec 2010 03:53:31 +0000 (03:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122559 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/README.txt

index d199a3712d53fdad4739e7ccb6a67f5599d92ad1..6b83d47bced974064babc74cc831e1ac12fc76e3 100644 (file)
@@ -96,6 +96,97 @@ It appears icc use push for parameter passing. Need to investigate.
 
 //===---------------------------------------------------------------------===//
 
+This:
+
+void foo(void);
+void bar(int x, int *P) { 
+  x >>= 2;
+  if (x) 
+    foo();
+  *P = x;
+}
+
+compiles into:
+
+       movq    %rsi, %rbx
+       movl    %edi, %r14d
+       sarl    $2, %r14d
+       testl   %r14d, %r14d
+       je      LBB0_2
+
+Instead of doing an explicit test, we can use the flags off the sar.  This
+occurs in a bigger testcase like this, which is pretty common:
+
+#include <vector>
+
+
+int test1(std::vector<int> &X) {
+  int Sum = 0;
+  for (long i = 0, e = X.size(); i != e; ++i)
+    X[i] = 0;
+  return Sum;
+}
+compiles into:
+
+       movq    %rsi, %rbx
+       movl    %edi, %r14d
+       sarl    $2, %r14d
+       testl   %r14d, %r14d
+       je      LBB0_2
+
+Instead of doing an explicit test, we can use the flags off the sar.  This
+occurs in a bigger testcase like this, which is pretty common:
+
+#include <vector>
+
+
+int test1(std::vector<int> &X) {
+  int Sum = 0;
+  for (long i = 0, e = X.size(); i != e; ++i)
+    X[i] = 0;
+  return Sum;
+}
+compiles into:
+
+       movq    %rsi, %rbx
+       movl    %edi, %r14d
+       sarl    $2, %r14d
+       testl   %r14d, %r14d
+       je      LBB0_2
+
+Instead of doing an explicit test, we can use the flags off the sar.  This
+occurs in a bigger testcase like this, which is pretty common:
+
+#include <vector>
+
+
+int test1(std::vector<int> &X) {
+  int Sum = 0;
+  for (long i = 0, e = X.size(); i != e; ++i)
+    X[i] = 0;
+  return Sum;
+}
+compiles into:
+
+       movq    %rsi, %rbx
+       movl    %edi, %r14d
+       sarl    $2, %r14d
+       testl   %r14d, %r14d
+       je      LBB0_2
+
+Instead of doing an explicit test, we can use the flags off the sar.  This
+occurs in a bigger testcase like this, which is pretty common in bootstrap:
+
+#include <vector>
+int test1(std::vector<int> &X) {
+  int Sum = 0;
+  for (long i = 0, e = X.size(); i != e; ++i)
+    X[i] = 0;
+  return Sum;
+}
+
+//===---------------------------------------------------------------------===//
+
 Only use inc/neg/not instructions on processors where they are faster than
 add/sub/xor.  They are slower on the P4 due to only updating some processor
 flags.