1; RUN: opt -loop-vectorize --force-vector-width=4 --force-vector-interleave=0 -S -o - < %s | FileCheck %s 2 3target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" 4target triple = "x86_64-unknown-linux-gnu" 5 6%0 = type { i32 } 7%1 = type { i64 } 8 9define void @foo(i64* %p, i64* %p.last) unnamed_addr #0 { 10; CHECK-LABEL: @foo( 11; CHECK: vector.body: 12; CHECK: [[WIDE_MASKED_GATHER0:%.*]] = call <4 x %0*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.0(<4 x %0**> [[TMP5:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %0*> undef) 13; CHECK-NEXT: [[WIDE_MASKED_GATHER1:%.*]] = call <4 x %0*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.0(<4 x %0**> [[TMP6:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %0*> undef) 14; CHECK-NEXT: [[WIDE_MASKED_GATHER2:%.*]] = call <4 x %0*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.0(<4 x %0**> [[TMP7:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %0*> undef) 15; CHECK-NEXT: [[WIDE_MASKED_GATHER3:%.*]] = call <4 x %0*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.0(<4 x %0**> [[TMP8:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %0*> undef) 16entry: 17 br label %loop 18 19loop: 20 %p2 = phi i64* [ %p, %entry ], [ %p.inc, %loop ] 21 %p.inc = getelementptr inbounds i64, i64* %p2, i64 2 22 %p3 = bitcast i64* %p2 to %0** 23 %v = load %0*, %0** %p3, align 8 24 %b = icmp eq i64* %p.inc, %p.last 25 br i1 %b, label %exit, label %loop 26 27exit: 28 ret void 29} 30 31define void @bar(i64* %p, i64* %p.last) unnamed_addr #0 { 32; CHECK-LABEL: @bar( 33; CHECK: vector.body: 34; CHECK: [[WIDE_MASKED_GATHER0:%.*]] = call <4 x %1*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.1(<4 x %1**> [[TMP5:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %1*> undef) 35; CHECK-NEXT: [[WIDE_MASKED_GATHER1:%.*]] = call <4 x %1*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.1(<4 x %1**> [[TMP6:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %1*> undef) 36; CHECK-NEXT: [[WIDE_MASKED_GATHER2:%.*]] = call <4 x %1*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.1(<4 x %1**> [[TMP7:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %1*> undef) 37; CHECK-NEXT: [[WIDE_MASKED_GATHER3:%.*]] = call <4 x %1*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.1(<4 x %1**> [[TMP8:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %1*> undef) 38entry: 39 br label %loop 40 41loop: 42 %p2 = phi i64* [ %p, %entry ], [ %p.inc, %loop ] 43 %p.inc = getelementptr inbounds i64, i64* %p2, i64 2 44 %p3 = bitcast i64* %p2 to %1** 45 %v = load %1*, %1** %p3, align 8 46 %b = icmp eq i64* %p.inc, %p.last 47 br i1 %b, label %exit, label %loop 48 49exit: 50 ret void 51} 52 53attributes #0 = { "target-cpu"="skylake" } 54 55