From ad1dafb2c3ba44beab20619e788ed64f5da80513 Mon Sep 17 00:00:00 2001 From: Silviu Baranga Date: Fri, 19 Feb 2016 15:46:10 +0000 Subject: [LV] Fix PR26600: avoid out of bounds loads for interleaved access vectorization Summary: If we don't have the first and last access of an interleaved load group, the first and last wide load in the loop can do an out of bounds access. Even though we discard results from speculative loads, this can cause problems, since it can technically generate page faults (or worse). We now discard interleaved load groups that don't have the first and load in the group. Reviewers: hfinkel, rengolin Subscribers: rengolin, llvm-commits, mzolotukhin, anemet Differential Revision: http://reviews.llvm.org/D17332 llvm-svn: 261331 --- llvm/test/Transforms/LoopVectorize/interleaved-accesses.ll | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'llvm/test/Transforms/LoopVectorize/interleaved-accesses.ll') diff --git a/llvm/test/Transforms/LoopVectorize/interleaved-accesses.ll b/llvm/test/Transforms/LoopVectorize/interleaved-accesses.ll index d7237a5c27d..54ce3e29293 100644 --- a/llvm/test/Transforms/LoopVectorize/interleaved-accesses.ll +++ b/llvm/test/Transforms/LoopVectorize/interleaved-accesses.ll @@ -292,10 +292,8 @@ for.body: ; preds = %for.body, %entry ; } ; CHECK-LABEL: @even_load( -; CHECK: %wide.vec = load <8 x i32>, <8 x i32>* %{{.*}}, align 4 -; CHECK: %strided.vec = shufflevector <8 x i32> %wide.vec, <8 x i32> undef, <4 x i32> -; CHECK-NOT: shufflevector <8 x i32> %wide.vec, <8 x i32> undef, <4 x i32> -; CHECK: shl nsw <4 x i32> %strided.vec, +; CHECK-NOT: %wide.vec = load <8 x i32>, <8 x i32>* %{{.*}}, align 4 +; CHECK-NOT: %strided.vec = shufflevector <8 x i32> %wide.vec, <8 x i32> undef, <4 x i32> define void @even_load(i32* noalias nocapture readonly %A, i32* noalias nocapture %B) { entry: -- cgit v1.2.3