search for: innerloopvectorizer

Displaying 20 results from an estimated 41 matches for "innerloopvectorizer".

2012 Dec 21
0
[LLVMdev] assert in InnerLoopVectorizer::createEmptyLoop
I am seeing an assert when I run this command: $ clang -fno-strict-aliasing -target mips64el-unknown-linux -O3 -fomit-frame-pointer -S oggenc.i -o oggenc.ll -emit-llvm It asserts when LoopVectorize.cpp:506 is executed. It looks like it is complaining because it is trying to zero-extend an i64 (type Count->getType() returns i64) to an i32 (IdxTy). if (Count->getType() != IdxTy) { //
2012 Dec 21
0
[LLVMdev] assert in InnerLoopVectorizer::createEmptyLoop
Please file a bug for these types of issues. On Fri, Dec 21, 2012 at 1:49 PM, Akira Hatanaka <ahatanak at gmail.com> wrote: > I am seeing an assert when I compile the attached program with clang: > > $ clang -fno-strict-aliasing -target mips64el-unknown-linux -O3 > -fomit-frame-pointer -S test1.c -o test1.ll -emit-llvm > > > It asserts when LoopVectorize.cpp:506 is
2012 Dec 21
2
[LLVMdev] assert in InnerLoopVectorizer::createEmptyLoop
I am seeing an assert when I compile the attached program with clang: $ clang -fno-strict-aliasing -target mips64el-unknown-linux -O3 -fomit-frame-pointer -S test1.c -o test1.ll -emit-llvm It asserts when LoopVectorize.cpp:506 is executed. It looks like it is complaining because it is trying to zero-extend an i64 (type Count->getType() returns i64) to an i32 (IdxTy). if (Count->getType()
2019 Feb 18
4
RFC: changing variable naming rules in LLVM codebase
On 2/18/2019 4:15 AM, Michael Platings via llvm-dev wrote: > Taking my previous example [1]: > > InnerLoopVectorizer LB(L, PSE, LI, DT, TLI, TTI, AC, ORE, VF.Width, IC, > &LVL, &CM); > > If we imagine that over time it evolves such that 50% of the variables have been renamed to camelBack versions of the type names, then it will look like this: > > InnerLoopVectorizer LB(loop, PSE, loop...
2016 Aug 01
2
LLVM Loop vectorizer - 2 vector.body blocks appear
...is responsible for the vector add of a number of vector elements multiple of VF * UF. There are 2 epilogues which makes things a bit strange - I am still trying to understand the code. Is it possible to explain to me where in LoopVectorize.cpp are created 2 vector.body blocks? I know that InnerLoopVectorizer::vectorize() calls InnerLoopVectorizer::createEmptyLoop() which creates the blocks required for vectorization, but I have difficulties to follow the classes instantiations. I ask because in fact, I would prefer having only one "vector.body" block for the above C program, as it was...
2017 Mar 14
4
[Proposal][RFC] Epilog loop vectorization
...n Mar 14, 2017, at 6:00 AM, Nema, Ashutosh <Ashutosh.Nema at amd.com >>>> <mailto:Ashutosh.Nema at amd.com>> wrote: >>>> >>>> Summarizing the discussion on the implementation approaches. >>>> Discussed about two approaches, first running ‘InnerLoopVectorizer’ >>>> again on the epilog loop immediately after vectorizing the original >>>> loop within the same vectorization pass, the second approach where >>>> re-running vectorization pass and limiting vectorization factor of >>>> epilog loop by metadata....
2017 Mar 14
10
[Proposal][RFC] Epilog loop vectorization
Summarizing the discussion on the implementation approaches. Discussed about two approaches, first running ‘InnerLoopVectorizer’ again on the epilog loop immediately after vectorizing the original loop within the same vectorization pass, the second approach where re-running vectorization pass and limiting vectorization factor of epilog loop by metadata. <Approach-2> Challenges with re-running the vectorizer pass: 1)...
2019 Feb 15
4
RFC: changing variable naming rules in LLVM codebase
On Mon, 11 Feb 2019 at 23:20, Philip Reames via llvm-dev <llvm-dev at lists.llvm.org> wrote: > > I don't care about the convention, but I'm really not sure it's worth the churn which would result in the code base. The hurtle which needs cleared here is not "is it a better naming style", but "is the disruption implied by changing to the new convention
2017 Mar 14
2
[Proposal][RFC] Epilog loop vectorization
...dam Nemet wrote: > >> On Mar 14, 2017, at 6:00 AM, Nema, Ashutosh <Ashutosh.Nema at amd.com >> <mailto:Ashutosh.Nema at amd.com>> wrote: >> >> Summarizing the discussion on the implementation approaches. >> Discussed about two approaches, first running ‘InnerLoopVectorizer’ >> again on the epilog loop immediately after vectorizing the original >> loop within the same vectorization pass, the second approach where >> re-running vectorization pass and limiting vectorization factor of >> epilog loop by metadata. >> <Approach-2> &gt...
2017 Mar 14
2
[Proposal][RFC] Epilog loop vectorization
...ave that limit, however, is that we don't model the costs of the checks. Not that the cost model is otherwise too inaccurate for low-trip-count loops. If we modeled the costs of the checks, then I don't think this would be a problem. > > 3) Technically speaking, constructing a new InnerLoopVectorizer to > vectorize this one loop sounds weird. We already have a worklist in > the vectorizer that's currently running. I agree, although we do want to reuse the cost and legality analysis (which I think is a worthwhile engineering decision because that analysis involves SCEV, AA, and TT...
2016 Feb 19
12
[3.8 Release] Release status
According to the schedule (e.g. on the right on llvm.org), we should have tagged the release by now, but we haven't, so we're officially behind schedule. I'm still optimistic that we can wrap this up pretty soon, though. This is what's blocking us: - PR26509: Crash in InnerLoopVectorizer::vectorizeLoop() I'm waiting to hear what Cong comes up with, otherwise we can revert r255691 on the branch - Shrink-wrapping vs TLS: Davide and Quentin are working on it - PR26600: Loop vectorization creates an unsafe out-of-bounds load There's a patch out: http://reviews.llvm.org/D1...
2017 Mar 15
4
[Proposal][RFC] Epilog loop vectorization
...t;>> <Ashutosh.Nema at amd.com <mailto:Ashutosh.Nema at amd.com>> wrote: >>>>>> >>>>>> Summarizing the discussion on the implementation approaches. >>>>>> Discussed about two approaches, first running >>>>>> ‘InnerLoopVectorizer’ again on the epilog loop immediately after >>>>>> vectorizing the original loop within the same vectorization pass, >>>>>> the second approach where re-running vectorization pass and >>>>>> limiting vectorization factor of epilog loop by met...
2020 May 17
2
Question about the order of predecessors in LoopVectorizer with VPlanNatviePath
...i64 1, i64 1> ... br i1 %10, label %for.cond.cleanup373, label %for.body10.preheader67 As you can see, %vec.phi has wrong incoming basic blocks. It could be as below. %vec.phi = phi <4 x i64> [ %8, %for.cond.cleanup972 ], [ zeroinitializer, %vector.body ] The problem comes from "InnerLoopVectorizer::fixNonInductionPHIs()". This function has assumption about the order of predecessors as below. // The predecessor order is preserved and we can rely on mapping between // scalar and vector block predecessors. for (unsigned i = 0; i < NumIncomingValues; ++i) { It seems it assu...
2018 Aug 03
2
Vectorizing remainder loop
...ize if things go nice and smooth. If you opt to go with tweaking Ashutosh’s patch, Ashutosh’s patch (https://reviews.llvm.org/D30247 ) is doing what I wrote above within LoopVectorize (thus it can skip many things since data structures are still alive), through createVectorEpilog(), instantiating InnerLoopVectorizer inside InnerLoopVectorizer. That takes care of one remainder loop vectorization step. You need to modify so that it can do more than one step (like using an vector of EpilogLoopInfo). If you struggle in convincing LoopVectorizationLegality to think remainder is just as legal to vectorize as main ve...
2016 Aug 21
2
LoopVectorize module - some possible enhancements
...support in the near future LLVM IR gather and scatter intrinsics (as described at http://llvm.org/docs/LangRef.html#llvm-masked-gather-intrinsics and scatter)? I see you have defined some methods that should use them like: - bool isLegalMaskedGather(Type *DataType); - void InnerLoopVectorizer::vectorizeMemoryInstruction(Instruction *Instr) which defines a bool CreateGatherScatter, etc I gave to clang a simple vector add C program with step/stride 2 with flag "-avx2", but the resulting vector code does NOT use gather nor scatter. - did you try to consider patholo...
2013 Nov 15
4
[LLVMdev] Limit loop vectorizer to SSE
Something like: index 6db7f68..68564cb 100644 --- a/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -1208,6 +1208,8 @@ void InnerLoopVectorizer::vectorizeMemoryInstruction(Instr Type *DataTy = VectorType::get(ScalarDataTy, VF); Value *Ptr = LI ? LI->getPointerOperand() : SI->getPointerOperand(); unsigned Alignment = LI ? LI->getAlignment() : SI->getAlignment(); + if (Alignment == 0) + Alignment = 1; unsigned Add...
2017 Mar 14
1
[Proposal][RFC] Epilog loop vectorization
...p-count check (i.e. speculatively executing them) and these are actually expensive operations? Is this is a cost-model problem being exposed by SimplifyCFG (which is hoisting these things outside of the trip-count check)? -Hal >> >> 3) Technically speaking, constructing a new InnerLoopVectorizer >> to vectorize this one loop sounds weird. We already have a >> worklist in the vectorizer that's currently running. > > I agree, although we do want to reuse the cost and legality > analysis (which I think is a worthwhile engineering decision > beca...
2018 Apr 11
2
Loop vectorizer doesn't try to align vectors on preferred vector alignment
...rs get aligned on 2 bytes. This does not correspond to the preferred alignment for vectors that I specified in the data layout (which is bigger). Inspecting lib/Transforms/Vectorize/LoopVectorizer.cpp, there doesn't seem to be an intent of doing so. I looked at this method in particular: void InnerLoopVectorizer::vectorizeMemoryInstruction Is there a way (that I missed) to make this happen, or would it require a code change ? Or did I miss anything obvious ? Thanks in advance, - Benoit -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm...
2013 Nov 15
0
[LLVMdev] Limit loop vectorizer to SSE
...ber 15, 2013 4:05:53 PM > Subject: Re: [LLVMdev] Limit loop vectorizer to SSE > > > Something like: > > index 6db7f68..68564cb 100644 > --- a/lib/Transforms/Vectorize/LoopVectorize.cpp > +++ b/lib/Transforms/Vectorize/LoopVectorize.cpp > @@ -1208,6 +1208,8 @@ void > InnerLoopVectorizer::vectorizeMemoryInstruction(Instr > Type *DataTy = VectorType::get(ScalarDataTy, VF); > Value *Ptr = LI ? LI->getPointerOperand() : > SI->getPointerOperand(); > unsigned Alignment = LI ? LI->getAlignment() : SI->getAlignment(); > + if (Alignment == 0) > +...
2013 Nov 15
2
[LLVMdev] Limit loop vectorizer to SSE
...: Re: [LLVMdev] Limit loop vectorizer to SSE >> >> >> Something like: >> >> index 6db7f68..68564cb 100644 >> --- a/lib/Transforms/Vectorize/LoopVectorize.cpp >> +++ b/lib/Transforms/Vectorize/LoopVectorize.cpp >> @@ -1208,6 +1208,8 @@ void >> InnerLoopVectorizer::vectorizeMemoryInstruction(Instr >> Type *DataTy = VectorType::get(ScalarDataTy, VF); >> Value *Ptr = LI ? LI->getPointerOperand() : >> SI->getPointerOperand(); >> unsigned Alignment = LI ? LI->getAlignment() : SI->getAlignment(); >> + if (Alignme...