Charith Mendis via llvm-dev
2016-Oct-04 18:13 UTC
[llvm-dev] Getting the symbolic expression for an address calculation
How do you generate a SCEVAddRecExpr from a SCEV? It tried dyn_casting and it seems like that the SCEV returned by getSCEV is not a SCEVAddRecExpr. Thanks On Fri, Sep 30, 2016 at 4:16 PM, Friedman, Eli <efriedma at codeaurora.org> wrote:> On 9/30/2016 12:16 PM, Charith Mendis via llvm-dev wrote: > >> >> Hi all, >> >> What is the best way to get the symbolic expression for an address >> calculation in llvm specially when memory addresses are calculated within >> a loop. >> > > ScalarEvolution works with pointers as well as integers; if you call > getSCEV on an address based on an induction variable, you'll get a > SCEVAddRecExpr. > > -Eli > > -- > Employee of Qualcomm Innovation Center, Inc. > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux > Foundation Collaborative Project > >-- Kind regards, Charith Mendis Graduate Student, CSAIL, Massachusetts Institute of Technology -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161004/84bd7915/attachment.html>
Friedman, Eli via llvm-dev
2016-Oct-04 18:24 UTC
[llvm-dev] Getting the symbolic expression for an address calculation
On 10/4/2016 11:13 AM, Charith Mendis wrote:> How do you generate a SCEVAddRecExpr from a SCEV? It tried dyn_casting > and it seems like that the SCEV returned by getSCEV is not a > SCEVAddRecExpr.You can dyn_cast if it's actually an AddRec... but not all expressions can be represented as an AddRec. SCEV has a dump() method which can be helpful for debugging. What does E->dump() on the SCEV in question look like? What does the IR look like? -Eli -- Employee of Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
Charith Mendis via llvm-dev
2016-Oct-04 18:26 UTC
[llvm-dev] Getting the symbolic expression for an address calculation
(((15 + %add144.sink230.i) * (%blocksize /u %bytesoftype)) + {%_dest,+,16}<%for.cond1.preheader.i59>)<nsw> On Tue, Oct 4, 2016 at 2:24 PM, Friedman, Eli <efriedma at codeaurora.org> wrote:> On 10/4/2016 11:13 AM, Charith Mendis wrote: > >> How do you generate a SCEVAddRecExpr from a SCEV? It tried dyn_casting >> and it seems like that the SCEV returned by getSCEV is not a SCEVAddRecExpr. >> > > You can dyn_cast if it's actually an AddRec... but not all expressions can > be represented as an AddRec. > > SCEV has a dump() method which can be helpful for debugging. What does > E->dump() on the SCEV in question look like? What does the IR look like? > > > -Eli > > -- > Employee of Qualcomm Innovation Center, Inc. > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux > Foundation Collaborative Project > >-- Kind regards, Charith Mendis Graduate Student, CSAIL, Massachusetts Institute of Technology -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161004/eab49001/attachment.html>