[LLVMdev] Reassociate and Canonicalization of Expressions
Mehdi Amini
mehdi.amini at apple.com
Wed Feb 4 10:49:44 PST 2015
Ping.
> On Feb 2, 2015, at 11:12 AM, Mehdi Amini <mehdi.amini at apple.com> wrote:
>
> Hi,
>
> I encountered some bugs in Reassociate [1] where we are hitting some assertions:
>
> assert(!Duplicates.count(Factor) &&
> "Shouldn't have two constant factors, missed a canonicalize");
> assert(NumAddedValues > 1 && "Each occurrence should contribute a value”);
>
> My understanding is that these assertions enforce that when processing an expression tree, we expect that the nodes have already been canonicalized by Reassociate.
>
> I infer that there should be *one* canonicalization for a function and it should be deterministic, i.e. if I run Reassociate two times I expect that the second one does not make any change.
>
> However right now we are far from that. I have multiple patches in flight to improve the situation, but the situation is still not perfect. Before going further I’d like some clarification on the expectation of Reassociate:
>
> - Is there one expected canonicalization in all cases?
> - Do we expect that running multiple times Reassociate in a row does not change the result after the first run?
>
> If the answer is no, then I think the two assertions should be relaxed.
>
> Bonus question: how does InstCombine behave wrt to the two questions above?
>
> Thanks,
>
> —
> Mehdi
>
> [1] : I am stressing it with a fuzzer for a specific language based on LLVM and Reassociate is used later in the pipeline.
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list