Displaying 9 results from an estimated 9 matches for "recurrencedescriptor".
2018 Mar 29
0
[RFC] I'd like to move RecurrenceDescriptor and LoopDescriptor in LoopUitls.h/.cpp from Transform/Utils tree to Analysis/Utils tree
...oving LoopVectorizationLegality out of LoopVectorize.cpp in order to make it reusable. For example, other transformations can change the behavior depending on whether the loop is vectorizable or not.
Ideally, such analysis type code belongs to Analysis tree. One of the blocking factor is its use of RecurrenceDescriptor/InductionDescriptor, defined in Transform/Utils/LoopUtils.h.
Anything I should know before attempting to move those Descriptors under Analysis/Utils? Like known dependencies making them very hard to move to Analysis tree?
Recurrence and Inductions are again analysis type stuff. They really belong...
2020 May 05
2
Missing vectorization of loop due to load late in the loop
...%sub = add i32 %add, %conv7
%j.1 = add nuw nsw i16 %j.03, 1
%h.1 = load i32, i32* %hp.1, align 1, !tbaa !4
%cmp3 = icmp ult i16 %j.03, 99
br i1 %cmp3, label %inner.body, label %inner.end, !llvm.loop !8
And the vectorizer bails out since the load is placed "late" in the
loop, so
RecurrenceDescriptor::isFirstOrderRecurrence
returns false.
If we just move the load before the definition of %0 in the vectorizer
input, then we instead get
LV: We can vectorize this loop!
Originally the loop had two loads, and then one of them was actually
placed early in the loop block. That was done by instcombi...
2016 Nov 08
2
should we have IR intrinsics for integer min/max?
Thanks, Hal and Matt for the feedback. As usual, my instincts about
canonicalization were probably wrong. :)
I thought that @max1 vs. @max3 would be viewed as an unknowable trade-off
between reducing the dependency chain and the pseudo-canonical min/max
form, so we'd add intrinsics, and defer that decision to the backend.
I'll wait to see if there are any other arguments presented.
2016 May 20
0
Working on FP SCEV Analysis
...ed to check if the PHI is an add-recurrence that was detected by SCEV. The idea is to add a fall-back to analyze the PHI directly if its type is a float.
There is already precedence for such things in LV. We support more reductions (including floating-point) than what SCEV can analyze, therefore RecurrenceDescriptor::AddReductionVar needs to analyze PHIs directly.
Adam
>
> Thanks,
> Hideki
>
> ----------------------
> I looked at what our FORTRAN compiler (non-LLVM) does for the following (x, y, z, and f are float by default typing,
> based on names).
>
> subroutine fo...
2016 May 24
1
Working on FP SCEV Analysis
...> add-recurrence that was detected by SCEV. The idea is to add a fall-back to
> analyze the PHI directly if its type is a float.
>
> There is already precedence for such things in LV. We support more
> reductions (including floating-point) than what SCEV can analyze, therefore
> RecurrenceDescriptor::AddReductionVar needs to analyze PHIs directly.
>
> Adam
>
>
> Thanks,
> Hideki
>
> ----------------------
> I looked at what our FORTRAN compiler (non-LLVM) does for the following (x,
> y, z, and f are float by default typing,
> based on names).
>
> s...
2018 Feb 06
1
6 separate instances of static getPointerOperand(). Time to consolidate?
What LoopVectorize.cpp has are the following. Each function may have to have a separate consolidation discussion.
I'm bringing up getpointerOperand() since I actually found multiple instances defined/used.
DependenceAnalysis.cpp has isLoadOrStore(). LoopAccessAnalysis.cpp has getAddressSpaceOperand().
I'm sure there are others that might be worth discussing within this thread or a follow
2016 May 20
5
Working on FP SCEV Analysis
To the best of my experience, handling case B (secondary induction) is must-have, and if I’m not mistaken,
people aren’t opposed to that.
For me, handling case A (primary induction) is “why not?”, but I certainly admit that that can be very naïve
thinking coming from lack of good understanding on SCEV and their proper usages. Now, let’s assume we
can postpone discussion about case A. What is the
2016 Nov 04
2
[RFC] Supporting ARM's SVE in LLVM
...loops the scalar calls must
only occur for active lanes so we introduce predicated versions of the most
common routines (e.g. `*llvm.pow`). This is mostly transparent to the loop
vectorizer beyond the requirement to pass an extra parameter.
### TTI Interface:
```cpp
bool canReduceInVector(const RecurrenceDescriptor &Desc, bool NoNaN) const;
Value* getReductionIntrinsic(IRBuilder<> &Builder,
const RecurrenceDescriptor& Desc, bool NoNaN,
Value* Src) const;
```
# SelectionDAG Nodes
## *ISD::BUILD_VECTOR* {#isdbuildvector}
`BUILD...
2017 Jan 31
2
RFC: Generic IR reductions
...has a reduction descriptor (obtained from a LoopUtils analysis of the loop's PHIs). If we want to generate from a descriptor:
Value *llvm::createTargetReduction(IRBuilder<> &Builder,
const TargetTransformInfo *TTI,
RecurrenceDescriptor &Desc, Value *Src,
bool InOrder, bool NoNaN)
Or if no descriptor is given, then an alternative API call:
Value *llvm::createTargetReduction(IRBuilder<> &Builder,
const TargetTransformInfo *TTI,...