1; RUN: opt < %s -O1 -basicaa -slp-vectorizer -dce -S -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7-avx | 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;CHECK: load <2 x double>, <2 x double>*
7;CHECK: fadd <2 x double>
8;CHECK: store <2 x double>
9
10; Function Attrs: nounwind uwtable
11define void @foo(double* %x) #0 {
12  %1 = alloca double*, align 8
13  store double* %x, double** %1, align 8
14  %2 = load double*, double** %1, align 8
15  %3 = getelementptr inbounds double, double* %2, i64 0
16  %4 = load double, double* %3, align 8
17  %5 = load double*, double** %1, align 8
18  %6 = getelementptr inbounds double, double* %5, i64 0
19  %7 = load double, double* %6, align 8
20  %8 = fadd double %4, %7
21  %9 = load double*, double** %1, align 8
22  %10 = getelementptr inbounds double, double* %9, i64 0
23  %11 = load double, double* %10, align 8
24  %12 = fadd double %8, %11
25  %13 = load double*, double** %1, align 8
26  %14 = getelementptr inbounds double, double* %13, i64 0
27  store double %12, double* %14, align 8
28  %15 = load double*, double** %1, align 8
29  %16 = getelementptr inbounds double, double* %15, i64 1
30  %17 = load double, double* %16, align 8
31  %18 = load double*, double** %1, align 8
32  %19 = getelementptr inbounds double, double* %18, i64 1
33  %20 = load double, double* %19, align 8
34  %21 = fadd double %17, %20
35  %22 = load double*, double** %1, align 8
36  %23 = getelementptr inbounds double, double* %22, i64 1
37  %24 = load double, double* %23, align 8
38  %25 = fadd double %21, %24
39  %26 = load double*, double** %1, align 8
40  %27 = getelementptr inbounds double, double* %26, i64 1
41  store double %25, double* %27, align 8
42  %28 = load double*, double** %1, align 8
43  %29 = getelementptr inbounds double, double* %28, i64 2
44  %30 = load double, double* %29, align 8
45  %31 = load double*, double** %1, align 8
46  %32 = getelementptr inbounds double, double* %31, i64 2
47  %33 = load double, double* %32, align 8
48  %34 = fadd double %30, %33
49  %35 = load double*, double** %1, align 8
50  %36 = getelementptr inbounds double, double* %35, i64 2
51  %37 = load double, double* %36, align 8
52  %38 = fadd double %34, %37
53  %39 = load double*, double** %1, align 8
54  %40 = getelementptr inbounds double, double* %39, i64 2
55  store double %38, double* %40, align 8
56  %41 = load double*, double** %1, align 8
57  %42 = getelementptr inbounds double, double* %41, i64 3
58  %43 = load double, double* %42, align 8
59  %44 = load double*, double** %1, align 8
60  %45 = getelementptr inbounds double, double* %44, i64 3
61  %46 = load double, double* %45, align 8
62  %47 = fadd double %43, %46
63  %48 = load double*, double** %1, align 8
64  %49 = getelementptr inbounds double, double* %48, i64 3
65  %50 = load double, double* %49, align 8
66  %51 = fadd double %47, %50
67  %52 = load double*, double** %1, align 8
68  %53 = getelementptr inbounds double, double* %52, i64 3
69  store double %51, double* %53, align 8
70  ret void
71}
72
73attributes #0 = { nounwind }
74