[LLVMdev] some superoptimizer results

Philip Reames listmail at philipreames.com
Wed Jul 22 14:52:34 PDT 2015



On 07/22/2015 01:49 PM, Philip Reames wrote:
>
>
> On 07/22/2015 01:28 PM, Sean Silva wrote:
>>
>>
>> On Wed, Jul 22, 2015 at 12:54 PM, Hal Finkel <hfinkel at anl.gov 
>> <mailto:hfinkel at anl.gov>> wrote:
>>
>>     One thing that is important to consider is where in the pipeline
>>     these kinds of optimizations fit. We normally try to put the IR
>>     into a canonical simplified form in the mid-level optimizer. This
>>     form is supposed to be whatever is most useful for exposing other
>>     optimizations, and for lowering, but only in a generic sense. We
>>     do have some optimizations near the end of our pipeline
>>     (vectorization, partial unrolling, etc.) that consider
>>     target-specific properties, but only because the alternative is
>>     doing those loop optimizations after instruction selection.
>>
>>     Considering ILP and other pipeline-level costs are something we
>>     generally consider only in the SelectionDAG and after. If these
>>     are IR optimizations, then I'm not sure that considering ILP,
>>     etc. is the right metric -- so long as the transformations are
>>     sufficiently reversible to allow of efficient lowering afterward.
>>
>>
>> Agreed. It might just be that these initial results are from the 
>> "burn-in" specifically targeting short simple sequences, but most of 
>> the transformations in the link seem to be things that, if 
>> applicable, we would want to do in the backend instead of in the 
>> middle-end.
> Looking through the items, I see a number which are suitable for mid 
> level canonicalization.  For example, the two for converting and/cmps 
> into truncs seem like good candidates.  We need to make sure to apply 
> judgement here, but not *all* of these are backend specific.
I took a shot at implementing this and it looks like instcombine is 
actually canonicalizing in the opposite direction.  All truncs to i1 are 
being converted to an and/cmp pattern.  Anyone know why this is?  I 
expected that as a lowering in selectiondag, but doing in InstCombine 
seems too early.... I guess I can see an argument that we're not 
actually loosing any information (i.e. ComputeKnownBits will handle the 
and/cmp just fine), but this still seems a bit surprising.  Anyone have 
thoughts here?

Anyways, at least those half dozen items from the list appear to be 
WONTFIX.  :)
>
>
>
>>
>> -- Sean Silva
>>
>>
>>      -Hal
>>
>>     ----- Original Message -----
>>     > From: "Sean Silva" <chisophugis at gmail.com
>>     <mailto:chisophugis at gmail.com>>
>>     > To: "John Regehr" <regehr at cs.utah.edu <mailto:regehr at cs.utah.edu>>
>>     > Cc: llvmdev at cs.uiuc.edu <mailto:llvmdev at cs.uiuc.edu>
>>     > Sent: Wednesday, July 22, 2015 2:35:51 PM
>>     > Subject: Re: [LLVMdev] some superoptimizer results
>>     >
>>     >
>>     >
>>     > Are you taking into account critical path length? Because e.g. for:
>>     >
>>     >
>>     >
>>     > %0:i64 = var
>>     > %1:i1 = slt 18446744073709551615:i64, %0
>>     > %2:i64 = subnsw 0:i64, %0
>>     > %3:i64 = select %1, %0, %2
>>     > infer %3
>>     > %4:i64 = ashr %0, 63:i64
>>     > %5:i64 = add %0, %4
>>     > %6:i64 = xor %5, %4
>>     > result %6
>>     >
>>     >
>>     > In the former case, the cmp and sub are independent, so can be
>>     > executed in parallel, while in the latter case all 3 instructions
>>     > are dependent. So the former case can execute in 2 cycles while the
>>     > latter takes 3. Modern OoO chips do in fact exploit this kind of
>>     > thing.
>>     >
>>     >
>>     > -- Sean Silva
>>     >
>>     >
>>     >
>>     >
>>     > On Wed, Jul 22, 2015 at 10:15 AM, John Regehr <
>>     regehr at cs.utah.edu <mailto:regehr at cs.utah.edu> >
>>     > wrote:
>>     >
>>     >
>>     > We (the folks working on Souper) would appreciate any feedback on
>>     > these IR-level superoptimizer results:
>>     >
>>     > http://blog.regehr.org/extra_files/souper-jul-15.html
>>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__blog.regehr.org_extra-5Ffiles_souper-2Djul-2D15.html&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=Zws35DV5cT6VNt0_Wc8MbZqd8-UXh4q602LshCf-frE&s=2cBkApfDIxWcm7AqVD7-qdjeHG3okw8lDLBn_URJO2s&e=>
>>     >
>>     > My impression is that while there's clearly plenty of material in
>>     > here that doesn't want to get implemented in an opt pass, there are
>>     > a number of gems hiding in there that are worth implementing.
>>     >
>>     > Blog post containing additional explanation and caveats is here:
>>     >
>>     > http://blog.regehr.org/archives/1252
>>     <https://urldefense.proofpoint.com/v2/url?u=http-3A__blog.regehr.org_archives_1252&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=Zws35DV5cT6VNt0_Wc8MbZqd8-UXh4q602LshCf-frE&s=Ek-DIAbJ7gqXWn_mfOpgfQE3i2dh1D_5peAOqtO1oYc&e=>
>>     >
>>     > Thanks!
>>     >
>>     > John
>>     >
>>     > _______________________________________________
>>     > LLVM Developers mailing list
>>     >LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>>     http://llvm.cs.uiuc.edu
>>     > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>     >
>>     >
>>     > _______________________________________________
>>     > LLVM Developers mailing list
>>     > LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>>     http://llvm.cs.uiuc.edu
>>     > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>     >
>>
>>     --
>>     Hal Finkel
>>     Assistant Computational Scientist
>>     Leadership Computing Facility
>>     Argonne National Laboratory
>>
>>
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu          http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150722/76d11290/attachment.html>


More information about the llvm-dev mailing list