[PATCH] D82061: [IR] Prefer scalar type for struct indexes in GEP constant expressions.
Eli Friedman via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 19 16:19:29 PDT 2020
efriedma marked an inline comment as done.
efriedma added inline comments.
================
Comment at: llvm/lib/IR/Constants.cpp:2192
+ !Idx->getType()->isVectorTy()) {
Idx = ConstantVector::getSplat(EltCount, Idx);
+ }
----------------
sdesmalen wrote:
> efriedma wrote:
> > sdesmalen wrote:
> > > What is the reason for not always using a scalar index value?
> > In my thinking, there are two reasons:
> >
> > 1. I wanted to be conservative; arbitrary constant expressions are legal in this position anyway, so the harm from code failing to understand a vector splat is much smaller.
> > 2. We don't want to accidentally change the result type of a GEP if every operand is a splat.
> Okay so if I understand that correctly, we can do this change safely for struct types without risking to change the result type. because in e.g.:
> ```%gep = getelementptr %struct, %struct* null, i32 0, <4 x i32> <i32 1, i32 1, i32 1, i32 1> ```
> the `i32 0` will always be expanded into a vector:
> ```%gep = getelementptr %struct, %struct* null, <4 x i32> zeroinitializer, i32 1```
> And so there is always at least one index that will remain a vector (splat).
Yes, exactly.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D82061/new/
https://reviews.llvm.org/D82061
More information about the llvm-commits
mailing list