1; RUN: opt -passes=loop-vectorize -S -mattr=avx512f < %s | FileCheck %s 2 3target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 4target triple = "x86_64-unknown-linux-gnu" 5 6; This test checks that "gather" operation is choosen since it's cost is better 7; than interleaving pattern. 8; 9;unsigned long A[SIZE]; 10;unsigned long B[SIZE]; 11; 12;void foo() { 13; for (int i=0; i<N; i+=8) { 14; B[i] = A[i] + 5; 15; } 16;} 17 18@A = global [10240 x i64] zeroinitializer, align 16 19@B = global [10240 x i64] zeroinitializer, align 16 20 21 22; CHECK-LABEL: strided_load_i64 23; CHECK: masked.gather 24define void @strided_load_i64() { 25 br label %1 26 27; <label>:1: ; preds = %0, %1 28 %indvars.iv = phi i64 [ 0, %0 ], [ %indvars.iv.next, %1 ] 29 %2 = getelementptr inbounds [10240 x i64], ptr @A, i64 0, i64 %indvars.iv 30 %3 = load i64, ptr %2, align 16 31 %4 = add i64 %3, 5 32 %5 = getelementptr inbounds [10240 x i64], ptr @B, i64 0, i64 %indvars.iv 33 store i64 %4, ptr %5, align 16 34 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 8 35 %6 = icmp slt i64 %indvars.iv.next, 1024 36 br i1 %6, label %1, label %7 37 38; <label>:7: ; preds = %1 39 ret void 40} 41 42