[LLVMdev] Cast to SCEVAddRecExpr
Nema, Ashutosh
Ashutosh.Nema at amd.com
Thu Mar 19 00:08:13 PDT 2015
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 12:19 PM
To: Nema, Ashutosh
Cc: llvmdev at cs.uiuc.edu
Subject: Re: [LLVMdev] Cast to SCEVAddRecExpr
Nema, Ashutosh wrote:
> 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 I'm wondering why it not working in above case.
> I'm not sure, is such casting allowed ?
It looks like your node is a SCEVAddExpr whose LHS is "(4 * (sext i32
{2,+,2}<%for.body4> to i64))<nsw>" and RHS is "%var", instead of a
SCEVAddRecExpr. Perhaps if the sext weren't there SCEV might simplify
the whole thing to a single SCEVAddRecExpr.
Can you cast your node to a SCEVAddExpr, then
dyn_cast<SCEVAddRecExpr>(AddExpr->getOperand(0))?
Note that SCEV does not handle floats as anything but completely opaque
values.
Nick
More information about the llvm-dev
mailing list