add a note noticed through source inspection

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30418 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2006-09-16 23:57:51 +00:00
parent 8829dc88a8
commit 7ed96abc09

View File

@ -198,11 +198,11 @@ Scalar Repl cannot currently promote this testcase to 'ret long cst':
%struct.Y = type { %struct.X }
ulong %bar() {
%retval = alloca %struct.Y, align 8 ; <%struct.Y*> [#uses=3]
%tmp12 = getelementptr %struct.Y* %retval, int 0, uint 0, uint 0 ; <int*> [#uses=1]
%tmp12 = getelementptr %struct.Y* %retval, int 0, uint 0, uint 0
store int 0, int* %tmp12
%tmp15 = getelementptr %struct.Y* %retval, int 0, uint 0, uint 1 ; <int*> [#uses=1]
%tmp15 = getelementptr %struct.Y* %retval, int 0, uint 0, uint 1
store int 1, int* %tmp15
%retval = cast %struct.Y* %retval to ulong* ; <ulong*> [#uses=1]
%retval = cast %struct.Y* %retval to ulong*
%retval = load ulong* %retval ; <ulong> [#uses=1]
ret ulong %retval
}
@ -247,3 +247,30 @@ Legalize should lower ctlz like this:
on targets that have popcnt but not ctlz. itanium, what else?
//===---------------------------------------------------------------------===//
quantum_sigma_x in 462.libquantum contains the following loop:
for(i=0; i<reg->size; i++)
{
/* Flip the target bit of each basis state */
reg->node[i].state ^= ((MAX_UNSIGNED) 1 << target);
}
Where MAX_UNSIGNED/state is a 64-bit int. On a 32-bit platform it would be just
so cool to turn it into something like:
if (target < 32) {
for(i=0; i<reg->size; i++)
reg->node[i].state ^= ((int) (1 << target));
} else {
for(i=0; i<reg->size; i++)
reg->node[i].state ^= (long long)((int) (1 << (target-32))) << 32;
}
... which would only do one 32-bit XOR per loop iteration instead of two.
It would also be nice to recognize the reg->size doesn't alias reg->node[i], but
alas...
//===---------------------------------------------------------------------===//