xref: /llvm-project/llvm/test/Transforms/SLPVectorizer/revec.ll (revision f71ea4bc1b01fd7e29048db82b3e21fba74e8dab)
11813ffd6SHan-Kuan Chen; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
21813ffd6SHan-Kuan Chen; RUN: opt -passes=slp-vectorizer -S -slp-revec -slp-max-reg-size=1024 -slp-threshold=-100 %s | FileCheck %s
31813ffd6SHan-Kuan Chen
41813ffd6SHan-Kuan Chendefine void @test1(ptr %a, ptr %b, ptr %c) {
51813ffd6SHan-Kuan Chen; CHECK-LABEL: @test1(
61813ffd6SHan-Kuan Chen; CHECK-NEXT:  entry:
71813ffd6SHan-Kuan Chen; CHECK-NEXT:    [[TMP0:%.*]] = load <16 x i32>, ptr [[A:%.*]], align 4
81813ffd6SHan-Kuan Chen; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i32>, ptr [[B:%.*]], align 4
91813ffd6SHan-Kuan Chen; CHECK-NEXT:    [[TMP2:%.*]] = add <16 x i32> [[TMP1]], [[TMP0]]
101813ffd6SHan-Kuan Chen; CHECK-NEXT:    store <16 x i32> [[TMP2]], ptr [[C:%.*]], align 4
111813ffd6SHan-Kuan Chen; CHECK-NEXT:    ret void
121813ffd6SHan-Kuan Chen;
131813ffd6SHan-Kuan Chenentry:
141813ffd6SHan-Kuan Chen  %arrayidx3 = getelementptr inbounds i32, ptr %a, i64 4
151813ffd6SHan-Kuan Chen  %arrayidx7 = getelementptr inbounds i32, ptr %a, i64 8
161813ffd6SHan-Kuan Chen  %arrayidx11 = getelementptr inbounds i32, ptr %a, i64 12
171813ffd6SHan-Kuan Chen  %0 = load <4 x i32>, ptr %a, align 4
181813ffd6SHan-Kuan Chen  %1 = load <4 x i32>, ptr %arrayidx3, align 4
191813ffd6SHan-Kuan Chen  %2 = load <4 x i32>, ptr %arrayidx7, align 4
201813ffd6SHan-Kuan Chen  %3 = load <4 x i32>, ptr %arrayidx11, align 4
211813ffd6SHan-Kuan Chen  %arrayidx19 = getelementptr inbounds i32, ptr %b, i64 4
221813ffd6SHan-Kuan Chen  %arrayidx23 = getelementptr inbounds i32, ptr %b, i64 8
231813ffd6SHan-Kuan Chen  %arrayidx27 = getelementptr inbounds i32, ptr %b, i64 12
241813ffd6SHan-Kuan Chen  %4 = load <4 x i32>, ptr %b, align 4
251813ffd6SHan-Kuan Chen  %5 = load <4 x i32>, ptr %arrayidx19, align 4
261813ffd6SHan-Kuan Chen  %6 = load <4 x i32>, ptr %arrayidx23, align 4
271813ffd6SHan-Kuan Chen  %7 = load <4 x i32>, ptr %arrayidx27, align 4
281813ffd6SHan-Kuan Chen  %add.i = add <4 x i32> %4, %0
291813ffd6SHan-Kuan Chen  %add.i63 = add <4 x i32> %5, %1
301813ffd6SHan-Kuan Chen  %add.i64 = add <4 x i32> %6, %2
311813ffd6SHan-Kuan Chen  %add.i65 = add <4 x i32> %7, %3
321813ffd6SHan-Kuan Chen  %arrayidx36 = getelementptr inbounds i32, ptr %c, i64 4
331813ffd6SHan-Kuan Chen  %arrayidx39 = getelementptr inbounds i32, ptr %c, i64 8
341813ffd6SHan-Kuan Chen  %arrayidx42 = getelementptr inbounds i32, ptr %c, i64 12
351813ffd6SHan-Kuan Chen  store <4 x i32> %add.i, ptr %c, align 4
361813ffd6SHan-Kuan Chen  store <4 x i32> %add.i63, ptr %arrayidx36, align 4
371813ffd6SHan-Kuan Chen  store <4 x i32> %add.i64, ptr %arrayidx39, align 4
381813ffd6SHan-Kuan Chen  store <4 x i32> %add.i65, ptr %arrayidx42, align 4
391813ffd6SHan-Kuan Chen  ret void
401813ffd6SHan-Kuan Chen}
4139bb244aSHan-Kuan Chen
4239bb244aSHan-Kuan Chendefine void @test2(ptr %in, ptr %out) {
4339bb244aSHan-Kuan Chen; CHECK-LABEL: @test2(
4439bb244aSHan-Kuan Chen; CHECK-NEXT:  entry:
4539bb244aSHan-Kuan Chen; CHECK-NEXT:    [[TMP0:%.*]] = load <16 x i16>, ptr [[IN:%.*]], align 2
4639bb244aSHan-Kuan Chen; CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i16> @llvm.sadd.sat.v16i16(<16 x i16> [[TMP0]], <16 x i16> [[TMP0]])
4739bb244aSHan-Kuan Chen; CHECK-NEXT:    store <16 x i16> [[TMP1]], ptr [[OUT:%.*]], align 2
4839bb244aSHan-Kuan Chen; CHECK-NEXT:    ret void
4939bb244aSHan-Kuan Chen;
5039bb244aSHan-Kuan Chenentry:
5139bb244aSHan-Kuan Chen  %0 = getelementptr i16, ptr %in, i64 8
5239bb244aSHan-Kuan Chen  %1 = load <8 x i16>, ptr %in, align 2
5339bb244aSHan-Kuan Chen  %2 = load <8 x i16>, ptr %0, align 2
5439bb244aSHan-Kuan Chen  %3 = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %1, <8 x i16> %1)
5539bb244aSHan-Kuan Chen  %4 = call <8 x i16> @llvm.sadd.sat.v8i16(<8 x i16> %2, <8 x i16> %2)
5639bb244aSHan-Kuan Chen  %5 = getelementptr i16, ptr %out, i64 8
5739bb244aSHan-Kuan Chen  store <8 x i16> %3, ptr %out, align 2
5839bb244aSHan-Kuan Chen  store <8 x i16> %4, ptr %5, align 2
5939bb244aSHan-Kuan Chen  ret void
6039bb244aSHan-Kuan Chen}
61b5a7d3b6SHan-Kuan Chen
62b5a7d3b6SHan-Kuan Chendefine void @test3(ptr %x, ptr %y, ptr %z) {
63b5a7d3b6SHan-Kuan Chen; CHECK-LABEL: @test3(
64b5a7d3b6SHan-Kuan Chen; CHECK-NEXT:  entry:
65b5a7d3b6SHan-Kuan Chen; CHECK-NEXT:    [[TMP0:%.*]] = insertelement <2 x ptr> poison, ptr [[X:%.*]], i32 0
66b5a7d3b6SHan-Kuan Chen; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x ptr> [[TMP0]], ptr [[Y:%.*]], i32 1
67b5a7d3b6SHan-Kuan Chen; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <2 x ptr> [[TMP1]], zeroinitializer
68b5a7d3b6SHan-Kuan Chen; CHECK-NEXT:    [[TMP3:%.*]] = load <8 x i32>, ptr [[X]], align 4
69b5a7d3b6SHan-Kuan Chen; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i32>, ptr [[Y]], align 4
70b5a7d3b6SHan-Kuan Chen; CHECK-NEXT:    [[TMP5:%.*]] = shufflevector <2 x i1> [[TMP2]], <2 x i1> poison, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1>
71b5a7d3b6SHan-Kuan Chen; CHECK-NEXT:    [[TMP6:%.*]] = select <8 x i1> [[TMP5]], <8 x i32> [[TMP3]], <8 x i32> [[TMP4]]
72b5a7d3b6SHan-Kuan Chen; CHECK-NEXT:    store <8 x i32> [[TMP6]], ptr [[Z:%.*]], align 4
73b5a7d3b6SHan-Kuan Chen; CHECK-NEXT:    ret void
74b5a7d3b6SHan-Kuan Chen;
75b5a7d3b6SHan-Kuan Chenentry:
76b5a7d3b6SHan-Kuan Chen  %0 = getelementptr inbounds i32, ptr %x, i64 4
77b5a7d3b6SHan-Kuan Chen  %1 = getelementptr inbounds i32, ptr %y, i64 4
78b5a7d3b6SHan-Kuan Chen  %2 = load <4 x i32>, ptr %x, align 4
79b5a7d3b6SHan-Kuan Chen  %3 = load <4 x i32>, ptr %0, align 4
80b5a7d3b6SHan-Kuan Chen  %4 = load <4 x i32>, ptr %y, align 4
81b5a7d3b6SHan-Kuan Chen  %5 = load <4 x i32>, ptr %1, align 4
82b5a7d3b6SHan-Kuan Chen  %6 = icmp eq ptr %x, null
83b5a7d3b6SHan-Kuan Chen  %7 = icmp eq ptr %y, null
84b5a7d3b6SHan-Kuan Chen  %8 = select i1 %6, <4 x i32> %2, <4 x i32> %4
85b5a7d3b6SHan-Kuan Chen  %9 = select i1 %7, <4 x i32> %3, <4 x i32> %5
86b5a7d3b6SHan-Kuan Chen  %10 = getelementptr inbounds i32, ptr %z, i64 4
87b5a7d3b6SHan-Kuan Chen  store <4 x i32> %8, ptr %z, align 4
88b5a7d3b6SHan-Kuan Chen  store <4 x i32> %9, ptr %10, align 4
89b5a7d3b6SHan-Kuan Chen  ret void
90b5a7d3b6SHan-Kuan Chen}
9197743b8bSHan-Kuan Chen
9297743b8bSHan-Kuan Chendefine void @test4(ptr %in, ptr %out) {
9397743b8bSHan-Kuan Chen; CHECK-LABEL: @test4(
9497743b8bSHan-Kuan Chen; CHECK-NEXT:  entry:
9597743b8bSHan-Kuan Chen; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x float>, ptr [[IN:%.*]], align 4
96cb5046daSAlexey Bataev; CHECK-NEXT:    [[TMP2:%.*]] = call <16 x float> @llvm.vector.insert.v16f32.v8f32(<16 x float> poison, <8 x float> [[TMP0]], i64 0)
9797743b8bSHan-Kuan Chen; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <16 x float> [[TMP2]], <16 x float> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
9897743b8bSHan-Kuan Chen; CHECK-NEXT:    [[TMP4:%.*]] = call <16 x float> @llvm.vector.insert.v16f32.v8f32(<16 x float> poison, <8 x float> zeroinitializer, i64 0)
9997743b8bSHan-Kuan Chen; CHECK-NEXT:    [[TMP5:%.*]] = call <16 x float> @llvm.vector.insert.v16f32.v8f32(<16 x float> [[TMP4]], <8 x float> zeroinitializer, i64 8)
10097743b8bSHan-Kuan Chen; CHECK-NEXT:    [[TMP6:%.*]] = fmul <16 x float> [[TMP3]], [[TMP5]]
101cb5046daSAlexey Bataev; CHECK-NEXT:    [[TMP8:%.*]] = call <16 x float> @llvm.vector.insert.v16f32.v8f32(<16 x float> poison, <8 x float> zeroinitializer, i64 8)
10297743b8bSHan-Kuan Chen; CHECK-NEXT:    [[TMP9:%.*]] = shufflevector <16 x float> [[TMP2]], <16 x float> [[TMP8]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
10397743b8bSHan-Kuan Chen; CHECK-NEXT:    [[TMP10:%.*]] = fadd <16 x float> [[TMP9]], [[TMP6]]
10497743b8bSHan-Kuan Chen; CHECK-NEXT:    [[TMP11:%.*]] = fcmp ogt <16 x float> [[TMP10]], [[TMP5]]
10597743b8bSHan-Kuan Chen; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr i1, ptr [[OUT:%.*]], i64 8
10697743b8bSHan-Kuan Chen; CHECK-NEXT:    [[TMP13:%.*]] = call <8 x i1> @llvm.vector.extract.v8i1.v16i1(<16 x i1> [[TMP11]], i64 8)
10797743b8bSHan-Kuan Chen; CHECK-NEXT:    store <8 x i1> [[TMP13]], ptr [[OUT]], align 1
10897743b8bSHan-Kuan Chen; CHECK-NEXT:    [[TMP14:%.*]] = call <8 x i1> @llvm.vector.extract.v8i1.v16i1(<16 x i1> [[TMP11]], i64 0)
10997743b8bSHan-Kuan Chen; CHECK-NEXT:    store <8 x i1> [[TMP14]], ptr [[TMP12]], align 1
11097743b8bSHan-Kuan Chen; CHECK-NEXT:    ret void
11197743b8bSHan-Kuan Chen;
11297743b8bSHan-Kuan Chenentry:
11397743b8bSHan-Kuan Chen  %0 = load <8 x float>, ptr %in, align 4
11497743b8bSHan-Kuan Chen  %1 = fmul <8 x float> %0, zeroinitializer
11597743b8bSHan-Kuan Chen  %2 = fmul <8 x float> %0, zeroinitializer
11697743b8bSHan-Kuan Chen  %3 = fadd <8 x float> zeroinitializer, %1
11797743b8bSHan-Kuan Chen  %4 = fadd <8 x float> %0, %2
11897743b8bSHan-Kuan Chen  %5 = fcmp ogt <8 x float> %3, zeroinitializer
11997743b8bSHan-Kuan Chen  %6 = fcmp ogt <8 x float> %4, zeroinitializer
12097743b8bSHan-Kuan Chen  %7 = getelementptr i1, ptr %out, i64 8
12197743b8bSHan-Kuan Chen  store <8 x i1> %5, ptr %out, align 1
12297743b8bSHan-Kuan Chen  store <8 x i1> %6, ptr %7, align 1
12397743b8bSHan-Kuan Chen  ret void
12497743b8bSHan-Kuan Chen}
1257a4fc749SHan-Kuan Chen
1267a4fc749SHan-Kuan Chendefine void @test5(ptr %ptr0, ptr %ptr1) {
1277a4fc749SHan-Kuan Chen; CHECK-LABEL: @test5(
1287a4fc749SHan-Kuan Chen; CHECK-NEXT:  entry:
1297a4fc749SHan-Kuan Chen; CHECK-NEXT:    [[GETELEMENTPTR0:%.*]] = getelementptr i8, ptr null, i64 0
1307a4fc749SHan-Kuan Chen; CHECK-NEXT:    [[TMP0:%.*]] = insertelement <4 x ptr> <ptr null, ptr null, ptr undef, ptr undef>, ptr [[GETELEMENTPTR0]], i32 2
1317a4fc749SHan-Kuan Chen; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <4 x ptr> [[TMP0]], ptr null, i32 3
1327a4fc749SHan-Kuan Chen; CHECK-NEXT:    [[TMP2:%.*]] = icmp ult <4 x ptr> zeroinitializer, [[TMP1]]
1337a4fc749SHan-Kuan Chen; CHECK-NEXT:    [[TMP3:%.*]] = insertelement <4 x ptr> <ptr poison, ptr null, ptr null, ptr null>, ptr [[PTR0:%.*]], i32 0
1347a4fc749SHan-Kuan Chen; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <4 x ptr> [[TMP1]], ptr [[PTR1:%.*]], i32 3
1357a4fc749SHan-Kuan Chen; CHECK-NEXT:    [[TMP5:%.*]] = icmp ult <4 x ptr> [[TMP3]], [[TMP4]]
1367a4fc749SHan-Kuan Chen; CHECK-NEXT:    ret void
1377a4fc749SHan-Kuan Chen;
1387a4fc749SHan-Kuan Chenentry:
1397a4fc749SHan-Kuan Chen  %getelementptr0 = getelementptr i8, ptr null, i64 0
1407a4fc749SHan-Kuan Chen  %0 = insertelement <4 x ptr> <ptr null, ptr null, ptr undef, ptr undef>, ptr %getelementptr0, i32 2
1417a4fc749SHan-Kuan Chen  %1 = insertelement <4 x ptr> %0, ptr null, i32 3
1427a4fc749SHan-Kuan Chen  %2 = icmp ult <4 x ptr> zeroinitializer, %1
1437a4fc749SHan-Kuan Chen  %3 = insertelement <4 x ptr> <ptr poison, ptr null, ptr null, ptr null>, ptr %ptr0, i32 0
1447a4fc749SHan-Kuan Chen  %4 = insertelement <4 x ptr> %1, ptr %ptr1, i32 3
1457a4fc749SHan-Kuan Chen  %5 = icmp ult <4 x ptr> %3, %4
1467a4fc749SHan-Kuan Chen  ret void
1477a4fc749SHan-Kuan Chen}
148b4b0c023SHan-Kuan Chen
149b4b0c023SHan-Kuan Chendefine <4 x i1> @test6(ptr %in1, ptr %in2) {
150b4b0c023SHan-Kuan Chen; CHECK-LABEL: @test6(
151b4b0c023SHan-Kuan Chen; CHECK-NEXT:  entry:
152b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i32>, ptr [[IN1:%.*]], align 4
153b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[IN2:%.*]], align 2
154cb5046daSAlexey Bataev; CHECK-NEXT:    [[TMP5:%.*]] = call <16 x i32> @llvm.vector.insert.v16i32.v4i32(<16 x i32> poison, <4 x i32> [[TMP0]], i64 0)
155b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP6:%.*]] = shufflevector <16 x i32> [[TMP5]], <16 x i32> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
156b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP7:%.*]] = call <16 x i32> @llvm.vector.insert.v16i32.v4i32(<16 x i32> poison, <4 x i32> zeroinitializer, i64 0)
157b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP8:%.*]] = call <16 x i32> @llvm.vector.insert.v16i32.v4i32(<16 x i32> [[TMP7]], <4 x i32> zeroinitializer, i64 4)
158b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP9:%.*]] = call <16 x i32> @llvm.vector.insert.v16i32.v4i32(<16 x i32> [[TMP8]], <4 x i32> zeroinitializer, i64 8)
159b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP10:%.*]] = call <16 x i32> @llvm.vector.insert.v16i32.v4i32(<16 x i32> [[TMP9]], <4 x i32> zeroinitializer, i64 12)
160b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP11:%.*]] = icmp ugt <16 x i32> [[TMP6]], [[TMP10]]
161cb5046daSAlexey Bataev; CHECK-NEXT:    [[TMP15:%.*]] = call <16 x i16> @llvm.vector.insert.v16i16.v4i16(<16 x i16> poison, <4 x i16> [[TMP1]], i64 0)
162b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP16:%.*]] = shufflevector <16 x i16> [[TMP15]], <16 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
163b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP17:%.*]] = call <16 x i16> @llvm.vector.insert.v16i16.v4i16(<16 x i16> poison, <4 x i16> zeroinitializer, i64 0)
164b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP18:%.*]] = call <16 x i16> @llvm.vector.insert.v16i16.v4i16(<16 x i16> [[TMP17]], <4 x i16> zeroinitializer, i64 4)
165b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP19:%.*]] = call <16 x i16> @llvm.vector.insert.v16i16.v4i16(<16 x i16> [[TMP18]], <4 x i16> zeroinitializer, i64 8)
166b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP20:%.*]] = call <16 x i16> @llvm.vector.insert.v16i16.v4i16(<16 x i16> [[TMP19]], <4 x i16> zeroinitializer, i64 12)
167b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP21:%.*]] = icmp eq <16 x i16> [[TMP16]], [[TMP20]]
168b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP22:%.*]] = and <16 x i1> [[TMP11]], [[TMP21]]
169b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP23:%.*]] = icmp ugt <16 x i32> [[TMP6]], [[TMP10]]
170b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP24:%.*]] = and <16 x i1> [[TMP22]], [[TMP23]]
171b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP25:%.*]] = shufflevector <16 x i1> [[TMP24]], <16 x i1> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
172b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP26:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP25]])
173b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP27:%.*]] = insertelement <4 x i1> poison, i1 [[TMP26]], i64 0
174b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP28:%.*]] = shufflevector <16 x i1> [[TMP24]], <16 x i1> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
175b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP29:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP28]])
176b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP30:%.*]] = insertelement <4 x i1> [[TMP27]], i1 [[TMP29]], i64 1
177b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP31:%.*]] = shufflevector <16 x i1> [[TMP24]], <16 x i1> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
178b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP32:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP31]])
179b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP33:%.*]] = insertelement <4 x i1> [[TMP30]], i1 [[TMP32]], i64 2
180b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP34:%.*]] = shufflevector <16 x i1> [[TMP24]], <16 x i1> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
181b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP35:%.*]] = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> [[TMP34]])
182b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[TMP36:%.*]] = insertelement <4 x i1> [[TMP33]], i1 [[TMP35]], i64 3
183b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[VBSL:%.*]] = select <4 x i1> [[TMP36]], <4 x i32> <i32 1, i32 2, i32 3, i32 4>, <4 x i32> <i32 5, i32 6, i32 7, i32 8>
184b4b0c023SHan-Kuan Chen; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt <4 x i32> [[VBSL]], <i32 2, i32 3, i32 4, i32 5>
185b4b0c023SHan-Kuan Chen; CHECK-NEXT:    ret <4 x i1> [[CMP]]
186b4b0c023SHan-Kuan Chen;
187b4b0c023SHan-Kuan Chenentry:
188b4b0c023SHan-Kuan Chen  %0 = load <4 x i32>, ptr %in1, align 4
189b4b0c023SHan-Kuan Chen  %1 = load <4 x i16>, ptr %in2, align 2
190b4b0c023SHan-Kuan Chen  %cmp000 = icmp ugt <4 x i32> %0, zeroinitializer
191b4b0c023SHan-Kuan Chen  %cmp001 = icmp ugt <4 x i32> %0, zeroinitializer
192b4b0c023SHan-Kuan Chen  %cmp002 = icmp ugt <4 x i32> %0, zeroinitializer
193b4b0c023SHan-Kuan Chen  %cmp003 = icmp ugt <4 x i32> %0, zeroinitializer
194b4b0c023SHan-Kuan Chen  %cmp100 = icmp eq <4 x i16> %1, zeroinitializer
195b4b0c023SHan-Kuan Chen  %cmp101 = icmp eq <4 x i16> %1, zeroinitializer
196b4b0c023SHan-Kuan Chen  %cmp102 = icmp eq <4 x i16> %1, zeroinitializer
197b4b0c023SHan-Kuan Chen  %cmp103 = icmp eq <4 x i16> %1, zeroinitializer
198b4b0c023SHan-Kuan Chen  %and.cmp0 = and <4 x i1> %cmp000, %cmp100
199b4b0c023SHan-Kuan Chen  %and.cmp1 = and <4 x i1> %cmp001, %cmp101
200b4b0c023SHan-Kuan Chen  %and.cmp2 = and <4 x i1> %cmp002, %cmp102
201b4b0c023SHan-Kuan Chen  %and.cmp3 = and <4 x i1> %cmp003, %cmp103
202b4b0c023SHan-Kuan Chen  %cmp004 = icmp ugt <4 x i32> %0, zeroinitializer
203b4b0c023SHan-Kuan Chen  %cmp005 = icmp ugt <4 x i32> %0, zeroinitializer
204b4b0c023SHan-Kuan Chen  %cmp006 = icmp ugt <4 x i32> %0, zeroinitializer
205b4b0c023SHan-Kuan Chen  %cmp007 = icmp ugt <4 x i32> %0, zeroinitializer
206b4b0c023SHan-Kuan Chen  %and.cmp4 = and <4 x i1> %and.cmp0, %cmp004
207b4b0c023SHan-Kuan Chen  %and.cmp5 = and <4 x i1> %and.cmp1, %cmp005
208b4b0c023SHan-Kuan Chen  %and.cmp6 = and <4 x i1> %and.cmp2, %cmp006
209b4b0c023SHan-Kuan Chen  %and.cmp7 = and <4 x i1> %and.cmp3, %cmp007
210b4b0c023SHan-Kuan Chen  %or0 = or <4 x i1> %and.cmp5, %and.cmp4
211b4b0c023SHan-Kuan Chen  %or1 = or <4 x i1> %or0, %and.cmp6
212b4b0c023SHan-Kuan Chen  %or2 = or <4 x i1> %or1, %and.cmp7
213b4b0c023SHan-Kuan Chen  %vbsl = select <4 x i1> %or2, <4 x i32> <i32 1, i32 2, i32 3, i32 4>, <4 x i32> <i32 5, i32 6, i32 7, i32 8>
214b4b0c023SHan-Kuan Chen  %cmp = icmp ugt <4 x i32> %vbsl, <i32 2, i32 3, i32 4, i32 5>
215b4b0c023SHan-Kuan Chen  ret <4 x i1> %cmp
216b4b0c023SHan-Kuan Chen}
217875b551dSHan-Kuan Chen
218875b551dSHan-Kuan Chendefine void @test7() {
219875b551dSHan-Kuan Chen; CHECK-LABEL: @test7(
220875b551dSHan-Kuan Chen; CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i64> @llvm.vector.insert.v16i64.v8i64(<16 x i64> poison, <8 x i64> zeroinitializer, i64 0)
221875b551dSHan-Kuan Chen; CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i64> @llvm.vector.insert.v16i64.v8i64(<16 x i64> [[TMP1]], <8 x i64> zeroinitializer, i64 8)
222875b551dSHan-Kuan Chen; CHECK-NEXT:    [[TMP3:%.*]] = trunc <16 x i64> [[TMP2]] to <16 x i16>
223875b551dSHan-Kuan Chen; CHECK-NEXT:    store <16 x i16> [[TMP3]], ptr null, align 2
224875b551dSHan-Kuan Chen; CHECK-NEXT:    ret void
225875b551dSHan-Kuan Chen;
226875b551dSHan-Kuan Chen  %1 = getelementptr i8, ptr null, i64 16
227875b551dSHan-Kuan Chen  %2 = trunc <8 x i64> zeroinitializer to <8 x i16>
228875b551dSHan-Kuan Chen  store <8 x i16> %2, ptr %1, align 2
229875b551dSHan-Kuan Chen  %3 = trunc <8 x i64> zeroinitializer to <8 x i16>
230875b551dSHan-Kuan Chen  store <8 x i16> %3, ptr null, align 2
231875b551dSHan-Kuan Chen  ret void
232875b551dSHan-Kuan Chen}
2332256d00aSHan-Kuan Chen
2342256d00aSHan-Kuan Chendefine void @test8() {
2352256d00aSHan-Kuan Chen; CHECK-LABEL: @test8(
2362256d00aSHan-Kuan Chen; CHECK-NEXT:  entry:
2372256d00aSHan-Kuan Chen; CHECK-NEXT:    [[TMP0:%.*]] = call <8 x float> @llvm.vector.insert.v8f32.v2f32(<8 x float> poison, <2 x float> zeroinitializer, i64 0)
2382256d00aSHan-Kuan Chen; CHECK-NEXT:    [[TMP1:%.*]] = call <8 x float> @llvm.vector.insert.v8f32.v2f32(<8 x float> [[TMP0]], <2 x float> zeroinitializer, i64 2)
2392256d00aSHan-Kuan Chen; CHECK-NEXT:    [[TMP2:%.*]] = call <8 x float> @llvm.vector.insert.v8f32.v2f32(<8 x float> [[TMP1]], <2 x float> zeroinitializer, i64 4)
2402256d00aSHan-Kuan Chen; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x float> @llvm.vector.insert.v8f32.v2f32(<8 x float> [[TMP2]], <2 x float> zeroinitializer, i64 6)
2412256d00aSHan-Kuan Chen; CHECK-NEXT:    [[TMP4:%.*]] = call <4 x float> @llvm.vector.insert.v4f32.v2f32(<4 x float> poison, <2 x float> zeroinitializer, i64 0)
2422256d00aSHan-Kuan Chen; CHECK-NEXT:    [[TMP5:%.*]] = call <4 x float> @llvm.vector.insert.v4f32.v2f32(<4 x float> [[TMP4]], <2 x float> zeroinitializer, i64 2)
2432256d00aSHan-Kuan Chen; CHECK-NEXT:    br i1 false, label [[FOR0:%.*]], label [[FOR_BODY:%.*]]
2442256d00aSHan-Kuan Chen; CHECK:       for0:
2452256d00aSHan-Kuan Chen; CHECK-NEXT:    [[TMP6:%.*]] = phi <8 x float> [ [[TMP3]], [[ENTRY:%.*]] ], [ [[TMP8:%.*]], [[FOR_BODY]] ]
2462256d00aSHan-Kuan Chen; CHECK-NEXT:    ret void
2472256d00aSHan-Kuan Chen; CHECK:       for.body:
2482256d00aSHan-Kuan Chen; CHECK-NEXT:    [[TMP7:%.*]] = phi <4 x float> [ [[TMP7]], [[FOR_BODY]] ], [ [[TMP5]], [[ENTRY]] ]
2492256d00aSHan-Kuan Chen; CHECK-NEXT:    [[TMP8]] = shufflevector <4 x float> [[TMP7]], <4 x float> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
2502256d00aSHan-Kuan Chen; CHECK-NEXT:    br i1 false, label [[FOR0]], label [[FOR_BODY]]
2512256d00aSHan-Kuan Chen;
2522256d00aSHan-Kuan Chenentry:
2532256d00aSHan-Kuan Chen  br i1 false, label %for0, label %for.body
2542256d00aSHan-Kuan Chen
2552256d00aSHan-Kuan Chenfor0:
2562256d00aSHan-Kuan Chen  %0 = phi <2 x float> [ zeroinitializer, %entry ], [ %4, %for.body ]
2572256d00aSHan-Kuan Chen  %1 = phi <2 x float> [ zeroinitializer, %entry ], [ %5, %for.body ]
2582256d00aSHan-Kuan Chen  %2 = phi <2 x float> [ zeroinitializer, %entry ], [ %4, %for.body ]
2592256d00aSHan-Kuan Chen  %3 = phi <2 x float> [ zeroinitializer, %entry ], [ %5, %for.body ]
2602256d00aSHan-Kuan Chen  ret void
2612256d00aSHan-Kuan Chen
2622256d00aSHan-Kuan Chenfor.body:
2632256d00aSHan-Kuan Chen  %4 = phi <2 x float> [ %4, %for.body ], [ zeroinitializer, %entry ]
2642256d00aSHan-Kuan Chen  %5 = phi <2 x float> [ %5, %for.body ], [ zeroinitializer, %entry ]
2652256d00aSHan-Kuan Chen  br i1 false, label %for0, label %for.body
2662256d00aSHan-Kuan Chen}
2676aad4918SHan-Kuan Chen
2686aad4918SHan-Kuan Chendefine void @test9() {
2696aad4918SHan-Kuan Chen; CHECK-LABEL: @test9(
2706aad4918SHan-Kuan Chen; CHECK-NEXT:  entry:
2716aad4918SHan-Kuan Chen; CHECK-NEXT:    [[TMP0:%.*]] = call <8 x i16> @llvm.vector.insert.v8i16.v4i16(<8 x i16> poison, <4 x i16> zeroinitializer, i64 0)
2726aad4918SHan-Kuan Chen; CHECK-NEXT:    [[TMP1:%.*]] = call <8 x i16> @llvm.vector.insert.v8i16.v4i16(<8 x i16> [[TMP0]], <4 x i16> zeroinitializer, i64 4)
2736aad4918SHan-Kuan Chen; CHECK-NEXT:    br label [[FOR_BODY13:%.*]]
2746aad4918SHan-Kuan Chen; CHECK:       for.body13:
2756aad4918SHan-Kuan Chen; CHECK-NEXT:    [[TMP2:%.*]] = trunc <8 x i16> [[TMP1]] to <8 x i1>
2766aad4918SHan-Kuan Chen; CHECK-NEXT:    [[TMP3:%.*]] = zext <8 x i1> [[TMP2]] to <8 x i32>
2776aad4918SHan-Kuan Chen; CHECK-NEXT:    store <8 x i32> [[TMP3]], ptr null, align 4
2786aad4918SHan-Kuan Chen; CHECK-NEXT:    br label [[FOR_BODY13]]
2796aad4918SHan-Kuan Chen;
2806aad4918SHan-Kuan Chenentry:
2816aad4918SHan-Kuan Chen  br label %for.body13
2826aad4918SHan-Kuan Chen
2836aad4918SHan-Kuan Chenfor.body13:                                       ; preds = %for.body13, %entry
2846aad4918SHan-Kuan Chen  %vmovl.i111 = sext <4 x i16> zeroinitializer to <4 x i32>
2856aad4918SHan-Kuan Chen  %vmovl.i110 = sext <4 x i16> zeroinitializer to <4 x i32>
2866aad4918SHan-Kuan Chen  store <4 x i32> %vmovl.i111, ptr null, align 4
2876aad4918SHan-Kuan Chen  %add.ptr29 = getelementptr i8, ptr null, i64 16
2886aad4918SHan-Kuan Chen  store <4 x i32> %vmovl.i110, ptr %add.ptr29, align 4
2896aad4918SHan-Kuan Chen  br label %for.body13
2906aad4918SHan-Kuan Chen}
291246f3451SHan-Kuan Chen
292246f3451SHan-Kuan Chendefine void @test10() {
293246f3451SHan-Kuan Chen; CHECK-LABEL: @test10(
294246f3451SHan-Kuan Chen; CHECK-NEXT:  entry:
295246f3451SHan-Kuan Chen; CHECK-NEXT:    [[TMP0:%.*]] = load <16 x i8>, ptr null, align 1
296cb5046daSAlexey Bataev; CHECK-NEXT:    [[TMP2:%.*]] = call <32 x i8> @llvm.vector.insert.v32i8.v16i8(<32 x i8> poison, <16 x i8> [[TMP0]], i64 0)
297246f3451SHan-Kuan Chen; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <32 x i8> [[TMP2]], <32 x i8> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
298d7c44effSHan-Kuan Chen; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <32 x i8> [[TMP2]], <32 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
299246f3451SHan-Kuan Chen; CHECK-NEXT:    [[TMP5:%.*]] = sext <16 x i8> [[TMP4]] to <16 x i16>
300246f3451SHan-Kuan Chen; CHECK-NEXT:    [[TMP6:%.*]] = shufflevector <16 x i16> [[TMP5]], <16 x i16> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
301d7c44effSHan-Kuan Chen; CHECK-NEXT:    [[TMP7:%.*]] = shufflevector <16 x i16> [[TMP5]], <16 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
302246f3451SHan-Kuan Chen; CHECK-NEXT:    [[TMP8:%.*]] = trunc <16 x i16> [[TMP7]] to <16 x i8>
303246f3451SHan-Kuan Chen; CHECK-NEXT:    [[TMP9:%.*]] = sext <16 x i8> [[TMP8]] to <16 x i32>
304246f3451SHan-Kuan Chen; CHECK-NEXT:    store <16 x i32> [[TMP9]], ptr null, align 4
305246f3451SHan-Kuan Chen; CHECK-NEXT:    ret void
306246f3451SHan-Kuan Chen;
307246f3451SHan-Kuan Chenentry:
308246f3451SHan-Kuan Chen  %0 = load <16 x i8>, ptr null, align 1
309246f3451SHan-Kuan Chen  %shuffle.i = shufflevector <16 x i8> %0, <16 x i8> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
310246f3451SHan-Kuan Chen  %shuffle.i107 = shufflevector <16 x i8> %0, <16 x i8> zeroinitializer, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
311246f3451SHan-Kuan Chen  %vmovl.i106 = sext <8 x i8> %shuffle.i to <8 x i16>
312246f3451SHan-Kuan Chen  %vmovl.i = sext <8 x i8> %shuffle.i107 to <8 x i16>
313246f3451SHan-Kuan Chen  %shuffle.i113 = shufflevector <8 x i16> %vmovl.i106, <8 x i16> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
314246f3451SHan-Kuan Chen  %shuffle.i115 = shufflevector <8 x i16> %vmovl.i106, <8 x i16> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
315246f3451SHan-Kuan Chen  %shuffle.i112 = shufflevector <8 x i16> %vmovl.i, <8 x i16> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
316246f3451SHan-Kuan Chen  %shuffle.i114 = shufflevector <8 x i16> %vmovl.i, <8 x i16> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
317246f3451SHan-Kuan Chen  %vmovl.i111 = sext <4 x i16> %shuffle.i113 to <4 x i32>
318246f3451SHan-Kuan Chen  %vmovl.i110 = sext <4 x i16> %shuffle.i115 to <4 x i32>
319246f3451SHan-Kuan Chen  %vmovl.i109 = sext <4 x i16> %shuffle.i112 to <4 x i32>
320246f3451SHan-Kuan Chen  %vmovl.i108 = sext <4 x i16> %shuffle.i114 to <4 x i32>
321246f3451SHan-Kuan Chen  %add.ptr29 = getelementptr i8, ptr null, i64 16
322246f3451SHan-Kuan Chen  %add.ptr32 = getelementptr i8, ptr null, i64 32
323246f3451SHan-Kuan Chen  %add.ptr35 = getelementptr i8, ptr null, i64 48
324246f3451SHan-Kuan Chen  store <4 x i32> %vmovl.i111, ptr null, align 4
325246f3451SHan-Kuan Chen  store <4 x i32> %vmovl.i110, ptr %add.ptr29, align 4
326246f3451SHan-Kuan Chen  store <4 x i32> %vmovl.i109, ptr %add.ptr32, align 4
327246f3451SHan-Kuan Chen  store <4 x i32> %vmovl.i108, ptr %add.ptr35, align 4
328246f3451SHan-Kuan Chen  ret void
329246f3451SHan-Kuan Chen}
33081f8abdcSHan-Kuan Chen
33181f8abdcSHan-Kuan Chendefine void @test11(<2 x i64> %0, i64 %1, <2 x i64> %2) {
33281f8abdcSHan-Kuan Chen; CHECK-LABEL: @test11(
33381f8abdcSHan-Kuan Chen; CHECK-NEXT:  entry:
33481f8abdcSHan-Kuan Chen; CHECK-NEXT:    [[TMP3:%.*]] = insertelement <2 x i64> [[TMP0:%.*]], i64 [[TMP1:%.*]], i32 1
33581f8abdcSHan-Kuan Chen; CHECK-NEXT:    [[TMP4:%.*]] = add <2 x i64> <i64 5, i64 0>, [[TMP2:%.*]]
33681f8abdcSHan-Kuan Chen; CHECK-NEXT:    [[TMP5:%.*]] = trunc <2 x i64> [[TMP4]] to <2 x i16>
33781f8abdcSHan-Kuan Chen; CHECK-NEXT:    [[TMP6:%.*]] = call <4 x i16> @llvm.vector.insert.v4i16.v2i16(<4 x i16> poison, <2 x i16> [[TMP5]], i64 0)
33881f8abdcSHan-Kuan Chen; CHECK-NEXT:    [[TMP7:%.*]] = trunc <2 x i64> [[TMP3]] to <2 x i16>
33981f8abdcSHan-Kuan Chen; CHECK-NEXT:    [[TMP8:%.*]] = call <4 x i16> @llvm.vector.insert.v4i16.v2i16(<4 x i16> [[TMP6]], <2 x i16> [[TMP7]], i64 2)
34081f8abdcSHan-Kuan Chen; CHECK-NEXT:    [[TMP9:%.*]] = trunc <4 x i16> [[TMP8]] to <4 x i8>
34181f8abdcSHan-Kuan Chen; CHECK-NEXT:    [[TMP10:%.*]] = call <4 x i8> @llvm.vector.insert.v4i8.v2i8(<4 x i8> poison, <2 x i8> zeroinitializer, i64 0)
34281f8abdcSHan-Kuan Chen; CHECK-NEXT:    [[TMP11:%.*]] = call <4 x i8> @llvm.vector.insert.v4i8.v2i8(<4 x i8> [[TMP10]], <2 x i8> zeroinitializer, i64 2)
34381f8abdcSHan-Kuan Chen; CHECK-NEXT:    [[TMP12:%.*]] = urem <4 x i8> [[TMP9]], [[TMP11]]
34481f8abdcSHan-Kuan Chen; CHECK-NEXT:    [[TMP13:%.*]] = icmp ne <4 x i8> [[TMP12]], [[TMP11]]
34581f8abdcSHan-Kuan Chen; CHECK-NEXT:    ret void
34681f8abdcSHan-Kuan Chen;
34781f8abdcSHan-Kuan Chenentry:
34881f8abdcSHan-Kuan Chen  %3 = insertelement <2 x i64> %0, i64 %1, i32 1
34981f8abdcSHan-Kuan Chen  %4 = add <2 x i64> <i64 5, i64 0>, %2
35081f8abdcSHan-Kuan Chen  %5 = trunc <2 x i64> %3 to <2 x i8>
35181f8abdcSHan-Kuan Chen  %6 = trunc <2 x i64> %4 to <2 x i8>
35281f8abdcSHan-Kuan Chen  %7 = urem <2 x i8> %5, zeroinitializer
35381f8abdcSHan-Kuan Chen  %8 = urem <2 x i8> %6, zeroinitializer
35481f8abdcSHan-Kuan Chen  %9 = icmp ne <2 x i8> %7, zeroinitializer
35581f8abdcSHan-Kuan Chen  %10 = icmp ne <2 x i8> %8, zeroinitializer
35681f8abdcSHan-Kuan Chen  ret void
35781f8abdcSHan-Kuan Chen}
358e4aeeba8SHan-Kuan Chen
359e4aeeba8SHan-Kuan Chendefine void @test12() {
360e4aeeba8SHan-Kuan Chen; CHECK-LABEL: @test12(
361e4aeeba8SHan-Kuan Chen; CHECK-NEXT:  entry:
362e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr float, ptr null, i64 33
363e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr float, ptr null, i64 50
364e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr float, ptr null, i64 75
365e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP3:%.*]] = load <8 x float>, ptr [[TMP1]], align 4
366e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x float>, ptr [[TMP2]], align 4
367e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP5:%.*]] = load <16 x float>, ptr [[TMP0]], align 4
368e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP6:%.*]] = call <32 x float> @llvm.vector.insert.v32f32.v8f32(<32 x float> poison, <8 x float> [[TMP4]], i64 0)
369e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP7:%.*]] = call <32 x float> @llvm.vector.insert.v32f32.v8f32(<32 x float> [[TMP6]], <8 x float> [[TMP3]], i64 8)
370e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP8:%.*]] = call <32 x float> @llvm.vector.insert.v32f32.v16f32(<32 x float> [[TMP7]], <16 x float> [[TMP5]], i64 16)
371e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP9:%.*]] = fpext <32 x float> [[TMP8]] to <32 x double>
372e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP10:%.*]] = call <32 x double> @llvm.vector.insert.v32f64.v8f64(<32 x double> poison, <8 x double> zeroinitializer, i64 0)
373e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP11:%.*]] = call <32 x double> @llvm.vector.insert.v32f64.v8f64(<32 x double> [[TMP10]], <8 x double> zeroinitializer, i64 8)
374e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP12:%.*]] = call <32 x double> @llvm.vector.insert.v32f64.v8f64(<32 x double> [[TMP11]], <8 x double> zeroinitializer, i64 16)
375e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP13:%.*]] = call <32 x double> @llvm.vector.insert.v32f64.v8f64(<32 x double> [[TMP12]], <8 x double> zeroinitializer, i64 24)
376e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP14:%.*]] = fadd <32 x double> [[TMP13]], [[TMP9]]
377e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP15:%.*]] = fptrunc <32 x double> [[TMP14]] to <32 x float>
378e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP16:%.*]] = call <32 x float> @llvm.vector.insert.v32f32.v8f32(<32 x float> poison, <8 x float> zeroinitializer, i64 0)
379e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP17:%.*]] = call <32 x float> @llvm.vector.insert.v32f32.v8f32(<32 x float> [[TMP16]], <8 x float> zeroinitializer, i64 8)
380e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP18:%.*]] = call <32 x float> @llvm.vector.insert.v32f32.v8f32(<32 x float> [[TMP17]], <8 x float> zeroinitializer, i64 16)
381e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP19:%.*]] = call <32 x float> @llvm.vector.insert.v32f32.v8f32(<32 x float> [[TMP18]], <8 x float> zeroinitializer, i64 24)
382e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    [[TMP20:%.*]] = fcmp ogt <32 x float> [[TMP19]], [[TMP15]]
383e4aeeba8SHan-Kuan Chen; CHECK-NEXT:    ret void
384e4aeeba8SHan-Kuan Chen;
385e4aeeba8SHan-Kuan Chenentry:
386e4aeeba8SHan-Kuan Chen  %0 = getelementptr float, ptr null, i64 33
387e4aeeba8SHan-Kuan Chen  %1 = getelementptr float, ptr null, i64 41
388e4aeeba8SHan-Kuan Chen  %2 = getelementptr float, ptr null, i64 50
389e4aeeba8SHan-Kuan Chen  %3 = getelementptr float, ptr null, i64 75
390e4aeeba8SHan-Kuan Chen  %4 = load <8 x float>, ptr %0, align 4
391e4aeeba8SHan-Kuan Chen  %5 = load <8 x float>, ptr %1, align 4
392e4aeeba8SHan-Kuan Chen  %6 = load <8 x float>, ptr %2, align 4
393e4aeeba8SHan-Kuan Chen  %7 = load <8 x float>, ptr %3, align 4
394e4aeeba8SHan-Kuan Chen  %8 = fpext <8 x float> %4 to <8 x double>
395e4aeeba8SHan-Kuan Chen  %9 = fpext <8 x float> %5 to <8 x double>
396e4aeeba8SHan-Kuan Chen  %10 = fpext <8 x float> %6 to <8 x double>
397e4aeeba8SHan-Kuan Chen  %11 = fpext <8 x float> %7 to <8 x double>
398e4aeeba8SHan-Kuan Chen  %12 = fadd <8 x double> zeroinitializer, %8
399e4aeeba8SHan-Kuan Chen  %13 = fadd <8 x double> zeroinitializer, %9
400e4aeeba8SHan-Kuan Chen  %14 = fadd <8 x double> zeroinitializer, %10
401e4aeeba8SHan-Kuan Chen  %15 = fadd <8 x double> zeroinitializer, %11
402e4aeeba8SHan-Kuan Chen  %16 = fptrunc <8 x double> %12 to <8 x float>
403e4aeeba8SHan-Kuan Chen  %17 = fptrunc <8 x double> %13 to <8 x float>
404e4aeeba8SHan-Kuan Chen  %18 = fptrunc <8 x double> %14 to <8 x float>
405e4aeeba8SHan-Kuan Chen  %19 = fptrunc <8 x double> %15 to <8 x float>
406e4aeeba8SHan-Kuan Chen  %20 = fcmp ogt <8 x float> zeroinitializer, %16
407e4aeeba8SHan-Kuan Chen  %21 = fcmp ogt <8 x float> zeroinitializer, %17
408e4aeeba8SHan-Kuan Chen  %22 = fcmp ogt <8 x float> zeroinitializer, %18
409e4aeeba8SHan-Kuan Chen  %23 = fcmp ogt <8 x float> zeroinitializer, %19
410e4aeeba8SHan-Kuan Chen  ret void
411e4aeeba8SHan-Kuan Chen}
41239913ae0SHan-Kuan Chen
41339913ae0SHan-Kuan Chendefine void @test13(<8 x i32> %0, ptr %out0, ptr %out1, ptr %out2) {
41439913ae0SHan-Kuan Chen; CHECK-LABEL: @test13(
41539913ae0SHan-Kuan Chen; CHECK-NEXT:  entry:
41639913ae0SHan-Kuan Chen; CHECK-NEXT:    [[TMP1:%.*]] = call <32 x i32> @llvm.vector.insert.v32i32.v8i32(<32 x i32> poison, <8 x i32> [[TMP0:%.*]], i64 0)
41739913ae0SHan-Kuan Chen; CHECK-NEXT:    [[TMP2:%.*]] = shufflevector <32 x i32> [[TMP1]], <32 x i32> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
41839913ae0SHan-Kuan Chen; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <32 x i32> [[TMP1]], <32 x i32> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
41939913ae0SHan-Kuan Chen; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <32 x i32> [[TMP1]], <32 x i32> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7>
42039913ae0SHan-Kuan Chen; CHECK-NEXT:    br label [[FOR_END_LOOPEXIT:%.*]]
42139913ae0SHan-Kuan Chen; CHECK:       for.end.loopexit:
42239913ae0SHan-Kuan Chen; CHECK-NEXT:    [[TMP5:%.*]] = phi <16 x i32> [ [[TMP4]], [[ENTRY:%.*]] ]
42339913ae0SHan-Kuan Chen; CHECK-NEXT:    [[TMP6:%.*]] = call <4 x i32> @llvm.vector.extract.v4i32.v16i32(<16 x i32> [[TMP5]], i64 12)
42439913ae0SHan-Kuan Chen; CHECK-NEXT:    [[OR0:%.*]] = or <4 x i32> [[TMP6]], zeroinitializer
42539913ae0SHan-Kuan Chen; CHECK-NEXT:    store <4 x i32> [[OR0]], ptr [[OUT0:%.*]], align 4
42639913ae0SHan-Kuan Chen; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i32> @llvm.vector.extract.v4i32.v16i32(<16 x i32> [[TMP4]], i64 0)
42739913ae0SHan-Kuan Chen; CHECK-NEXT:    store <4 x i32> [[TMP7]], ptr [[OUT1:%.*]], align 4
42839913ae0SHan-Kuan Chen; CHECK-NEXT:    [[TMP8:%.*]] = call <4 x i32> @llvm.vector.extract.v4i32.v16i32(<16 x i32> [[TMP4]], i64 8)
42939913ae0SHan-Kuan Chen; CHECK-NEXT:    store <4 x i32> [[TMP8]], ptr [[OUT2:%.*]], align 4
43039913ae0SHan-Kuan Chen; CHECK-NEXT:    ret void
43139913ae0SHan-Kuan Chen;
43239913ae0SHan-Kuan Chenentry:
43339913ae0SHan-Kuan Chen  %1 = shufflevector <8 x i32> %0, <8 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
43439913ae0SHan-Kuan Chen  %2 = shufflevector <8 x i32> %0, <8 x i32> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
43539913ae0SHan-Kuan Chen  %3 = shufflevector <8 x i32> %0, <8 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
43639913ae0SHan-Kuan Chen  %4 = shufflevector <8 x i32> %0, <8 x i32> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
43739913ae0SHan-Kuan Chen  br label %for.end.loopexit
43839913ae0SHan-Kuan Chen
43939913ae0SHan-Kuan Chenfor.end.loopexit:
44039913ae0SHan-Kuan Chen  %phi0 = phi <4 x i32> [ %1, %entry ]
44139913ae0SHan-Kuan Chen  %phi1 = phi <4 x i32> [ %2, %entry ]
44239913ae0SHan-Kuan Chen  %phi2 = phi <4 x i32> [ %3, %entry ]
44339913ae0SHan-Kuan Chen  %phi3 = phi <4 x i32> [ %4, %entry ]
44439913ae0SHan-Kuan Chen  %or0 = or <4 x i32> %phi1, zeroinitializer
44539913ae0SHan-Kuan Chen  store <4 x i32> %or0, ptr %out0, align 4
44639913ae0SHan-Kuan Chen  store <4 x i32> %1, ptr %out1, align 4
44739913ae0SHan-Kuan Chen  store <4 x i32> %4, ptr %out2, align 4
44839913ae0SHan-Kuan Chen  ret void
44939913ae0SHan-Kuan Chen}
450*f71ea4bcSHan-Kuan Chen
451*f71ea4bcSHan-Kuan Chendefine void @test14(<8 x i1> %0) {
452*f71ea4bcSHan-Kuan Chen; CHECK-LABEL: @test14(
453*f71ea4bcSHan-Kuan Chen; CHECK-NEXT:  entry:
454*f71ea4bcSHan-Kuan Chen; CHECK-NEXT:    [[TMP1:%.*]] = call <16 x i1> @llvm.vector.insert.v16i1.v8i1(<16 x i1> poison, <8 x i1> [[TMP0:%.*]], i64 0)
455*f71ea4bcSHan-Kuan Chen; CHECK-NEXT:    [[TMP2:%.*]] = shufflevector <16 x i1> [[TMP1]], <16 x i1> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
456*f71ea4bcSHan-Kuan Chen; CHECK-NEXT:    [[TMP3:%.*]] = sext <16 x i1> [[TMP2]] to <16 x i16>
457*f71ea4bcSHan-Kuan Chen; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <16 x i16> [[TMP3]], <16 x i16> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
458*f71ea4bcSHan-Kuan Chen; CHECK-NEXT:    [[TMP5:%.*]] = shufflevector <16 x i16> [[TMP3]], <16 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
459*f71ea4bcSHan-Kuan Chen; CHECK-NEXT:    [[TMP6:%.*]] = shufflevector <16 x i16> [[TMP3]], <16 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 4, i32 5, i32 6, i32 7>
460*f71ea4bcSHan-Kuan Chen; CHECK-NEXT:    br label [[FOR_END_LOOPEXIT:%.*]]
461*f71ea4bcSHan-Kuan Chen; CHECK:       for.end.loopexit:
462*f71ea4bcSHan-Kuan Chen; CHECK-NEXT:    [[TMP7:%.*]] = phi <16 x i16> [ [[TMP6]], [[ENTRY:%.*]] ]
463*f71ea4bcSHan-Kuan Chen; CHECK-NEXT:    [[TMP8:%.*]] = call <4 x i16> @llvm.vector.extract.v4i16.v16i16(<16 x i16> [[TMP7]], i64 12)
464*f71ea4bcSHan-Kuan Chen; CHECK-NEXT:    [[OR0:%.*]] = or <4 x i16> [[TMP8]], zeroinitializer
465*f71ea4bcSHan-Kuan Chen; CHECK-NEXT:    ret void
466*f71ea4bcSHan-Kuan Chen;
467*f71ea4bcSHan-Kuan Chenentry:
468*f71ea4bcSHan-Kuan Chen  %sext0 = sext <8 x i1> %0 to <8 x i16>
469*f71ea4bcSHan-Kuan Chen  %sext1 = sext <8 x i1> %0 to <8 x i16>
470*f71ea4bcSHan-Kuan Chen  %1 = shufflevector <8 x i16> %sext0, <8 x i16> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
471*f71ea4bcSHan-Kuan Chen  %2 = shufflevector <8 x i16> %sext0, <8 x i16> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
472*f71ea4bcSHan-Kuan Chen  %3 = shufflevector <8 x i16> %sext1, <8 x i16> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
473*f71ea4bcSHan-Kuan Chen  %4 = shufflevector <8 x i16> %sext1, <8 x i16> zeroinitializer, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
474*f71ea4bcSHan-Kuan Chen  br label %for.end.loopexit
475*f71ea4bcSHan-Kuan Chen
476*f71ea4bcSHan-Kuan Chenfor.end.loopexit:
477*f71ea4bcSHan-Kuan Chen  %phi0 = phi <4 x i16> [ %1, %entry ]
478*f71ea4bcSHan-Kuan Chen  %phi1 = phi <4 x i16> [ %2, %entry ]
479*f71ea4bcSHan-Kuan Chen  %phi2 = phi <4 x i16> [ %3, %entry ]
480*f71ea4bcSHan-Kuan Chen  %phi3 = phi <4 x i16> [ %4, %entry ]
481*f71ea4bcSHan-Kuan Chen  %or0 = or <4 x i16> %phi1, zeroinitializer
482*f71ea4bcSHan-Kuan Chen  ret void
483*f71ea4bcSHan-Kuan Chen}
484