Displaying 20 results from an estimated 1000 matches similar to: "[LLVMdev] About Scalar Evolution Pass and SCEVAddRecExpr"
2012 Apr 25
0
[LLVMdev] About Scalar Evolution Pass and SCEVAddRecExpr
Hi,
You may try function "getSCEVAtScope" of the ScalarEvolution analysis:
/// getSCEVAtScope - Return a SCEV expression for the specified value
/// at the specified scope in the program. The L value specifies a loop
/// nest to evaluate the expression at, where null is the top-level or a
/// specified loop is immediately inside of the loop.
///
/// This method can be used to compute
2015 Jan 15
4
[LLVMdev] confusion w.r.t. scalar evolution and nuw
I've been doing some digging in this area (scev, wrapping arithmetic),
learning as much as I can, and have reached a point where I'm fairly
confused about the semantics of nuw in scalar evolution expressions.
Consider the following program:
define void @foo(i32 %begin) {
entry:
br label %loop
loop:
%idx = phi i32 [ %begin, %entry ], [ %idx.dec, %loop ]
%idx.dec = sub nuw i32
2015 Mar 19
2
[LLVMdev] Cast to SCEVAddRecExpr
Hi Nick,
Thanks for looking into it.
I have tried that as well but it didn't worked.
"AddExpr->getOperand(0))" node is:
" (4 * (sext i32 {2,+,2}<%for.body4> to i64))<nsw>"
When I cast this to "SCEVAddRecExpr" it returns NULL.
Regards,
Ashutosh
-----Original Message-----
From: Nick Lewycky [mailto:nicholas at mxc.ca]
Sent: Thursday, March 19,
2015 Mar 19
2
[LLVMdev] Cast to SCEVAddRecExpr
Hi,
I'm trying to cast one of the SCEV node to "SCEVAddRecExpr".
Every time cast return NULL, and I'm unable to do this.
SCEV Node:
((4 * (sext i32 {2,+,2}<%for.body4> to i64))<nsw> + %var)<nsw>
Casting:
const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(SCEVNode);
'var' is of type float pointer (float*).
Without 'sext' it works, but
2015 Mar 19
3
[LLVMdev] Cast to SCEVAddRecExpr
Yes, I can get "SCEVAddRecExpr" from operands of "(sext i32 {2,+,2}<%for.body4> to i64)".
So whenever SCEV cast to "SCEVAddRecExpr" fails, we have drill down for such patterns ?
Is that the right way ?
Regards,
Ashutosh
-----Original Message-----
From: Nick Lewycky [mailto:nicholas at mxc.ca]
Sent: Thursday, March 19, 2015 1:02 PM
To: Nema, Ashutosh
Cc:
2015 Mar 31
2
[LLVMdev] Cast to SCEVAddRecExpr
Sorry typo in test case, Please ignore previous mail.
Consider below case:
for (j=1; j < itr; j++) {
- - - -
for (i=1; i < itr; i++) {
{
temp= var[i << 1];
- - - - -
}
}
In the above example, we are unable to get "SCEVAddRecExpr" for "var[i << 1]"
Its "SCEVAddRecExpr" is computable in *Outer Loop*
I
2010 Jun 29
2
[LLVMdev] Confuse on getSCEVAtScope
hi all,
i have SCEVAddRec
{{(32 + @edge.8265),+,32}<Loop0>,+,4}<Loop1>
where Loop0 and Loop1 are brothers (loops at the same level of the
loopnest), and Loop0 have a computable backedge taken count.
when i call getSCEVAtScope({{(32 +
@edge.8265),+,32}<Loop0>,+,4}<Loop1> , Loop1), it just give me a
{{(32 + @edge.8265),+,32}<Loop0>,+,4}<Loop1>,
instead of
2020 Mar 30
2
Scalar Evolution Expressions Involving Sibling Loops
Forwarding to the dev list, in case others ran into similar issues and/or
have input on this topic.
Bardia Mahjour
----- Forwarded by Bardia Mahjour/Toronto/IBM on 2020/03/30 02:25 PM -----
From: Bardia Mahjour/Toronto/IBM
To: listmail at philipreames.com
Cc: "Michael Kruse" <llvm at meinersbur.de>
Date: 2020/03/26 11:47 AM
Subject: Scalar Evolution Expressions Involving Sibling
2008 Dec 09
1
[LLVMdev] scalar-evolution + indvars fail to get the loop trip count?
Hi,
Seems pass scalar-evolution+indvars fail to get the loop trip count of the
following case:
int foo(int x, int y, int lam[256], int alp[256]) {
int i;
int z = y;
for (i = 255; i >= 0; i--) {
z += x;
lam[i] = alp[i];
}
return z;
}
The final optimized ll code is :
define i32 @foo(i32 %x, i32 %y, i32* %lam, i32* %alp) nounwind {
entry:
br label %bb
bb:
2014 Apr 01
2
[LLVMdev] Construction of SCEVAddRecExpr
Hello,
I'm studying how the SCEV analyzis works and how to use it and I could not create an example where the SCEV analyzis identifies an expression as "SCEVAddRecExpr".
Aren't the expressions below the kind of pattern that should be represented as a "AddRecExpr" ?
SCEV: (1 + (2 * %3)
or
SCEV: (%1 + (2 * %3)
or
SCEV: (%1 + (%2 * %3)
In my experiments they are
2015 Apr 01
2
[LLVMdev] Cast to SCEVAddRecExpr
Thanks Sanjoy.
> To be pedantic, "var[i<<1]" is not an add recurrence, but "&var[i <<
> 1]" is an add recurrence. I'll assume that's that you meant.
Yes, I meant the same.
> I think that is because in C, multiplication is nsw but left shift is
> not and so "i << 1" can legitimately sign-overflow but i * 2 cannot
>
2020 Mar 30
2
Scalar Evolution Expressions Involving Sibling Loops
> I'm not following your example. If you have two sibling loops with the
same parent, one will frequently, but not always dominate the other. Can
you give a specific example of when forming a recurrence between two
siblings (without one dominating the other), is useful?
The situation can happen with guarded loops or with a user guard like
below:
if (c) {
for (i = 0; i < n; i++)
2012 Jun 23
2
[LLVMdev] State of 'llvm.pcmarker' Intrinsic
Hi,
I'm also working on a tool in which I'd like to know the instruction PCs. So
for now, the intrinsic is still not supported on x86?
-Ang
--
View this message in context: http://llvm.1065342.n5.nabble.com/State-of-llvm-pcmarker-Intrinsic-tp31677p46619.html
Sent from the LLVM - Dev mailing list archive at Nabble.com.
2012 Jun 23
1
[LLVMdev] State of 'llvm.pcmarker' Intrinsic
Hi Andrew,
So do you know on which architectures is this intrinsic implemented? Thank
you!
-Ang
--
View this message in context: http://llvm.1065342.n5.nabble.com/State-of-llvm-pcmarker-Intrinsic-tp31677p46621.html
Sent from the LLVM - Dev mailing list archive at Nabble.com.
2013 Jul 11
1
[LLVMdev] Scalar Evolution and Loop Trip Count.
Hi,
Scalar evolution seems to be wrapping around the trip count in the
following loop.
void add (int *restrict a, int *restrict b, int *restrict c) {
char i;
for (i = 0; i < 255; i++)
a[i] = b[i] + c[i];
}
When I run scalar evolution on the bit code, I get a backedge-taken
count which is obviously wrong.
$> cat loop.ll
; Function Attrs: nounwind
define void @add(i32* noalias
2020 Apr 16
2
Scalar Evolution Expressions Involving Sibling Loops
Hi Jimmy,
It's good to know that the problem is not specific to the case I ran into.
May be you can provide your example as well, since Philip seems to be
interested in some specific examples. If the assertion in getAddrExpr is
deemed necessary, then I think a condition check would be the next best
solution as it helps client code guard against such cases and make
alternative arrangements to
2020 Apr 17
2
Scalar Evolution Expressions Involving Sibling Loops
Thanks for sharing the known problem.
I think to solve the problem properly, we need to fully understand why that
assumption about dominance is there and the implications of removing it.
It would be good if you could be more specific about your idea of nullptr
or SCEV_unknown (eg which function would return those values and when), but
returning nullptr from getAddExpr or getSCEVAtScope may be
2015 Jun 10
3
[LLVMdev] Question about NoWrap flag for SCEVAddRecExpr
I am testing vectorization on the following test case:
float x[1024], y[1024];
void myloop1() {
for (long int k = 0; k < 512; k++) {
x[2*k] = x[2*k]+y[k];
}
}
Vectorization failed due to "unsafe dependent memory operation". I traced
the LoopAccessAnalysis.cpp and found the reason is the NoWrapFlag for
SCEVAddRecExpr is not set and consequently the
2008 Dec 09
1
[LLVMdev] scalar-evolution + indvars fail to get the loop trip count?
>
>
> Having the final .ll file doesn't help debug this. If you run opt
> -analyze -scalar-evolution on the .ll you pasted, it will correctly
> print out the loop trip count.
>
> I've modified llvm-gcc to remove all the passes after indvars.
>
>
I updated my llvm and now it works.
>> > Surely the loop trip count is 256, but the Loop::getTripCount()
2017 Dec 01
0
Using Scalar Evolution to Identify Expressions Evolving in terms of Loop induction variables
Hi Hashim,
Scalar evolution determines evolution of scalar in terms of expression
chain driving it.
Try dumping the detailed log using opt -analyze -scalar-evolution <.ll> -S
, and look for LoopDispositions
corresponding to different expression which shows variance characteristics
of a particular expression w.r.t
loop i.e. [computable/variant/invariant].
Thanks
On Fri, Dec 1, 2017 at