diff options
author | Evan Cheng <evan.cheng@apple.com> | 2006-01-20 01:11:03 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2006-01-20 01:11:03 +0000 |
commit | 76356d95944ac2f560c0193c5ca314da7998a366 (patch) | |
tree | 6a79db8d3e04ded4b69f2679e62bfd4ee0b9dc19 /lib/Transforms/Utils/ValueMapper.cpp | |
parent | d900c6a8b3de655bac138cfdf4b9a85b7e64ec1c (diff) |
Prevent folding of a node with multiple uses if the node already folds a load!
Here is an example where the load ended up being done twice:
%A = global uint 0
uint %test(uint %B, ubyte %C) {
%tmp = load uint *%A;
%X = shl uint %tmp, ubyte %C
%Cv = sub ubyte 32, %C
%Y = shr uint %B, ubyte %Cv
%Z = or uint %Y, %X
store uint %Z, uint* %A
ret uint %Z
}
==>
subl $4, %esp
movl %ebx, (%esp)
movl 8(%esp), %edx
movl A, %eax
movb 12(%esp), %bl
movb %bl, %cl
shldl %cl, %edx, %eax
movb %bl, %cl
shldl %cl, %edx, A
movl (%esp), %ebx
addl $4, %esp
ret
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25471 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/ValueMapper.cpp')
0 files changed, 0 insertions, 0 deletions