[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