On Wed, Nov 20, 2013 at 11:55 AM, Ilya Enkovich <enkovich....@gmail.com> wrote:
> 2013/11/20 Richard Biener <richard.guent...@gmail.com>:
>> On Tue, Nov 19, 2013 at 9:18 PM, Ilya Enkovich <enkovich....@gmail.com> 
>> wrote:
>>> 2013/11/19 Jeff Law <l...@redhat.com>:
>>>> On 11/19/13 05:20, Ilya Enkovich wrote:
>>>>>
>>>>> 2013/11/19 Richard Biener <richard.guent...@gmail.com>:
>>>>>>
>>>>>> On Mon, Nov 18, 2013 at 8:12 PM, Ilya Enkovich <enkovich....@gmail.com>
>>>>>> wrote:
>>>>>>>
>>>>>>> 2013/11/18 Jeff Law <l...@redhat.com>:
>>>>>>>>
>>>>>>>> On 11/18/13 11:27, Ilya Enkovich wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> How does pointer passed to regular function differ from pointer passed
>>>>>>>>> to splitted function? How do I know then which pointer is to be passed
>>>>>>>>> with bounds and wchich one is not? Moreover current ABI does not allow
>>>>>>>>> to pass bounds with no pointer or pass bounds for some pointers in the
>>>>>>>>> call only.
>>>>>>>>
>>>>>>>>
>>>>>>>> But I don't see any case in function splitting where we're going to
>>>>>>>> want to
>>>>>>>> pass the pointer without the bounds.  If you want the former, you're
>>>>>>>> going
>>>>>>>> to want the latter.
>>>>>>>
>>>>>>>
>>>>>>> There are at least cases when checks are eliminated or when lots of
>>>>>>> pointer usages are accompanied with few checks performed earlier (e.g.
>>>>>>> we are working with array). In such cases splitted part may easily get
>>>>>>> no bounds.
>>>>>>>
>>>>>>>>
>>>>>>>> I really don't see why you need to do anything special here.  At the
>>>>>>>> most an
>>>>>>>> assert in the splitting code to ensure that you don't have a situation
>>>>>>>> where
>>>>>>>> there's mixed pointers with bounds and pointers without bounds should
>>>>>>>> be all
>>>>>>>> you need or that you passed a bounds with no associated pointer :-)
>>>>>>>
>>>>>>>
>>>>>>> It would also require generation of proper bind_bounds calls in the
>>>>>>> original function and arg_bounds calls in a separated part. So,
>>>>>>> special support is required.
>>>>>>
>>>>>>
>>>>>> Well, only to keep proper instrumentation.  I hope code still works
>>>>>> (doesn't trap) when optimizations "wreck" the bounds?  Thus all
>>>>>> these patches are improving bounds propagation but are not required
>>>>>> for correctness?  If so please postpone all of them until after the
>>>>>> initial support is merged.  If not, please make sure BND instrumentation
>>>>>> works conservatively when optimizations wreck it.
>>>>>
>>>>>
>>>>> All patches I sent for optimization passes are required to avoid ICEs
>>>>> when compiling instrumented code.
>>>>
>>>> Then I think we're going to need to understand them in more detail. That's
>>>> going to mean testcases, probably dumps and some commentary about what went
>>>> wrong.
>>>>
>>>> I can't speak for Richi, but when optimizations get disabled, I tend to 
>>>> want
>>>> to really understand why and make sure we're not papering over a larger
>>>> problem.
>>>>
>>>> The tail recursion elimination one we're discussing now is a great example.
>>>> At this point I understand the problem you're running into, but I'm still
>>>> trying to wrap my head around the implications of the funny semantics of
>>>> __builtin_arg_bounds and how they may cause other problems.
>>>
>>> Root of all problems if implicit data flow hidden in arg_bounds and
>>> bind_bounds.  Calls consume bounds and compiler does not know it. And
>>> input bounds are always expressed via arg_bounds calls and never
>>> expressed via formal args. Obviously optimizers have to be taught
>>> about these data dependencies to work correctly.
>>>
>>> I agree semantics of arg_bounds call creates many issues for
>>> optimizers but currently I do not see a better replacement for it.
>>
>> But it looks incredibly fragile if you ICE once something you don't like
>> happens.  You should be able to easily detect the case and "punt",
>> that is, drop to non-instrumented aka invalidating bounds.
>
> Actually, it is easy detect such cases and invalidate bounds each time
> some optimization bounds data flow.  With such feature 5-6 of sent
> patches would be unnecessary to successfully build instrumented code
> on -O2, but without them quality of checks would be much lower (mostly
> due to inline).

Sure, but you want to have this feature for a production compiler as
for sure you are going to miss an odd sequence of transforms that
breaks your assumptions.

Richard.

> Ilya
>
>>
>> Thus, I really really don't like these patches.  They hint at some
>> deeper problem with the overall design (or the HW feature or the
>> accompaning ABI).
>>
>> Richard.
>>
>>> Ilya
>>>
>>>>
>>>>
>>>> jeff
>>>>

Reply via email to