[PATCH] D75238: [DAGCombine] Fix alias analysis for unaligned accesses
    Dave Green via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Fri Feb 28 05:19:05 PST 2020
    
    
  
dmgreen marked an inline comment as done.
dmgreen added inline comments.
================
Comment at: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:21131
+  int64_t Size0 = MUC0.NumBytes.hasValue() ? *MUC0.NumBytes : -1;
+  int64_t Size1 = MUC1.NumBytes.hasValue() ? *MUC1.NumBytes : -1;
   if (OrigAlignment0 == OrigAlignment1 && SrcValOffset0 != SrcValOffset1 &&
----------------
nickdesaulniers wrote:
> The hunk you modify on L21156-L21157 highlights was looks like maybe a pre-existing incorrect usage of `Optional::operator*`; there's no check that `MUC0.NumBytes` `hasValue` before making use of the value (which may not exist).  In particular, I'm concerned what the value of `-1` might do in those expressions.
> 
> Or you could do:
> 
> ```
> auto& Size0 = MUC0.NumBytes;
> auto& Size1 = MUC1.NumBytes;
> 
> if ( ... && Size0.hasValue() && Size0.hasValue() && ...)
>   foo(*Size0, *Size1)
> ```
> Though I'm not sure whether the lower hunk should have a guard as well vs use a value of `0`.  Using `-1` for a possible value of the `Optional<int64_t>` might be problematic, though I assume the number of bytes in a "memory use characteristic" is unlikely. (I wish the "LLVM Programmers Manual" had a section on `llvm::Optional`). So maybe it's ok to keep as is, but then I really think the lower hunk should also have some kind of guard.
Good point
I chose -1 as it's the same as MemoryLocation::UnknownSize (and only didn't use that directly here as `(int64_t)MemoryLocation::UnknownSize` makes things difficult to follow with how verbose it is). That Size is not passed straight through to AA->alias below though, so might cause weirdness if there was ever a case where MUC0.MMO had a value but Size didn't.
I'll changed it to how you suggest, with the references, and added the checks below too in case.
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D75238/new/
https://reviews.llvm.org/D75238
    
    
More information about the llvm-commits
mailing list