diff options
author | Alexey Bataev <a.bataev@outlook.com> | 2021-09-22 08:08:40 -0700 |
---|---|---|
committer | Tom Stellard <tstellar@redhat.com> | 2021-11-10 09:50:50 -0800 |
commit | 93edfb23b18b50c9356c1e99903e077095b66b59 (patch) | |
tree | f7f1092606c1e8aa806dd2030098d739f919861b | |
parent | 162f3f18c9454f93b71451f2792f348928c84a2f (diff) | |
download | llvm-93edfb23b18b50c9356c1e99903e077095b66b59.zip llvm-93edfb23b18b50c9356c1e99903e077095b66b59.tar.gz llvm-93edfb23b18b50c9356c1e99903e077095b66b59.tar.bz2 |
[SLP][NFC]Add a test to show an issue with incorrectly extracted
pointers.
(cherry picked from commit 173dd896db976d1e975a2a5d844fc09238884277)
-rw-r--r-- | llvm/test/Transforms/SLPVectorizer/X86/extract_in_tree_user.ll | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/llvm/test/Transforms/SLPVectorizer/X86/extract_in_tree_user.ll b/llvm/test/Transforms/SLPVectorizer/X86/extract_in_tree_user.ll index efbdb14..2348b5a 100644 --- a/llvm/test/Transforms/SLPVectorizer/X86/extract_in_tree_user.ll +++ b/llvm/test/Transforms/SLPVectorizer/X86/extract_in_tree_user.ll @@ -32,7 +32,6 @@ entry: ret i32 undef } - declare float @llvm.powi.f32.i32(float, i32) define void @fn2(i32* %a, i32* %b, float* %c) { ; CHECK-LABEL: @fn2( @@ -99,3 +98,37 @@ entry: ret void } + +define void @externally_used_ptrs() { +; CHECK-LABEL: @externally_used_ptrs( +; CHECK-NEXT: entry: +; CHECK-NEXT: [[TMP0:%.*]] = load i64*, i64** @a, align 8 +; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x i64*> poison, i64* [[TMP0]], i32 0 +; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x i64*> [[TMP1]], i64* [[TMP0]], i32 1 +; CHECK-NEXT: [[TMP3:%.*]] = getelementptr i64, <2 x i64*> [[TMP2]], <2 x i64> <i64 56, i64 11> +; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint <2 x i64*> [[TMP3]] to <2 x i64> +; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds i64, i64* [[TMP0]], i64 12 +; CHECK-NEXT: [[TMP5:%.*]] = extractelement <2 x i64*> [[TMP3]], i32 0 +; CHECK-NEXT: [[TMP6:%.*]] = bitcast i64* [[TMP5]] to <2 x i64>* +; CHECK-NEXT: [[TMP7:%.*]] = load <2 x i64>, <2 x i64>* [[TMP6]], align 8 +; CHECK-NEXT: [[TMP8:%.*]] = extractelement <2 x i64*> [[TMP3]], i32 1 +; CHECK-NEXT: [[TMP9:%.*]] = add <2 x i64> [[TMP4]], [[TMP7]] +; CHECK-NEXT: [[TMP10:%.*]] = bitcast i64* [[TMP5]] to <2 x i64>* +; CHECK-NEXT: store <2 x i64> [[TMP9]], <2 x i64>* [[TMP10]], align 8 +; CHECK-NEXT: ret void +; +entry: + %0 = load i64*, i64** @a, align 8 + %add.ptr = getelementptr inbounds i64, i64* %0, i64 11 + %1 = ptrtoint i64* %add.ptr to i64 + %add.ptr1 = getelementptr inbounds i64, i64* %0, i64 56 + %2 = ptrtoint i64* %add.ptr1 to i64 + %arrayidx2 = getelementptr inbounds i64, i64* %0, i64 12 + %3 = load i64, i64* %arrayidx2, align 8 + %4 = load i64, i64* %add.ptr, align 8 + %5 = add i64 %1, %3 + %6 = add i64 %2, %4 + store i64 %6, i64* %add.ptr, align 8 + store i64 %5, i64* %arrayidx2, align 8 + ret void +} |