Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / SLPVectorizer / X86 / external-used-across-reductions.ll
blob31ad629160c8dd53fb54a7fe23ade2101ef8bfcf
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2 ; RUN: opt -mtriple=x86_64-unknown-linux-gnu -passes=slp-vectorizer -S < %s | FileCheck %s
4 define void @test() {
5 ; CHECK-LABEL: define void @test() {
6 ; CHECK-NEXT:  entry:
7 ; CHECK-NEXT:    [[IDX2:%.*]] = getelementptr [1000 x i64], ptr null, i64 0, i64 7
8 ; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x i64>, ptr [[IDX2]], align 8
9 ; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i64>, ptr [[IDX2]], align 8
10 ; CHECK-NEXT:    [[TMP3:%.*]] = load i64, ptr null, align 8
11 ; CHECK-NEXT:    br label [[LOOP:%.*]]
12 ; CHECK:       loop:
13 ; CHECK-NEXT:    [[PHI1:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[OP_RDX25:%.*]], [[LOOP]] ]
14 ; CHECK-NEXT:    [[TMP6:%.*]] = phi <8 x i64> [ [[TMP0]], [[ENTRY]] ], [ [[TMP1]], [[LOOP]] ]
15 ; CHECK-NEXT:    [[TMP7:%.*]] = mul <8 x i64> [[TMP6]], <i64 4, i64 4, i64 4, i64 4, i64 4, i64 4, i64 4, i64 4>
16 ; CHECK-NEXT:    [[TMP9:%.*]] = call i64 @llvm.vector.reduce.add.v8i64(<8 x i64> [[TMP7]])
17 ; CHECK-NEXT:    [[TMP8:%.*]] = call i64 @llvm.vector.reduce.add.v8i64(<8 x i64> [[TMP1]])
18 ; CHECK-NEXT:    [[TMP10:%.*]] = mul i64 [[TMP8]], 2
19 ; CHECK-NEXT:    [[OP_RDX33:%.*]] = add i64 [[TMP10]], [[TMP9]]
20 ; CHECK-NEXT:    [[OP_RDX25]] = add i64 [[OP_RDX33]], [[TMP3]]
21 ; CHECK-NEXT:    br label [[LOOP]]
23 entry:
24   %idx1 = getelementptr [1000 x i64], ptr null, i64 0, i64 9
25   %idx2 = getelementptr [1000 x i64], ptr null, i64 0, i64 7
26   %ld1 = load i64, ptr %idx2, align 8
27   %idx3 = getelementptr [1000 x i64], ptr null, i64 0, i64 8
28   %ld2 = load i64, ptr %idx3, align 16
29   %ld3 = load i64, ptr %idx1, align 8
30   %idx4 = getelementptr [1000 x i64], ptr null, i64 0, i64 10
31   %ld4 = load i64, ptr %idx4, align 16
32   %idx5 = getelementptr [1000 x i64], ptr null, i64 0, i64 11
33   %ld5 = load i64, ptr %idx5, align 8
34   %idx6 = getelementptr [1000 x i64], ptr null, i64 0, i64 12
35   %ld6 = load i64, ptr %idx6, align 16
36   %idx7 = getelementptr [1000 x i64], ptr null, i64 0, i64 13
37   %ld7 = load i64, ptr %idx7, align 8
38   %idx8 = getelementptr [1000 x i64], ptr null, i64 0, i64 14
39   %ld8 = load i64, ptr %idx8, align 16
40   %0 = load i64, ptr %idx2, align 8
41   %1 = load i64, ptr %idx3, align 16
42   %2 = load i64, ptr %idx1, align 8
43   %3 = load i64, ptr %idx4, align 16
44   %4 = load i64, ptr %idx5, align 8
45   %5 = load i64, ptr %idx6, align 16
46   %6 = load i64, ptr %idx7, align 8
47   %7 = load i64, ptr %idx8, align 16
48   %8 = load i64, ptr null, align 8
49   br label %loop
51 loop:                 ; preds = %loop, %entry
52   %9 = phi i64 [ %ld8, %entry ], [ %7, %loop ]
53   %10 = phi i64 [ %ld7, %entry ], [ %6, %loop ]
54   %11 = phi i64 [ %ld6, %entry ], [ %5, %loop ]
55   %12 = phi i64 [ %ld5, %entry ], [ %4, %loop ]
56   %13 = phi i64 [ %ld4, %entry ], [ %3, %loop ]
57   %14 = phi i64 [ %ld3, %entry ], [ %2, %loop ]
58   %15 = phi i64 [ %ld2, %entry ], [ %1, %loop ]
59   %16 = phi i64 [ %ld1, %entry ], [ %0, %loop ]
60   %phi1 = phi i64 [ 0, %entry ], [ %64, %loop ]
61   %17 = add i64 %16, %15
62   %18 = add i64 %17, %14
63   %19 = add i64 %18, %13
64   %20 = add i64 %19, %12
65   %21 = add i64 %20, %11
66   %22 = add i64 %21, %10
67   %23 = add i64 %22, %9
68   %24 = add i64 %23, %16
69   %25 = add i64 %24, %15
70   %26 = add i64 %25, %14
71   %27 = add i64 %26, %13
72   %28 = add i64 %27, %12
73   %29 = add i64 %28, %11
74   %30 = add i64 %29, %10
75   %31 = add i64 %30, %9
76   %32 = add i64 %31, %16
77   %33 = add i64 %32, %15
78   %34 = add i64 %33, %14
79   %35 = add i64 %34, %13
80   %36 = add i64 %35, %12
81   %37 = add i64 %36, %11
82   %38 = add i64 %37, %10
83   %39 = add i64 %38, %9
84   %40 = add i64 %39, %16
85   %41 = add i64 %40, %15
86   %42 = add i64 %41, %14
87   %43 = add i64 %42, %13
88   %44 = add i64 %43, %12
89   %45 = add i64 %44, %11
90   %46 = add i64 %45, %10
91   %47 = add i64 %46, %9
92   %48 = add i64 %47, %0
93   %49 = add i64 %48, %1
94   %50 = add i64 %49, %2
95   %51 = add i64 %50, %3
96   %52 = add i64 %51, %4
97   %53 = add i64 %52, %5
98   %54 = add i64 %53, %6
99   %55 = add i64 %54, %7
100   %56 = add i64 %55, %8
101   %57 = add i64 %56, %0
102   %58 = add i64 %57, %1
103   %59 = add i64 %58, %2
104   %60 = add i64 %59, %3
105   %61 = add i64 %60, %4
106   %62 = add i64 %61, %5
107   %63 = add i64 %62, %6
108   %64 = add i64 %63, %7
109   br label %loop