[LLVMbugs] [Bug 23997] New: LoopVectorizer dropping inbounds from GEPs
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Tue Jun 30 15:02:00 PDT 2015
https://llvm.org/bugs/show_bug.cgi?id=23997
Bug ID: 23997
Summary: LoopVectorizer dropping inbounds from GEPs
Product: libraries
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P
Component: Loop Optimizer
Assignee: unassignedbugs at nondot.org
Reporter: listmail at philipreames.com
CC: llvmbugs at cs.uiuc.edu
Classification: Unclassified
I've noticed that the LoopVectorizer seems to not mark the GEPs it generates as
inbounds, even when the original GEPs being replaced are in bounds.
Specifically, this can be reproduced with just about any vectorizable loop
which contains either a load or store to a loop variant location derived from a
pointer typed induction variable. Consider:
define void @test2(i8* %base, i8* %end) {
entry:
br label %loop
loop:
%p = phi i8* [%base, %entry], [%next, %loop]
store i8 0, i8* %p
%next = getelementptr inbounds i8, i8* %p, i64 1
%cmp = icmp slt i8* %p, %end
br i1 %cmp, label %loop, label %exit
exit:
ret void
}
The generated code for vector.body is:
vector.body
%index = phi i64 [ %index.next, %vector.body ], [ 0, %overflow.checked ]
%next.gep = getelementptr i8, i8* %base, i64 %index ;;<-- KEY LINE
%4 = bitcast i8* %next.gep to <4 x i8>*
store <4 x i8> zeroinitializer, <4 x i8>* %4, align 1
%index.next = add i64 %index, 4
%5 = icmp eq i64 %index.next, %n.vec
br i1 %5, label %middle.block, label %vector.body, !llvm.loop !5
Interestingly, using a integer induction variable for this loop and then
deriving p off of that on every iteration does end up with the new phis having
inbounds.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20150630/90d2aa2a/attachment.html>
More information about the llvm-bugs
mailing list