User Details
- User Since
- Mar 8 2019, 5:25 AM (97 w, 2 d)
Oct 14 2020
Handle Global Value
Small fix
Oct 13 2020
LGTM
Oct 2 2020
Sorry, I quite forgot this patch...
@bollu Yes, that's fine. Thanks!
Aug 28 2020
Aug 27 2020
Aug 19 2020
Great, LGTM :)
Aug 16 2020
Why can't we take a union of assumed range?
Aug 13 2020
Hi, I want to use my TensorFlow model in LLVM with MLModelRunner, like ReleaseModeModelRunner.cpp but I have difficulty compiling the model, especially in the TensorFlow AOT complication of the model.
It would be really helpful if you point me out the code which defines the computation graph and the signature. Is such a script already landed or published somewhere?
Jul 21 2020
What happened to this patch?
Jul 15 2020
Jul 7 2020
Jul 6 2020
Either is fine but I think it is more natural to forbid an empty list.
Jun 28 2020
MaxPotentialValues is defined multiple times if you put the definition to the header.
You have to make it an external variable or declare in AttributorAttributes.cpp
Jun 26 2020
I think replacing all makes the code hard to understand (because "call base" is just a name of LLVM class)
Personally, I prefer maintaining "call site"
May 10 2020
Looks good to me.
Looks reasonable to me.
Apr 23 2020
LGTM
Mar 29 2020
LGTM
Mar 28 2020
Mar 27 2020
This makes sense to me.
Mar 26 2020
Why can't we use ABI info without known access?
I mean, is it possible to use ABI info in initialize?
Mar 25 2020
Good point. It is about:
Attribute::StructRet, Attribute::ByVal, Attribute::InAlloca, Attribute::InReg, Attribute::Returned, Attribute::SwiftSelf, Attribute::SwiftError, Attribute::Alignment
Seems reasonable but I'm not sure why we need to care about returned.
Mar 23 2020
LGTM but it is not fixing the typo rather refactoring :)
Mar 21 2020
Mar 20 2020
Mar 19 2020
LGTM
test?
Mar 18 2020
I think Stefan is correct. AnalysisGetter provides such functionality.
Mar 17 2020
Mar 16 2020
void use(int *); __attribute__((noinline)) static void f1(int * restrict p, int c1, int c2) { if (c1) { use(p); } if (!c2) { use(p); } } void f2(int * restrict p, int c) { f1(p, c, c); }
Could you add this example to test?
In this case, c1 and c2 are always same. Because of flow sensitivity, the first callsite is not reachable to the second callsite. So %p is noalias at both callsites. It can't be deduced with isPotentiallyReachable so please add FIXME tag.
Mar 15 2020
Please upload full context of the diff (diff -U999999)
Thank you for working on this! Please add isKnownReachable change.
Thank you for working on this!!
Mar 14 2020
LGTM
Mar 13 2020
You don't have to care about the failure if the failure doesn't occur multiple times.
Please see https://lists.llvm.org/pipermail/llvm-dev/2019-November/136710.html
LGTM
I think the title should be more descriptive, like "improve noalias preservation using reachability" or something.
LGTM
Mar 12 2020
Please guide on why nonull.ll shows additional noalias propagation. I see that the caller doesn't have noalias attribute but it has derived it.
It was caused by a bug that the dependence track was missing for NoAliasAA so I have pushed the fix. (https://github.com/llvm/llvm-project/commit/d9bf79f4e9952acca1fa353e39bcee89cd69550f)
This patch traverses the same context multiple times so the cost might get huge.
I'll create something like a cache.
Mar 11 2020
I have misunderstood how CaptureTracker works. AANoCapture already has this functionality :) So I'd close it.
But I have thought some of FIXME in the test seems wrong.
Mar 10 2020
I have missed to check the dereferenceability of the pointer. I'll fix it later.
So now the tests are broken.
Mar 9 2020
Please use code block.
Mar 8 2020
Mar 7 2020
I have not convinced myself that this covers the recursive case properly, maybe that was never the intend though. Can we have a test like this:
Fix comment and add test.
Mar 6 2020
Mar 4 2020
As I see the discussion in the forum, it seems best to create a basic block for each case. I'll implement so.
Mar 2 2020
Ok, that seems fine.
Mar 1 2020
Feb 27 2020
Simplify implementation.
Feb 26 2020
Could you make sure that you are using a new pass manager? (It means to use ./opt -passes=attributor .. but not ./opt -attributor ..)
If you are using an old pass manager, you might not get LoopInfo or other analysis.
Address comments
Feb 25 2020
Rebased. I simply use AbstractState to accumulate the known information.
Feb 24 2020
Feb 21 2020
Feb 19 2020
Address comments
Feb 17 2020
And I have a question.
define i32 @f1(i32* %p, i32* %q){ entry: %0 = load i32, i32* %q %1 = load i32, i32* %p %add = add nsw i32 %1, %0 ret i32 %add }
Feb 16 2020
I might misunderstand the logic. This seems fine. I also think @baziotis's idea works well.
How can we confirm all cycles in the CFG are recognized actually by loop info? Is there a simple way?
I'm not sure whether we can say if all the loops given by LoopInfo have a max trip count and all the callees are willreturn, then we can guarantee the termination of that function.
Aren't there other factors causing non-terminating execution?