[LLVMdev] Cast to SCEVAddRecExpr
Nick Lewycky
nicholas at mxc.ca
Wed Mar 18 23:49:12 PDT 2015
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