diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2013-10-02 19:06:06 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2013-10-02 19:06:06 +0000 |
commit | 6623d050c6f4351293bc1849e49bc0e37ec04596 (patch) | |
tree | 27f1df1c7969ea9c8a8bf938c35ece66eb9443ff /test/Transforms | |
parent | f18815607a93f2b9d498aad4c8e13d1265e204ef (diff) | |
download | external_llvm-6623d050c6f4351293bc1849e49bc0e37ec04596.zip external_llvm-6623d050c6f4351293bc1849e49bc0e37ec04596.tar.gz external_llvm-6623d050c6f4351293bc1849e49bc0e37ec04596.tar.bz2 |
SLPVectorizer: Make store chain finding more aggressive with GetUnderlyingObject.
This recursively strips all GEPs like the existing code. It also handles bitcasts and
other operations that do not change the pointer value.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191847 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms')
-rw-r--r-- | test/Transforms/SLPVectorizer/X86/simplebb.ll | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/test/Transforms/SLPVectorizer/X86/simplebb.ll b/test/Transforms/SLPVectorizer/X86/simplebb.ll index cd0b99e..0b76bec 100644 --- a/test/Transforms/SLPVectorizer/X86/simplebb.ll +++ b/test/Transforms/SLPVectorizer/X86/simplebb.ll @@ -23,3 +23,24 @@ entry: ret void } +; Simple 3-pair chain with loads and stores, obfuscated with bitcasts +; CHECK: test2 +; CHECK: store <2 x double> +; CHECK: ret +define void @test2(double* %a, double* %b, i8* %e) { +entry: + %i0 = load double* %a, align 8 + %i1 = load double* %b, align 8 + %mul = fmul double %i0, %i1 + %arrayidx3 = getelementptr inbounds double* %a, i64 1 + %i3 = load double* %arrayidx3, align 8 + %arrayidx4 = getelementptr inbounds double* %b, i64 1 + %i4 = load double* %arrayidx4, align 8 + %mul5 = fmul double %i3, %i4 + %c = bitcast i8* %e to double* + store double %mul, double* %c, align 8 + %carrayidx5 = getelementptr inbounds i8* %e, i64 8 + %arrayidx5 = bitcast i8* %carrayidx5 to double* + store double %mul5, double* %arrayidx5, align 8 + ret void +} |