[LLVMdev] [global-isel] Simplifying the simplifier
Nuno Lopes
nunoplopes at sapo.pt
Sun Aug 11 04:26:19 PDT 2013
>>>> What might be better is to put some abstract interface between
>>>> instcombine and the IR, so that instcombine can be run on these
>>>> pseudo-MIs
>>>> as well as on IR.
>>>
>>>
>>> I like the idea of sharing code between IR and MI passes through an
>>> abstract interface. I think that later stages in the IR pipeline also
>>> need
>>> an instruction optimizer instead of a canonicalizer.
>>>
>>> An alternative approach would be to describe these transformations in a
>>> DSL instead of C++.
>>
>>
>>> *Legalization*
>>> - What does 'more legal' mean? Can we restrict the possible
>>> legalization
>>> transformations so the iterative process is guaranteed to make progress?
>>
>>
>>
>> I've been thinking for a while that we could express the instcombine
>> transformations in a DSL, and then generate the C++ code from there. The
>> advantage is that if we formalize the LLVM IR, then we can check the
>> correctness of all the instcombine transformations for "free".
>> Moreover, instcombine has also suffered from infinite loops in the past
>> (because canonicalization did not make progress for some inputs), which
>> is
>> also your concern with legalization of MI. We have algorithms to prove
>> termination of rewriting systems, so I believe we could also prove
>> progress
>> for both instcombine and MI legalization.
>>
>> I'm mixing MI legalization and instcombine, since I think that the
>> correctness and progress checking technology that we would need is the
>> exactly the same.
>> I wouldn't mind working on this project. But the time-frame on my side
>> is
>> academic, which may mean 1 or 2 years to be completed.
>>
>
> Just a comment:
> If you believe you can represent all instcombine transformations in
> DSL, you then transform them to C++.
> Why not work out a method for checking correctness in the C++?
> Then, you would not have to convert everything to DSL, and could run
> the checks on the current C++.
> The code in C++ should be able to be written in a static analysis
> friendly way so that we could use static analysis to prove no infinite
> loops.
I believe the advantage of writing down the optimizations in a DSL is that
the representation is way more succinct. The code in instcombine is a bit
boring and repetitive (and huge!).
We could, however, try to automatically convert from C++ to the DSL. Not
impossible, AFAICT.
Proving absence of loops is a bit more complicated than traditional static
analysis. It often requires things like synthesis of ranking functions (to
prove that the transition relation is well-founded), which is not trivial.
Nuni
More information about the llvm-dev
mailing list