Recent commit history on llvm: https://github.com/llvm-mirror/llvm/commits/master?author=annamthomas
- User Since
- Mar 30 2016, 11:13 AM (233 w, 4 d)
Fri, Sep 18
thanks for this Philip!
Thu, Sep 10
addressed review comments. Added more testcases (positive and countercases).
Tue, Sep 8
handle clang-tidy comment.
Mon, Sep 7
handles complex addressing mode using base and index operands. All test cases pass.
I plan to add more counter examples once the basic idea is agreed upon.
Fri, Sep 4
addressed review comments.
While working on a follow-up change, I realized we don't need to separate out whether we're handling simple or complex addressing mode based on whether we fault in zero page or not. Both are orthogonal issues. The reason I coupled them is because we still need a way to get the "total constant address" *if it exists* and make a distinction between when we succeeded to get one versus when there was no such constant address apart from the offset.
thanks Denis for your comments. I'll let others have a chance in review as well. Regarding broader audience today, implicit null checks works only with X86 (or rather that's what we test with). Also, none of the global APIs are changed, precisely because they are used in other parts of the code. Hence a new API is introduced and used currently only for implicit null checks. It is broad enough that we can reuse it in other passes if we wish to do so.
addressed review comments around using simpler form rather than isTied. Whitespace testcase changes avoided. NFC w.r.t. prev diff.
Thu, Sep 3
Wed, Sep 2
Jun 4 2020
Code LGTM. quick glance at tests.
Jun 2 2020
LGTM w/ comments inline.
May 26 2020
LGTM. thanks for working on this! Apart from dropping all of the extra handling code in RS4GC and verifier (which itself is a really good reason for this support btw), I'm assuming this for optimizations which know about the deopt_op bundle (or gc_transition bundle) after relocations are made explicit? i.e., a general robustness patch.
May 15 2020
thank you for the review!
May 14 2020
addressed review comment about test case.
addressed review comments. Added unittest case.
Landed as bb308b020522420413c7d3f2989a88f2fc423c56.
May 13 2020
Thanks Johannes. @fpetrogalli Francesco, I believe I've addressed your concern as well?
Yes, but it should be orthogonal to that requirement. I think hiding the mangling behind a static function, while the demangling is exposed seems unintuitive. Any front-ends that need to attach the attribute will need this function exposed.
May 6 2020
Francesco @fpetrogalli, I was reusing this attribute for custom scalar functions and I have a fundamental question - why is it that this *only* a callsite attribute? I don't see anything preventing this from being a function attribute as well. The meaning for the function attribute being if "variant-abi" is present on the function, it implies all callsites calling this particular function has that attribute. Of course, if you have multiple units being finally linked, it is the responsibility of the front end to choose it it wants to add the function attribute or a callsite attribute. However, I strongly feel we should have support for both, because there are use cases where the vector shape etc does not change depending on the callsite. Was there a reason for not supporting it as a function attribute as well?
May 5 2020
Thanks for the clarification here.
May 4 2020
Thank you for the detailed and quick response @fpetrogalli.
Ah, interesting. I hadn't noticed that property of the attribute. So, basically, if we were to pass the attribute through the front-end, we're required to keep the vector declarations in the IR as well.
@fpetrogalli I have a high level question - why does this pass require that the function should be from one of the vector libraries (Mass, SMVL etc)? I'd like to piggy-back on the vector-function-abi-variant attribute to vectorize a call to a scalar function, once the front-end adds this attribute to the callsite. So, if we have the following code in IR, with a scalar call to a function trivially.vectorizable.func with the vector-function-abi-variant attribute, we will generate the vector function declarations and then LoopVectorizer/SLPVectorizer would do its thing.
Apr 17 2020
Apr 6 2020
Apr 5 2020
Apr 2 2020
will update it.
p.s. Sorry for missing the functional issue the first time. All of the test changes should have made the issue obvious, but despite reading the LangRef description of signext, I somehow managed to miss the separation between ABI and optimization attributes.
thanks for the review Philip and pointing out the problem. All of us had missed the functional issue the first time around.
Apr 1 2020
fixed missing code left out during rebase.
fixed buildbot failure. see above comments and added testcase test8.
whitelist valid return attributes and only add those. Added testcase for signext.
Mar 31 2020
see above comment.
I got a failure in one of the binaryFormats:
Attributes 'zeroext and signext' are incompatible! %rev.i.i.i.i.i.i.i.i = tail call signext zeroext i16 @llvm.bswap.i16(i16 %ret.0.copyload.i.i.i.i) #6 in function _ZN4llvm7msgpack6Reader7readIntIsEENS_8ExpectedIbEERNS0_6ObjectE fatal error: error in backend: Broken function found, compilation aborted!
Mar 30 2020
addressed review comments. Added two test cases: deref value being different, inlined callee body better optimized compared to callee.
Mar 26 2020
addressed review comments
NFC w.r.t prev diff. Use VMap.lookup instead of a lambda which does the same.
Mar 25 2020
Just chiming in here. We are planning to use addrspacecast for pointer width conversion (32 to 64 bit and vice-versa). Does not change the memory in anyway, i.e. if we lowered the addrspacecast into an IR call, that call could be marked argmemonly readnone. However, it is *not* a simple sign-extend/truncate either.
I've added some comments inline. Also, I think we have the scope to improve optimizations for addrspacecast at IR level, which is currently limited because different targets have varying lowering for addrspacecast.
Mar 23 2020
Mar 22 2020
Noticed while adding couple more tests, there were 2 bugs:
Mar 20 2020
use isGuaranteedToTransferExecutionToSuccessor instead of MayThrow
Mar 19 2020
refactored code, made asserts cleaner.
fixed clang tests. rot-intrinsics.c testcase has 5 different RUNs with 3 prefixes. Depending on target-triple, the attribute is added to the caller, so I've disabled the optimization for that specific test with -update-return-attrs=false
Will avoid confusing usage with cleaner asserts.
addressed review comments. fixed CI failure related to clang-tidy.
ah yes, I'd build llvm within it's own subdir without enabling any other projects. Build worked. thanks.