User Details
- User Since
- Jul 21 2015, 5:19 PM (399 w, 5 d)
Oct 25 2021
Sep 15 2021
I implemented this properly with Arthur in https://reviews.llvm.org/D109134
Sep 14 2021
Sep 13 2021
Sep 10 2021
Actually, as Krzysztof Pszeniczny pointed out offline, I think we can't mark it as writeonly, because it would let optimizer to optimize:
This seems to be valid!
Can any func attr expert can comment on what sort of optimizations/reordering this enables? I am a bit worried we might be missing something.
Sep 3 2021
Sep 2 2021
Great! We will need to take a look at what NewGVN missed and understand if this is NewGVN fault, or are we missing something on MSSA site.
Aug 28 2021
LGTM!
This looks resonable. BTW are {launder,strip}.inariant.group intrinsics considered to be free now? I remember fixing this in InlineCost, but this seems to be other cost heuristic. They totally should be considered free.
Aug 27 2021
Could you also update the description and title?
LGTM! Great work with looking for regressions like that.
Aug 26 2021
Just for the record (discussed offline): if the problem is comparisons of launder/strip(%p) with null, then for this specific case we could I think replace it with comparison of %p and null, as null does does not have any "virtual" information (similarly how we already optimzie launder/strip(null) to null
Lets talk offline about the specific case to get it right. The model is pretty brittle in those areas, so we have to be sure the transformations are legal
Jul 25 2021
Sorry for late reply. Although I don't have experience in this pass, it looks good!
May 17 2021
May 11 2021
I had some time to look into it now, sorry that I missed it on first revision.
If I understand the LICM code correctly, it needs to drop all the instruction metadata when hoisting instruction that will not be executed unconditionally. This means that code like:
https://godbolt.org/z/bjP64PbhY
May 2 2021
Apr 28 2021
Apr 27 2021
Out of curiosity: have you seen this pattern happening in the wild with -fstrict-vtable-pointers?
Sep 30 2019
+1, strip.invariant.group probably needs the same handling. Thanks for fixing!
Jul 2 2019
Jun 14 2019
Nov 27 2018
Sep 11 2018
LGTM, but please wait for Javed to review
Sep 7 2018
Aug 14 2018
Aug 13 2018
Jul 16 2018
friendly ping
Jul 12 2018
Jul 10 2018
Jul 3 2018
Jul 2 2018
Jul 1 2018
fixed addrspace cast
Jun 16 2018
Jun 15 2018
Refactor
Jun 13 2018
- Fixed comments
@hfinkel is my response resonable?
Jun 11 2018
- Fixed templates
updated test
unreachable
Jun 2 2018
s/loop unrolling/loop peeling/
I will had to take a look at this at some time, but from what I've heard the state of loop peeling in LLVM is not very sofisticated, and implementing the logic that I propose might be a little hard.
May 29 2018
May 28 2018
fixed test
May 27 2018
small update
Fixed missing vtable commponents
fixed nit
one more test
Added launder when going from possiblyNotDynamic to possiblyDynamic emitting strip for pointer -> int only if poitner is possiblyDynamic
Can someone with experience in Loop passes take a look at this?
May 25 2018
OK, so it seems that at least the tests in the second patch passes without this patch, so I am fine with committing it without this one for one (also Philip if you could take a look at that patch I would be grateful)
I am worried about cases, where the first instruction does not throw, but it we can't hoist it (e.g. it depends on the loop phi) and after that, there is an instruction that can be hoisted.
May 23 2018
Slitted commit into defining and using intrinsic
I only recall the emitting available_externally vtables opportunistically, that is emitting it only if all the inline virtual functions are present (and they are not hidden).
(https://reviews.llvm.org/D33437)
May 22 2018
- Add more comments
@rjmccall do you have any thoughts on the best way to solve it?
May 19 2018
fix name
After rebasing
- small refactor
Changed comments
introduced mayBeDynamicClass and added more tests
Fixed flag passing
Fixed comment