Displaying 4 results from an estimated 4 matches for "globalproperty".
2017 Apr 06
2
Dereferenceable load semantics & LICM
...ra information to the metadata nodes indicating that this
> property
> >> is non-local:
> >>
> >> %0 = load... %p, !invariant.group !1, !dereferenceable !2
> >> %1 = load ... %0, !invariant.load !0, !dereferenceable !2
> >>
> >> !0 = !{!"GlobalProperty"}
> >> !1 = !{!"MyType", !"GlobalProperty"}
> >> !2 = !{i64 8, !"GlobalProperty}
> >>
> >> With that we would strip only the metadata not containing this
> >> information.
> >>
> >> For devirtualization it...
2017 Apr 03
4
Dereferenceable load semantics & LICM
...n LLVM, but I see a one simple
> solution:
> add extra information to the metadata nodes indicating that this property
> is non-local:
>
> %0 = load... %p, !invariant.group !1, !dereferenceable !2
> %1 = load ... %0, !invariant.load !0, !dereferenceable !2
>
> !0 = !{!"GlobalProperty"}
> !1 = !{!"MyType", !"GlobalProperty"}
> !2 = !{i64 8, !"GlobalProperty}
>
> With that we would strip only the metadata not containing this information.
>
> For devirtualization it would make sense with invariant.load,
> invariant.group and deref...
2017 Mar 31
4
Dereferenceable load semantics & LICM
Hi Piotr,
On March 31, 2017 at 1:07:12 PM, Piotr Padlewski
(piotr.padlewski at gmail.com) wrote:
> [snip]
> Do I understand it correctly, that it is legal to do the hoist because all
> of the instructions above %vtable does not throw?
Yes, I think you're right. HeaderMayThrow is a conservative
approximation, and the conservativeness is biting us here.
> Are there any plans to
2017 Apr 06
3
Dereferenceable load semantics & LICM
...the metadata is "wrong"), but it is never executed so all is
> > well.
> > int val = *ptr;
> > }
>
> I was not talking about code like that. The problem is code like this:
>
> if (false) {
> ptr = load i8*, i8** %ptrptr, !dereferenceable !{i64 8, !"GlobalProperty}
> // ptr is not actually dereferenceable, even the load above has UB
> // (since the metadata is "wrong"), but it is never executed so all is
> well.
> int val = *ptr;
> }
>
> I did not mention this earlier, but I've assumed that %ptrptr itself
> is dere...