[PATCH] D93229: [VectorCombine] allow peeking through GEPs when creating a vector load

Roman Lebedev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 17 06:22:01 PST 2020


lebedev.ri added inline comments.


================
Comment at: llvm/lib/Transforms/Vectorize/VectorCombine.cpp:160
+    OffsetInBits = Offset.getZExtValue() * 8;
+    Alignment = commonAlignment(Alignment, Offset.getZExtValue());
+  }
----------------
spatel wrote:
> lebedev.ri wrote:
> > So we had `SrcPtr`, and split it into a base pointer `SrcPtr'`, and an offset `Offset`.
> > But i think it's `SrcPtr = SrcPtr' + Offset`,
> > so shouldn't the offset be negative here,
> > because the alignment is known for `SrcPtr`, not `SrcPtr'`?
> Good point!
> Intuitively, I couldn't see how it would make a difference if we negated the offset, so I looked at the implementation of MinAlign():
> https://github.com/llvm/llvm-project/blob/4c8276cdc120c24410dcd62a9986f04e7327fc2f/llvm/include/llvm/Support/MathExtras.h#L673
> 
> The optimized IR for that is:
> 
> ```
> define i64 @MinAlign(i64 %A, i64 %B) local_unnamed_addr #0 {
> entry:
>   %or = or i64 %B, %A
>   %add = sub i64 0, %or
>   %and = and i64 %or, %add
>   ret i64 %and
> }
> 
> ```
> 
> Double-check to make sure I didn't mess this up:
> https://alive2.llvm.org/ce/z/wRSjPD
> 
> So it's logically equivalent either way? At the least, I'll add a code comment.
STGM


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D93229/new/

https://reviews.llvm.org/D93229



More information about the llvm-commits mailing list