; RUN: opt -instcombine -S -o - %s | FileCheck %s ; Tests that we don't crash upon encountering a vector GEP target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" %Dual = type { %Dual.72, %Partials.73 } %Dual.72 = type { double, %Partials } %Partials = type { [2 x double] } %Partials.73 = type { [2 x %Dual.72] } ; Function Attrs: sspreq define <8 x i64*> @"julia_axpy!_65480"(%Dual* %arg1, <8 x i64> %arg2) { top: ; CHECK: %VectorGep14 = getelementptr inbounds %Dual, %Dual* %arg1, <8 x i64> %arg2, i32 1, i32 0, i64 0, i32 1, i32 0, i64 0 %VectorGep14 = getelementptr inbounds %Dual, %Dual* %arg1, <8 x i64> %arg2, i32 1, i32 0, i64 0, i32 1, i32 0, i64 0 %0 = bitcast <8 x double*> %VectorGep14 to <8 x i64*> ret <8 x i64*> %0 } %struct.A = type { i32, %struct.B* } %struct.B = type { i64, %struct.C* } %struct.C = type { i64 } @G = internal global [65 x %struct.A] zeroinitializer, align 16 ; CHECK-LABEL: @test ; CHECK: ret <16 x i32*> getelementptr ([65 x %struct.A], [65 x %struct.A]* @G, <16 x i64> zeroinitializer, <16 x i64> , <16 x i32> zeroinitializer) define <16 x i32*> @test() { vector.body: %VectorGep = getelementptr [65 x %struct.A], [65 x %struct.A]* @G, <16 x i64> zeroinitializer, <16 x i64> , <16 x i32> zeroinitializer ret <16 x i32*> %VectorGep } ; CHECK-LABEL: @test2 ; CHECK: ret <16 x i32*> getelementptr ([65 x %struct.A], [65 x %struct.A]* @G, <16 x i64> zeroinitializer, <16 x i64> @test2() { vector.body: %VectorGep = getelementptr [65 x %struct.A], [65 x %struct.A]* @G, <16 x i32> zeroinitializer, <16 x i64> , <16 x i32> zeroinitializer ret <16 x i32*> %VectorGep } @g = external global i8, align 1 define <2 x i8*> @constant_zero_index() { ; CHECK-LABEL: @constant_zero_index( ; CHECK-NEXT: ret <2 x i8*> ; %gep = getelementptr i8, i8* @g, <2 x i64> zeroinitializer ret <2 x i8*> %gep } define <2 x i8*> @constant_undef_index() { ; CHECK-LABEL: @constant_undef_index( ; CHECK-NEXT: ret <2 x i8*> ; %gep = getelementptr i8, i8* @g, <2 x i64> undef ret <2 x i8*> %gep } define <2 x i8*> @constant_inbounds() { ; CHECK-LABEL: @constant_inbounds( ; CHECK-NEXT: ret <2 x i8*> getelementptr inbounds (i8, i8* @g, <2 x i64> ) ; %gep = getelementptr i8, i8* @g, <2 x i64> ret <2 x i8*> %gep }