f5e24674e8ffaa4b40b382359f60c48cef27b1d9
[oota-llvm.git] / test / Transforms / SLPVectorizer / X86 / pr19657.ll
1 ; RUN: opt < %s -O1 -basicaa -slp-vectorizer -dce -S -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7-avx | FileCheck %s
2
3 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
4 target triple = "x86_64-unknown-linux-gnu"
5
6 ;CHECK: load <2 x double>*
7 ;CHECK: fadd <2 x double>
8 ;CHECK: store <2 x double>
9
10 ; Function Attrs: nounwind uwtable
11 define void @foo(double* %x) #0 {
12   %1 = alloca double*, align 8
13   store double* %x, double** %1, align 8
14   %2 = load double** %1, align 8
15   %3 = getelementptr inbounds double, double* %2, i64 0
16   %4 = load double* %3, align 8
17   %5 = load double** %1, align 8
18   %6 = getelementptr inbounds double, double* %5, i64 0
19   %7 = load double* %6, align 8
20   %8 = fadd double %4, %7
21   %9 = load double** %1, align 8
22   %10 = getelementptr inbounds double, double* %9, i64 0
23   %11 = load double* %10, align 8
24   %12 = fadd double %8, %11
25   %13 = load 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** %1, align 8
29   %16 = getelementptr inbounds double, double* %15, i64 1
30   %17 = load double* %16, align 8
31   %18 = load double** %1, align 8
32   %19 = getelementptr inbounds double, double* %18, i64 1
33   %20 = load double* %19, align 8
34   %21 = fadd double %17, %20
35   %22 = load double** %1, align 8
36   %23 = getelementptr inbounds double, double* %22, i64 1
37   %24 = load double* %23, align 8
38   %25 = fadd double %21, %24
39   %26 = load 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** %1, align 8
43   %29 = getelementptr inbounds double, double* %28, i64 2
44   %30 = load double* %29, align 8
45   %31 = load double** %1, align 8
46   %32 = getelementptr inbounds double, double* %31, i64 2
47   %33 = load double* %32, align 8
48   %34 = fadd double %30, %33
49   %35 = load double** %1, align 8
50   %36 = getelementptr inbounds double, double* %35, i64 2
51   %37 = load double* %36, align 8
52   %38 = fadd double %34, %37
53   %39 = load 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** %1, align 8
57   %42 = getelementptr inbounds double, double* %41, i64 3
58   %43 = load double* %42, align 8
59   %44 = load double** %1, align 8
60   %45 = getelementptr inbounds double, double* %44, i64 3
61   %46 = load double* %45, align 8
62   %47 = fadd double %43, %46
63   %48 = load double** %1, align 8
64   %49 = getelementptr inbounds double, double* %48, i64 3
65   %50 = load double* %49, align 8
66   %51 = fadd double %47, %50
67   %52 = load 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
73 attributes #0 = { nounwind }