diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2012-10-05 01:29:09 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2012-10-05 01:29:09 +0000 |
commit | fca3f4021ae9a561edb6d2fcb4a282b6f25ab144 (patch) | |
tree | 76579662ad00a378c1ea6f564bc2239ac7afa0ef /test/Transforms | |
parent | 0e9da58af0e480af2fa87f8a61aa28b465fec280 (diff) | |
download | llvm-fca3f4021ae9a561edb6d2fcb4a282b6f25ab144.tar.gz llvm-fca3f4021ae9a561edb6d2fcb4a282b6f25ab144.tar.bz2 llvm-fca3f4021ae9a561edb6d2fcb4a282b6f25ab144.tar.xz |
Teach the new SROA a new trick. Now we zap any memcpy or memmoves which
are in fact identity operations. We detect these and kill their
partitions so that even splitting is unaffected by them. This is
particularly important because Clang relies on emitting identity memcpy
operations for struct copies, and these fold away to constants very
often after inlining.
Fixes the last big performance FIXME I have on my plate.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165285 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms')
-rw-r--r-- | test/Transforms/SROA/basictest.ll | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/test/Transforms/SROA/basictest.ll b/test/Transforms/SROA/basictest.ll index a58eb4786c..3089736de8 100644 --- a/test/Transforms/SROA/basictest.ll +++ b/test/Transforms/SROA/basictest.ll @@ -862,8 +862,7 @@ define void @PR13916.1() { ; Ensure that we handle overlapping memcpy intrinsics correctly, especially in ; the case where there is a directly identical value for both source and dest. ; CHECK: @PR13916.1 -; FIXME: We shouldn't leave this alloca around. -; CHECK: alloca +; CHECK-NOT: alloca ; CHECK: ret void entry: @@ -878,8 +877,7 @@ define void @PR13916.2() { ; different pointer value chains, but during rewriting we coalesce them into the ; same value. ; CHECK: @PR13916.2 -; FIXME: We shouldn't leave this alloca around. -; CHECK: alloca +; CHECK-NOT: alloca ; CHECK: ret void entry: |