It's messy to pattern-match, and completely unnecessary: scalar indexes
work equally well.
See also discussion on D81620 and D82061.
Differential Revision: https://reviews.llvm.org/D82430
// vector case all of the indices must be equal.
if (!V->getType()->isIntOrIntVectorTy(32))
return false;
+ if (isa<ScalableVectorType>(V->getType()))
+ return false;
const Constant *C = dyn_cast<Constant>(V);
if (C && V->getType()->isVectorTy())
C = C->getSplatValue();
--- /dev/null
+; RUN: not llvm-as < %s >/dev/null 2> %t
+; RUN: FileCheck %s < %t
+; Test that a scalable vector struct index is rejected.
+
+; CHECK: invalid getelementptr indices
+
+define <vscale x 2 x i32*> @test7(<vscale x 2 x {i32, i32}*> %a) {
+ %w = getelementptr {i32, i32}, <vscale x 2 x {i32, i32}*> %a, <vscale x 2 x i32> zeroinitializer, <vscale x 2 x i32> zeroinitializer
+ ret <vscale x 2 x i32*> %w
+}