[LLVMdev] ConstantExpr refactoring
Renato Golin
rengolin at systemcall.org
Sun Jul 1 11:37:41 PDT 2012
On 1 July 2012 01:35, Nick Lewycky <nicholas at mxc.ca> wrote:
> I don't think that turning off folding of constants is the right place to
> start.
Me neither!
> To implement this, start by adding new constants that are going to
> replace the existing ones.
Adding what, where? I can't add a new ConstantInt if the old one is
still there. If the new unfolding Int gets used, it'll change the
behaviour.
> Or start snipping off individual ConstantExpr nodes. Go through all of llvm
> and remove "shufflevector" constant expression, make sure it's never formed.
> Anyone who tries to constant fold it should use the new methods you created
> in my previous paragraph, and it should only return NULL and stay as
> instructions or produce a new constant vector, but no shufflevector
> ConstantExpr. Insert/Extract element/value are next, then possible select or
> fcmp. Eventually we'll get down to things like "subtract" and that should be
> a target specific node, as I don't think all .o formats can actually
> implement that.
That's another approach, and one that could be more feasible. Instead
of backing up the folding with the pass, I could just turn off each
one individually and deal with one problem at a time.
That'll take a long time, but I guess it's the best option...
> One other request that isn't in the PR, I'd like whatever replaces GEP to
> not store "i32 0" vs. "i64 0". Right now "i8* getelementptr ([1 x i8]*
> @glbl), i32 0, i32 0" is different from "i8* getelement ([1 x i8]* @glbl),
> i33 0, i33 0", and there's an infinite number of these. We should
> canonicalize these harder and only produce one Value* here.
That's kinda silly, I agree. Maybe I should start with this one, which
seams simpler, than later tackle the rest.
After I finish it, we could make a list of the most painful ones, so I
can start with them.
--
cheers,
--renato
http://systemcall.org/
More information about the llvm-dev
mailing list