add a note

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122559 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2010-12-26 03:53:31 +00:00
parent 7ab3cc32d6
commit 8a4893e013

View 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.