Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / SLPVectorizer / X86 / gather-node-same-reduced.ll
blob42ed26d82e036d3185329b30d64c2e82f48b27e7
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2 ; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux < %s | FileCheck %s
4 define i64 @test(ptr %p) {
5 ; CHECK-LABEL: define i64 @test(
6 ; CHECK-SAME: ptr [[P:%.*]]) {
7 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[P]], i64 12
8 ; CHECK-NEXT:    [[TMP2:%.*]] = xor <4 x i32> zeroinitializer, zeroinitializer
9 ; CHECK-NEXT:    [[TMP3:%.*]] = xor <4 x i32> [[TMP2]], zeroinitializer
10 ; CHECK-NEXT:    [[TMP4:%.*]] = xor <4 x i32> [[TMP3]], zeroinitializer
11 ; CHECK-NEXT:    [[TMP5:%.*]] = xor <4 x i32> [[TMP4]], zeroinitializer
12 ; CHECK-NEXT:    [[TMP6:%.*]] = xor <4 x i32> [[TMP5]], zeroinitializer
13 ; CHECK-NEXT:    [[TMP7:%.*]] = xor <4 x i32> [[TMP6]], zeroinitializer
14 ; CHECK-NEXT:    [[TMP8:%.*]] = xor <4 x i32> [[TMP7]], zeroinitializer
15 ; CHECK-NEXT:    [[TMP9:%.*]] = xor <4 x i32> [[TMP8]], zeroinitializer
16 ; CHECK-NEXT:    [[TMP10:%.*]] = xor <4 x i32> [[TMP9]], zeroinitializer
17 ; CHECK-NEXT:    [[TMP11:%.*]] = xor <4 x i32> [[TMP10]], zeroinitializer
18 ; CHECK-NEXT:    [[TMP12:%.*]] = trunc <4 x i32> [[TMP11]] to <4 x i8>
19 ; CHECK-NEXT:    store <4 x i8> [[TMP12]], ptr [[TMP1]], align 1
20 ; CHECK-NEXT:    ret i64 0
22   %1 = getelementptr i8, ptr %p, i64 13
23   %2 = getelementptr i8, ptr %p, i64 14
24   %3 = getelementptr i8, ptr %p, i64 15
25   %4 = getelementptr i8, ptr %p, i64 12
26   %5 = zext i8 0 to i32
27   %6 = and i32 %5, 0
28   %.not866 = icmp eq i32 %6, 0
29   %7 = select i1 %.not866, i32 0, i32 0
30   %8 = xor i32 0, %7
31   %9 = zext i8 0 to i32
32   %10 = and i32 %9, 0
33   %.not871 = icmp eq i32 %10, 0
34   %11 = select i1 %.not871, i32 0, i32 0
35   %12 = xor i32 0, %11
36   %13 = xor i32 %9, 0
37   %14 = xor i32 %13, 0
38   %15 = xor i32 %14, 0
39   %16 = xor i32 %15, 0
40   %17 = xor i32 %16, 0
41   %18 = xor i32 %17, %12
42   %19 = xor i32 %18, 0
43   %20 = xor i32 %19, 0
44   %21 = xor i32 %20, 0
45   %22 = xor i32 %21, 0
46   %23 = trunc i32 %22 to i8
47   store i8 %23, ptr %4, align 1
48   %24 = xor i32 %9, 0
49   %25 = xor i32 %24, 0
50   %26 = xor i32 %25, 0
51   %27 = xor i32 %26, 0
52   %28 = xor i32 %27, 0
53   %29 = xor i32 %28, %8
54   %30 = xor i32 %29, 0
55   %31 = xor i32 %30, 0
56   %32 = xor i32 %31, 0
57   %33 = xor i32 %32, 0
58   %34 = trunc i32 %33 to i8
59   store i8 %34, ptr %1, align 1
60   %35 = xor i32 0, %5
61   %36 = xor i32 %35, 0
62   %37 = xor i32 %36, 0
63   %38 = xor i32 %37, 0
64   %39 = xor i32 %38, 0
65   %40 = xor i32 %39, %8
66   %41 = xor i32 %40, 0
67   %42 = xor i32 %41, 0
68   %43 = xor i32 %42, 0
69   %44 = xor i32 %43, 0
70   %45 = trunc i32 %44 to i8
71   store i8 %45, ptr %2, align 1
72   %46 = xor i32 %35, 0
73   %47 = xor i32 %46, 0
74   %48 = xor i32 %47, 0
75   %49 = xor i32 %48, 0
76   %50 = xor i32 %49, %8
77   %51 = xor i32 %50, 0
78   %52 = xor i32 %51, 0
79   %53 = xor i32 %52, 0
80   %54 = xor i32 %53, 0
81   %55 = trunc i32 %54 to i8
82   store i8 %55, ptr %3, align 1
83   ret i64 0
86 define i64 @test1(ptr %p) {
87 ; CHECK-LABEL: define i64 @test1(
88 ; CHECK-SAME: ptr [[P:%.*]]) {
89 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[P]], i64 12
90 ; CHECK-NEXT:    [[TMP2:%.*]] = xor <4 x i32> zeroinitializer, zeroinitializer
91 ; CHECK-NEXT:    [[TMP3:%.*]] = xor <4 x i32> [[TMP2]], zeroinitializer
92 ; CHECK-NEXT:    [[TMP4:%.*]] = xor <4 x i32> [[TMP3]], zeroinitializer
93 ; CHECK-NEXT:    [[TMP5:%.*]] = xor <4 x i32> [[TMP4]], zeroinitializer
94 ; CHECK-NEXT:    [[TMP6:%.*]] = xor <4 x i32> [[TMP5]], zeroinitializer
95 ; CHECK-NEXT:    [[TMP7:%.*]] = xor <4 x i32> [[TMP6]], zeroinitializer
96 ; CHECK-NEXT:    [[TMP8:%.*]] = xor <4 x i32> [[TMP7]], zeroinitializer
97 ; CHECK-NEXT:    [[TMP9:%.*]] = xor <4 x i32> [[TMP8]], zeroinitializer
98 ; CHECK-NEXT:    [[TMP10:%.*]] = xor <4 x i32> [[TMP9]], zeroinitializer
99 ; CHECK-NEXT:    [[TMP11:%.*]] = xor <4 x i32> [[TMP10]], zeroinitializer
100 ; CHECK-NEXT:    [[TMP12:%.*]] = trunc <4 x i32> [[TMP11]] to <4 x i8>
101 ; CHECK-NEXT:    store <4 x i8> [[TMP12]], ptr [[TMP1]], align 1
102 ; CHECK-NEXT:    ret i64 0
104   %1 = getelementptr i8, ptr %p, i64 13
105   %2 = getelementptr i8, ptr %p, i64 14
106   %3 = getelementptr i8, ptr %p, i64 15
107   %4 = getelementptr i8, ptr %p, i64 12
108   %5 = zext i8 0 to i32
109   %6 = and i32 %5, 0
110   %.not866 = icmp eq i32 %6, 0
111   %7 = select i1 %.not866, i32 0, i32 0
112   %8 = xor i32 0, %7
113   %9 = zext i8 0 to i32
114   %10 = and i32 %9, 0
115   %.not869 = icmp eq i32 %10, 0
116   %11 = select i1 %.not869, i32 0, i32 0
117   %12 = xor i32 0, %11
118   %13 = zext i8 0 to i32
119   %14 = and i32 %13, 0
120   %.not871 = icmp eq i32 %14, 0
121   %15 = select i1 %.not871, i32 0, i32 0
122   %16 = xor i32 0, %15
123   %17 = zext i8 0 to i32
124   %18 = and i32 %17, 0
125   %.not874 = icmp eq i32 %18, 0
126   %19 = select i1 %.not874, i32 0, i32 0
127   %20 = xor i32 0, %19
128   %21 = xor i32 %13, 0
129   %22 = xor i32 %21, 0
130   %23 = xor i32 %22, 0
131   %24 = xor i32 %23, 0
132   %25 = xor i32 %24, 0
133   %26 = xor i32 %25, 0
134   %27 = xor i32 %26, %8
135   %28 = xor i32 %27, 0
136   %29 = xor i32 %28, 0
137   %30 = xor i32 %29, 0
138   %31 = trunc i32 %30 to i8
139   store i8 %31, ptr %4, align 1
140   %32 = xor i32 %13, 0
141   %33 = xor i32 %32, 0
142   %34 = xor i32 %33, 0
143   %35 = xor i32 %34, 0
144   %36 = xor i32 %35, 0
145   %37 = xor i32 %36, 0
146   %38 = xor i32 %37, %20
147   %39 = xor i32 %38, 0
148   %40 = xor i32 %39, 0
149   %41 = xor i32 %40, 0
150   %42 = trunc i32 %41 to i8
151   store i8 %42, ptr %1, align 1
152   %43 = xor i32 %9, 0
153   %44 = xor i32 %43, 0
154   %45 = xor i32 %44, 0
155   %46 = xor i32 %45, 0
156   %47 = xor i32 %46, 0
157   %48 = xor i32 %47, 0
158   %49 = xor i32 %48, %16
159   %50 = xor i32 %49, 0
160   %51 = xor i32 %50, 0
161   %52 = xor i32 %51, 0
162   %53 = trunc i32 %52 to i8
163   store i8 %53, ptr %2, align 1
164   %54 = xor i32 %43, 0
165   %55 = xor i32 %54, 0
166   %56 = xor i32 %55, 0
167   %57 = xor i32 %56, 0
168   %58 = xor i32 %57, 0
169   %59 = xor i32 %58, %12
170   %60 = xor i32 %59, 0
171   %61 = xor i32 %60, 0
172   %62 = xor i32 %61, 0
173   %63 = trunc i32 %62 to i8
174   store i8 %63, ptr %3, align 1
175   ret i64 0