1; RUN: opt -passes=loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -S %s | FileCheck --check-prefix=VF4 %s 2; RUN: opt -passes=loop-vectorize -force-vector-interleave=2 -force-vector-width=1 -S %s | FileCheck --check-prefix=IC2 %s 3 4; rdar://problem/12848162 5 6target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" 7 8@a = common global [2048 x i32] zeroinitializer, align 16 9 10define void @example12() { 11; VF4-LABEL: @example12( 12; VF4-LABEL: vector.body: 13; VF4: [[VEC_IND:%.+]] = phi <4 x i32> 14; VF4: store <4 x i32> [[VEC_IND]] 15; VF4: middle.block: 16; 17; IC2-LABEL: @example12( 18; IC2-LABEL: vector.body: 19; IC2-NEXT: [[INDEX:%.+]] = phi i64 [ 0, %vector.ph ] 20; IC2-NEXT: [[TRUNC:%.+]] = trunc i64 [[INDEX]] to i32 21; IC2-NEXT: [[TRUNC0:%.+]] = add i32 [[TRUNC]], 0 22; IC2-NEXT: [[TRUNC1:%.+]] = add i32 [[TRUNC]], 1 23; IC2: store i32 [[TRUNC0]], 24; IC2-NEXT: store i32 [[TRUNC1]], 25; 26entry: 27 br label %loop 28 29loop: 30 %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ] 31 %gep = getelementptr inbounds [2048 x i32], [2048 x i32]* @a, i64 0, i64 %iv 32 %iv.trunc = trunc i64 %iv to i32 33 store i32 %iv.trunc, i32* %gep, align 4 34 %iv.next = add i64 %iv, 1 35 %iv.next.trunc = trunc i64 %iv.next to i32 36 %exitcond = icmp eq i32 %iv.next.trunc, 1024 37 br i1 %exitcond, label %exit, label %loop 38 39exit: 40 ret void 41} 42 43