[PATCH] D84589: [CodeMoverUtils] Add optional data dependence checks using Alias Analysis
Whitney Tsang via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 15 05:39:14 PDT 2020
Whitney added inline comments.
================
Comment at: llvm/lib/Transforms/Utils/CodeMoverUtils.cpp:250
+ if (CallInst *CI = dyn_cast<CallInst>(&I)) {
+ for (Value *Op : CI->arg_operands())
+ if (Op->getType()->isPointerTy()) {
----------------
bmahjour wrote:
> RithikSharma wrote:
> > bmahjour wrote:
> > > I think the call itself should also go into the MemLocs vector.
> > CallInst returns none memory location, which won't be useful to find dependence info and we may have to skip it so I did not add it into the MemLocs in the first place.
> Then we have a problem if the memory accesses of a function are not represented through their arguments. For example consider:
> ```
> int a = 0;
>
> void foo() {
> a = 1;
> }
>
> int main() {
> foo();
> a = 3;
> return a;
> }
> ```
> In the case above `a = 3` should not be allowed to move before the call to `foo()`.
>
> If this information is not available through AliasAnalysis, then we have to check for it separately. One way to solve it is to look at the underlying object referenced by `I` and `Inst`, and if any of them is a global and one of the intervening instructions is a call that may have side-effect, then return false.
Please add this test case, and update the patch.
================
Comment at: llvm/lib/Transforms/Utils/CodeMoverUtils.cpp:298
+ return isDependenceSafe(I, *DI, InstsToCheck);
+ else if (AA)
+ return isDependenceSafe(I, *AA, InstsToCheck);
----------------
hiraditya wrote:
> `else` is not needed,
that's true, please remove the `else`.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D84589/new/
https://reviews.llvm.org/D84589
More information about the llvm-commits
mailing list