[llvm-commits] [PATCH] Make EarlyCSE understand commutativity
Michael Ilseman
milseman at apple.com
Tue Oct 2 16:19:03 PDT 2012
You are correct.
On Oct 2, 2012, at 1:02 AM, Duncan Sands <baldrick at free.fr> wrote:
> Hi Michael,
>
> On 01/10/12 22:14, Michael Ilseman wrote:
>> I could also swap based on the addresses of the operands, which is how GVN does
>> it.
>
> this isn't how GVN does it. For commutative instructions GVN sorts the value
> numbers of the operands, not their addresses.
>
> Ciao, Duncan.
>
> Swapping itself would still change execution to execution, but it will be
>> consistent within a single execution.
>>
>> On Oct 1, 2012, at 1:00 PM, Chandler Carruth <chandlerc at google.com
>> <mailto:chandlerc at google.com>> wrote:
>>
>>> On Mon, Oct 1, 2012 at 11:07 AM, Michael Ilseman <milseman at apple.com
>>> <mailto:milseman at apple.com>> wrote:
>>>
>>> When hashing the operands, first generate all the hashes and if it's
>>> commutative then put the smaller hash in first (and also swap the
>>> predicate for CmpInst).
>>>
>>>
>>> This sounds very risky. Please don't rely on the particular values of hashes
>>> to produce different output.
>>>
>>> The correct way to detect this in a hash table is to use a symmetric hash or
>>> to use some existing program input to arbitrarily fix the ordering, and always
>>> hash both and always in that order.
>>>
>>> The one thing I'm unsure of with this approach is that SimpleValue seems
>>> meant to just be a wrapper around an Instruction pointer, and this is
>>> somewhat violating intuition.
>>>
>>> On Oct 1, 2012, at 11:03 AM, Owen Anderson <resistor at mac.com
>>> <mailto:resistor at mac.com>> wrote:
>>>
>>> > How would you decide which commutation is the canonical one, without
>>> doing full reassociation? I suppose you could try to find a symmetric
>>> hash function…
>>> >
>>> > --Owen
>>> >
>>> > On Oct 1, 2012, at 11:00 AM, Michael Ilseman <milseman at apple.com
>>> <mailto:milseman at apple.com>> wrote:
>>> >
>>> >> Would also modifying
>>> DenseMapInfo<SimpleValue>::getHashValue(SimpleValue Val) resolve the
>>> hashing issue?
>>> >>
>>> >> On Oct 1, 2012, at 10:56 AM, Owen Anderson <resistor at mac.com
>>> <mailto:resistor at mac.com>> wrote:
>>> >>
>>> >>>
>>> >>> On Oct 1, 2012, at 10:42 AM, Chris Lattner <clattner at apple.com
>>> <mailto:clattner at apple.com>> wrote:
>>> >>>
>>> >>>>
>>> >>>> On Sep 30, 2012, at 7:07 PM, Michael Ilseman <milseman at apple.com
>>> <mailto:milseman at apple.com>> wrote:
>>> >>>>
>>> >>>>> Attached is a new version. I went with "CanonicalExpr" and added
>>> function level comments.
>>> >>>>
>>> >>>> Hi Michael,
>>> >>>>
>>> >>>> Why is this needed? Why isn't it enough to change the predicate in
>>> "DenseMapInfo<SimpleValue>::isEqual" to handle commutative operations?
>>> >>>
>>> >>> I don't think that's sufficient. isEqual is used to resolve
>>> collisions. It won't help here, because the commuted instructions will
>>> hash to different values up front. Note that after reassociation we could
>>> rely on commuted (integer) instructions being canonicalized, but that
>>> doesn't help given EarlyCSE's place in the pipeline.
>>> >>>
>>> >>> --Owen
>>> >>
>>> >
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu <mailto:llvm-commits at cs.uiuc.edu>
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>
>>>
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list