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