13d1c63eeSHan-Kuan Chen; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 22546ae4eSHan-Kuan Chen; RUN: opt -mtriple=riscv64 -mcpu=sifive-x280 -passes=slp-vectorizer -S -slp-revec -slp-max-reg-size=1024 -slp-threshold=-100 %s | FileCheck --check-prefixes=CHECK,POWEROF2 %s 32546ae4eSHan-Kuan Chen; RUN: opt -mtriple=riscv64 -mcpu=sifive-x280 -passes=slp-vectorizer -S -slp-revec -slp-max-reg-size=1024 -slp-threshold=-100 -slp-vectorize-non-power-of-2 %s | FileCheck --check-prefixes=CHECK,NONPOWEROF2 %s 43d1c63eeSHan-Kuan Chen 53d1c63eeSHan-Kuan Chendefine i32 @test() { 63d1c63eeSHan-Kuan Chen; CHECK-LABEL: @test( 73d1c63eeSHan-Kuan Chen; CHECK-NEXT: entry: 83d1c63eeSHan-Kuan Chen; CHECK-NEXT: br label [[IF_END_I87:%.*]] 93d1c63eeSHan-Kuan Chen; CHECK: if.end.i87: 1038fffa63SPaul Walker; CHECK-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> getelementptr (i32, <4 x ptr> <ptr inttoptr (i64 64036 to ptr), ptr inttoptr (i64 64036 to ptr), ptr inttoptr (i64 64064 to ptr), ptr inttoptr (i64 64064 to ptr)>, <4 x i64> <i64 0, i64 1, i64 0, i64 1>), i32 4, <4 x i1> splat (i1 true), <4 x i32> poison) 11cb5046daSAlexey Bataev; CHECK-NEXT: [[TMP2:%.*]] = call <4 x i32> @llvm.vector.insert.v4i32.v2i32(<4 x i32> poison, <2 x i32> zeroinitializer, i64 2) 123d1c63eeSHan-Kuan Chen; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> [[TMP2]], <4 x i32> <i32 0, i32 1, i32 6, i32 7> 133d1c63eeSHan-Kuan Chen; CHECK-NEXT: switch i32 0, label [[SW_BB509_I:%.*]] [ 143d1c63eeSHan-Kuan Chen; CHECK-NEXT: i32 1, label [[SW_BB509_I]] 153d1c63eeSHan-Kuan Chen; CHECK-NEXT: i32 0, label [[IF_THEN458_I:%.*]] 163d1c63eeSHan-Kuan Chen; CHECK-NEXT: ] 173d1c63eeSHan-Kuan Chen; CHECK: if.then458.i: 183d1c63eeSHan-Kuan Chen; CHECK-NEXT: br label [[SW_BB509_I]] 193d1c63eeSHan-Kuan Chen; CHECK: sw.bb509.i: 203d1c63eeSHan-Kuan Chen; CHECK-NEXT: [[TMP4:%.*]] = phi <4 x i32> [ [[TMP0]], [[IF_THEN458_I]] ], [ [[TMP3]], [[IF_END_I87]] ], [ [[TMP3]], [[IF_END_I87]] ] 213d1c63eeSHan-Kuan Chen; CHECK-NEXT: ret i32 0 223d1c63eeSHan-Kuan Chen; 233d1c63eeSHan-Kuan Chenentry: 243d1c63eeSHan-Kuan Chen %getelementptr0 = getelementptr i8, ptr null, i64 64036 253d1c63eeSHan-Kuan Chen %getelementptr1 = getelementptr i8, ptr null, i64 64064 263d1c63eeSHan-Kuan Chen br label %if.end.i87 273d1c63eeSHan-Kuan Chen 283d1c63eeSHan-Kuan Chenif.end.i87: ; preds = %entry 293d1c63eeSHan-Kuan Chen %0 = load <2 x i32>, ptr %getelementptr0, align 4 303d1c63eeSHan-Kuan Chen %1 = load <2 x i32>, ptr %getelementptr1, align 8 313d1c63eeSHan-Kuan Chen switch i32 0, label %sw.bb509.i [ 323d1c63eeSHan-Kuan Chen i32 1, label %sw.bb509.i 333d1c63eeSHan-Kuan Chen i32 0, label %if.then458.i 343d1c63eeSHan-Kuan Chen ] 353d1c63eeSHan-Kuan Chen 363d1c63eeSHan-Kuan Chenif.then458.i: ; preds = %if.end.i87 373d1c63eeSHan-Kuan Chen br label %sw.bb509.i 383d1c63eeSHan-Kuan Chen 393d1c63eeSHan-Kuan Chensw.bb509.i: ; preds = %if.then458.i, %if.end.i87, %if.end.i87 403d1c63eeSHan-Kuan Chen %4 = phi <2 x i32> [ %0, %if.then458.i ], [ %0, %if.end.i87 ], [ %0, %if.end.i87 ] 413d1c63eeSHan-Kuan Chen %5 = phi <2 x i32> [ %1, %if.then458.i ], [ zeroinitializer, %if.end.i87 ], [ zeroinitializer, %if.end.i87 ] 423d1c63eeSHan-Kuan Chen ret i32 0 433d1c63eeSHan-Kuan Chen} 44a795a18bSHan-Kuan Chen 45a795a18bSHan-Kuan Chendefine void @test2() { 46a795a18bSHan-Kuan Chen; CHECK-LABEL: @test2( 47a795a18bSHan-Kuan Chen; CHECK-NEXT: entry: 48a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr null, i64 132 49a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr null, i64 200 50a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr null, i64 300 51a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP3:%.*]] = load <8 x float>, ptr [[TMP1]], align 4 52a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP4:%.*]] = load <8 x float>, ptr [[TMP2]], align 4 53a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP5:%.*]] = load <16 x float>, ptr [[TMP0]], align 4 54a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP6:%.*]] = call <32 x float> @llvm.vector.insert.v32f32.v8f32(<32 x float> poison, <8 x float> [[TMP4]], i64 0) 55a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP7:%.*]] = call <32 x float> @llvm.vector.insert.v32f32.v8f32(<32 x float> [[TMP6]], <8 x float> [[TMP3]], i64 8) 56a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP8:%.*]] = call <32 x float> @llvm.vector.insert.v32f32.v16f32(<32 x float> [[TMP7]], <16 x float> [[TMP5]], i64 16) 57a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP9:%.*]] = fpext <32 x float> [[TMP8]] to <32 x double> 58a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP10:%.*]] = call <32 x double> @llvm.vector.insert.v32f64.v8f64(<32 x double> poison, <8 x double> zeroinitializer, i64 0) 59a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP11:%.*]] = call <32 x double> @llvm.vector.insert.v32f64.v8f64(<32 x double> [[TMP10]], <8 x double> zeroinitializer, i64 8) 60a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP12:%.*]] = call <32 x double> @llvm.vector.insert.v32f64.v8f64(<32 x double> [[TMP11]], <8 x double> zeroinitializer, i64 16) 61a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP13:%.*]] = call <32 x double> @llvm.vector.insert.v32f64.v8f64(<32 x double> [[TMP12]], <8 x double> zeroinitializer, i64 24) 62a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP14:%.*]] = fadd <32 x double> [[TMP13]], [[TMP9]] 63a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP15:%.*]] = fptrunc <32 x double> [[TMP14]] to <32 x float> 64a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP16:%.*]] = call <32 x float> @llvm.vector.insert.v32f32.v8f32(<32 x float> poison, <8 x float> zeroinitializer, i64 0) 65a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP17:%.*]] = call <32 x float> @llvm.vector.insert.v32f32.v8f32(<32 x float> [[TMP16]], <8 x float> zeroinitializer, i64 8) 66a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP18:%.*]] = call <32 x float> @llvm.vector.insert.v32f32.v8f32(<32 x float> [[TMP17]], <8 x float> zeroinitializer, i64 16) 67a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP19:%.*]] = call <32 x float> @llvm.vector.insert.v32f32.v8f32(<32 x float> [[TMP18]], <8 x float> zeroinitializer, i64 24) 68a795a18bSHan-Kuan Chen; CHECK-NEXT: [[TMP20:%.*]] = fcmp ogt <32 x float> [[TMP19]], [[TMP15]] 69a795a18bSHan-Kuan Chen; CHECK-NEXT: ret void 70a795a18bSHan-Kuan Chen; 71a795a18bSHan-Kuan Chenentry: 72a795a18bSHan-Kuan Chen %0 = getelementptr i8, ptr null, i64 132 73a795a18bSHan-Kuan Chen %1 = getelementptr i8, ptr null, i64 164 74a795a18bSHan-Kuan Chen %2 = getelementptr i8, ptr null, i64 200 75a795a18bSHan-Kuan Chen %3 = getelementptr i8, ptr null, i64 300 76a795a18bSHan-Kuan Chen %4 = load <8 x float>, ptr %0, align 4 77a795a18bSHan-Kuan Chen %5 = load <8 x float>, ptr %1, align 4 78a795a18bSHan-Kuan Chen %6 = load <8 x float>, ptr %2, align 4 79a795a18bSHan-Kuan Chen %7 = load <8 x float>, ptr %3, align 4 80a795a18bSHan-Kuan Chen %8 = fpext <8 x float> %4 to <8 x double> 81a795a18bSHan-Kuan Chen %9 = fpext <8 x float> %5 to <8 x double> 82a795a18bSHan-Kuan Chen %10 = fpext <8 x float> %6 to <8 x double> 83a795a18bSHan-Kuan Chen %11 = fpext <8 x float> %7 to <8 x double> 84a795a18bSHan-Kuan Chen %12 = fadd <8 x double> zeroinitializer, %8 85a795a18bSHan-Kuan Chen %13 = fadd <8 x double> zeroinitializer, %9 86a795a18bSHan-Kuan Chen %14 = fadd <8 x double> zeroinitializer, %10 87a795a18bSHan-Kuan Chen %15 = fadd <8 x double> zeroinitializer, %11 88a795a18bSHan-Kuan Chen %16 = fptrunc <8 x double> %12 to <8 x float> 89a795a18bSHan-Kuan Chen %17 = fptrunc <8 x double> %13 to <8 x float> 90a795a18bSHan-Kuan Chen %18 = fptrunc <8 x double> %14 to <8 x float> 91a795a18bSHan-Kuan Chen %19 = fptrunc <8 x double> %15 to <8 x float> 92a795a18bSHan-Kuan Chen %20 = fcmp ogt <8 x float> zeroinitializer, %16 93a795a18bSHan-Kuan Chen %21 = fcmp ogt <8 x float> zeroinitializer, %17 94a795a18bSHan-Kuan Chen %22 = fcmp ogt <8 x float> zeroinitializer, %18 95a795a18bSHan-Kuan Chen %23 = fcmp ogt <8 x float> zeroinitializer, %19 96a795a18bSHan-Kuan Chen ret void 97a795a18bSHan-Kuan Chen} 983cdd86bbSHan-Kuan Chen 993cdd86bbSHan-Kuan Chendefine void @test3(float %0) { 1003cdd86bbSHan-Kuan Chen; CHECK-LABEL: @test3( 1013cdd86bbSHan-Kuan Chen; CHECK-NEXT: entry: 1023cdd86bbSHan-Kuan Chen; CHECK-NEXT: br label [[FOR_BODY_LR_PH:%.*]] 1033cdd86bbSHan-Kuan Chen; CHECK: for.body.lr.ph: 1043cdd86bbSHan-Kuan Chen; CHECK-NEXT: [[TMP1:%.*]] = call <4 x float> @llvm.vector.insert.v4f32.v2f32(<4 x float> poison, <2 x float> zeroinitializer, i64 0) 1053cdd86bbSHan-Kuan Chen; CHECK-NEXT: [[TMP2:%.*]] = call <4 x float> @llvm.vector.insert.v4f32.v2f32(<4 x float> [[TMP1]], <2 x float> zeroinitializer, i64 2) 1063cdd86bbSHan-Kuan Chen; CHECK-NEXT: br i1 false, label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY:%.*]] 1073cdd86bbSHan-Kuan Chen; CHECK: for.cond.cleanup: 1083cdd86bbSHan-Kuan Chen; CHECK-NEXT: [[TMP3:%.*]] = phi <4 x float> [ [[TMP2]], [[FOR_BODY_LR_PH]] ], [ [[TMP10:%.*]], [[FOR_BODY]] ] 1093cdd86bbSHan-Kuan Chen; CHECK-NEXT: ret void 1103cdd86bbSHan-Kuan Chen; CHECK: for.body: 1113cdd86bbSHan-Kuan Chen; CHECK-NEXT: [[TMP4:%.*]] = load <2 x float>, ptr null, align 4 1123cdd86bbSHan-Kuan Chen; CHECK-NEXT: [[TMP5:%.*]] = fcmp olt <2 x float> zeroinitializer, [[TMP4]] 1133cdd86bbSHan-Kuan Chen; CHECK-NEXT: [[TMP6:%.*]] = call <4 x i1> @llvm.vector.insert.v4i1.v2i1(<4 x i1> poison, <2 x i1> splat (i1 true), i64 0) 1143cdd86bbSHan-Kuan Chen; CHECK-NEXT: [[TMP7:%.*]] = call <4 x i1> @llvm.vector.insert.v4i1.v2i1(<4 x i1> [[TMP6]], <2 x i1> [[TMP5]], i64 2) 1153cdd86bbSHan-Kuan Chen; CHECK-NEXT: [[TMP8:%.*]] = call <4 x float> @llvm.vector.insert.v4f32.v2f32(<4 x float> poison, <2 x float> [[TMP4]], i64 0) 1163cdd86bbSHan-Kuan Chen; CHECK-NEXT: [[TMP9:%.*]] = shufflevector <4 x float> [[TMP8]], <4 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1> 1173cdd86bbSHan-Kuan Chen; CHECK-NEXT: [[TMP10]] = select <4 x i1> [[TMP7]], <4 x float> [[TMP9]], <4 x float> [[TMP2]] 1183cdd86bbSHan-Kuan Chen; CHECK-NEXT: br label [[FOR_COND_CLEANUP]] 1193cdd86bbSHan-Kuan Chen; 1203cdd86bbSHan-Kuan Chenentry: 1213cdd86bbSHan-Kuan Chen br label %for.body.lr.ph 1223cdd86bbSHan-Kuan Chen 1233cdd86bbSHan-Kuan Chenfor.body.lr.ph: 1243cdd86bbSHan-Kuan Chen br i1 false, label %for.cond.cleanup, label %for.body 1253cdd86bbSHan-Kuan Chen 1263cdd86bbSHan-Kuan Chenfor.cond.cleanup: ; preds = %for.body, %for.body.lr.ph 1273cdd86bbSHan-Kuan Chen %1 = phi <2 x float> [ zeroinitializer, %for.body.lr.ph ], [ %5, %for.body ] 1283cdd86bbSHan-Kuan Chen %2 = phi <2 x float> [ zeroinitializer, %for.body.lr.ph ], [ %6, %for.body ] 1293cdd86bbSHan-Kuan Chen ret void 1303cdd86bbSHan-Kuan Chen 1313cdd86bbSHan-Kuan Chenfor.body: 1323cdd86bbSHan-Kuan Chen %3 = load <2 x float>, ptr null, align 4 1333cdd86bbSHan-Kuan Chen %4 = fcmp olt <2 x float> zeroinitializer, %3 1343cdd86bbSHan-Kuan Chen %5 = select <2 x i1> <i1 true, i1 true>, <2 x float> %3, <2 x float> zeroinitializer 1353cdd86bbSHan-Kuan Chen %6 = select <2 x i1> %4, <2 x float> %3, <2 x float> zeroinitializer 1363cdd86bbSHan-Kuan Chen br label %for.cond.cleanup 1373cdd86bbSHan-Kuan Chen} 1382546ae4eSHan-Kuan Chen 1392546ae4eSHan-Kuan Chendefine ptr @test4() { 1402546ae4eSHan-Kuan Chen; POWEROF2-LABEL: @test4( 1412546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP1:%.*]] = fadd <8 x float> zeroinitializer, zeroinitializer 1422546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP2:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> poison, <2 x i32> <i32 1, i32 2> 1432546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP3:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> poison, <2 x i32> <i32 5, i32 6> 1442546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP4:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> poison, <2 x i32> <i32 4, i32 0> 1452546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP5:%.*]] = call <4 x float> @llvm.vector.insert.v4f32.v2f32(<4 x float> poison, <2 x float> [[TMP2]], i64 0) 1462546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP6:%.*]] = call <4 x float> @llvm.vector.insert.v4f32.v2f32(<4 x float> [[TMP5]], <2 x float> [[TMP3]], i64 2) 1472546ae4eSHan-Kuan Chen; POWEROF2-NEXT: br label [[TMP8:%.*]] 1482546ae4eSHan-Kuan Chen; POWEROF2: 7: 1492546ae4eSHan-Kuan Chen; POWEROF2-NEXT: br label [[TMP8]] 1502546ae4eSHan-Kuan Chen; POWEROF2: 8: 1512546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP9:%.*]] = phi <2 x float> [ poison, [[TMP7:%.*]] ], [ [[TMP4]], [[TMP0:%.*]] ] 1522546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP10:%.*]] = phi <4 x float> [ poison, [[TMP7]] ], [ [[TMP6]], [[TMP0]] ] 1532546ae4eSHan-Kuan Chen; POWEROF2-NEXT: br label [[TMP11:%.*]] 1542546ae4eSHan-Kuan Chen; POWEROF2: 11: 1552546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP12:%.*]] = call <2 x float> @llvm.vector.extract.v2f32.v4f32(<4 x float> [[TMP10]], i64 0) 1562546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP13:%.*]] = fmul <2 x float> [[TMP12]], zeroinitializer 1572546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP14:%.*]] = call <2 x float> @llvm.vector.extract.v2f32.v4f32(<4 x float> [[TMP10]], i64 2) 1582546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP15:%.*]] = fmul <2 x float> zeroinitializer, [[TMP14]] 1592546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP16:%.*]] = extractelement <2 x float> [[TMP9]], i32 1 1602546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP17:%.*]] = fmul float 0.000000e+00, [[TMP16]] 1612546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP18:%.*]] = extractelement <2 x float> [[TMP9]], i32 0 1622546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP19:%.*]] = fmul float [[TMP18]], 0.000000e+00 1632546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP20:%.*]] = extractelement <2 x float> [[TMP13]], i32 0 1642546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP21:%.*]] = fadd reassoc nsz float [[TMP20]], [[TMP17]] 1652546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP22:%.*]] = extractelement <2 x float> [[TMP15]], i32 0 1662546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP23:%.*]] = fadd reassoc nsz float [[TMP22]], [[TMP19]] 1672546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP24:%.*]] = extractelement <2 x float> [[TMP13]], i32 1 1682546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP25:%.*]] = fadd reassoc nsz float [[TMP21]], [[TMP24]] 1692546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP26:%.*]] = extractelement <2 x float> [[TMP15]], i32 1 1702546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP27:%.*]] = fadd reassoc nsz float [[TMP23]], [[TMP26]] 1712546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP28:%.*]] = tail call float @llvm.sqrt.f32(float [[TMP25]]) 1722546ae4eSHan-Kuan Chen; POWEROF2-NEXT: [[TMP29:%.*]] = tail call float @llvm.sqrt.f32(float [[TMP27]]) 1732546ae4eSHan-Kuan Chen; POWEROF2-NEXT: ret ptr null 1742546ae4eSHan-Kuan Chen; 1752546ae4eSHan-Kuan Chen; NONPOWEROF2-LABEL: @test4( 1762546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: [[TMP1:%.*]] = fadd <8 x float> zeroinitializer, zeroinitializer 1772546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: [[TMP2:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> poison, <3 x i32> <i32 0, i32 1, i32 2> 1782546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: [[TMP3:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> poison, <3 x i32> <i32 4, i32 5, i32 6> 1792546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: [[TMP4:%.*]] = call <6 x float> @llvm.vector.insert.v6f32.v3f32(<6 x float> poison, <3 x float> [[TMP2]], i64 0) 1802546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: [[TMP5:%.*]] = call <6 x float> @llvm.vector.insert.v6f32.v3f32(<6 x float> [[TMP4]], <3 x float> [[TMP3]], i64 3) 1812546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: br label [[TMP7:%.*]] 1822546ae4eSHan-Kuan Chen; NONPOWEROF2: 6: 1832546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: br label [[TMP7]] 1842546ae4eSHan-Kuan Chen; NONPOWEROF2: 7: 1852546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: [[TMP8:%.*]] = phi <6 x float> [ poison, [[TMP6:%.*]] ], [ [[TMP5]], [[TMP0:%.*]] ] 1862546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: br label [[TMP9:%.*]] 1872546ae4eSHan-Kuan Chen; NONPOWEROF2: 9: 1882546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: [[TMP10:%.*]] = call <3 x float> @llvm.vector.extract.v3f32.v6f32(<6 x float> [[TMP8]], i64 0) 1892546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: [[TMP11:%.*]] = fmul <3 x float> zeroinitializer, [[TMP10]] 1902546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: [[TMP12:%.*]] = call <3 x float> @llvm.vector.extract.v3f32.v6f32(<6 x float> [[TMP8]], i64 3) 1912546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: [[TMP13:%.*]] = fmul <3 x float> zeroinitializer, [[TMP12]] 1922546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: [[TMP14:%.*]] = call reassoc nsz float @llvm.vector.reduce.fadd.v3f32(float 0.000000e+00, <3 x float> [[TMP11]]) 1932546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: [[TMP15:%.*]] = call reassoc nsz float @llvm.vector.reduce.fadd.v3f32(float 0.000000e+00, <3 x float> [[TMP13]]) 1942546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: [[TMP16:%.*]] = tail call float @llvm.sqrt.f32(float [[TMP14]]) 1952546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: [[TMP17:%.*]] = tail call float @llvm.sqrt.f32(float [[TMP15]]) 1962546ae4eSHan-Kuan Chen; NONPOWEROF2-NEXT: ret ptr null 1972546ae4eSHan-Kuan Chen; 1982546ae4eSHan-Kuan Chen %1 = fadd <8 x float> zeroinitializer, zeroinitializer 1992546ae4eSHan-Kuan Chen %2 = extractelement <8 x float> %1, i64 0 2002546ae4eSHan-Kuan Chen %3 = extractelement <8 x float> %1, i64 1 2012546ae4eSHan-Kuan Chen %4 = extractelement <8 x float> %1, i64 2 2022546ae4eSHan-Kuan Chen %5 = extractelement <8 x float> %1, i64 4 2032546ae4eSHan-Kuan Chen %6 = extractelement <8 x float> %1, i64 5 2042546ae4eSHan-Kuan Chen %7 = extractelement <8 x float> %1, i64 6 2052546ae4eSHan-Kuan Chen br label %9 2062546ae4eSHan-Kuan Chen 2072546ae4eSHan-Kuan Chen8: 2082546ae4eSHan-Kuan Chen br label %9 2092546ae4eSHan-Kuan Chen 2102546ae4eSHan-Kuan Chen9: 2112546ae4eSHan-Kuan Chen %10 = phi float [ 0.000000e+00, %8 ], [ %7, %0 ] 2122546ae4eSHan-Kuan Chen %11 = phi float [ 0.000000e+00, %8 ], [ %6, %0 ] 2132546ae4eSHan-Kuan Chen %12 = phi float [ 0.000000e+00, %8 ], [ %5, %0 ] 2142546ae4eSHan-Kuan Chen %13 = phi float [ 0.000000e+00, %8 ], [ %4, %0 ] 2152546ae4eSHan-Kuan Chen %14 = phi float [ 0.000000e+00, %8 ], [ %3, %0 ] 2162546ae4eSHan-Kuan Chen %15 = phi float [ 0.000000e+00, %8 ], [ %2, %0 ] 2172546ae4eSHan-Kuan Chen br label %16 2182546ae4eSHan-Kuan Chen 2192546ae4eSHan-Kuan Chen16: 2202546ae4eSHan-Kuan Chen %17 = fmul float %14, 0.000000e+00 2212546ae4eSHan-Kuan Chen %18 = fmul float 0.000000e+00, %11 2222546ae4eSHan-Kuan Chen %19 = fmul float 0.000000e+00, %15 2232546ae4eSHan-Kuan Chen %20 = fmul float %12, 0.000000e+00 2242546ae4eSHan-Kuan Chen %21 = fadd reassoc nsz float %17, %19 2252546ae4eSHan-Kuan Chen %22 = fadd reassoc nsz float %18, %20 2262546ae4eSHan-Kuan Chen %23 = fmul float %13, 0.000000e+00 2272546ae4eSHan-Kuan Chen %24 = fmul float %10, 0.000000e+00 2282546ae4eSHan-Kuan Chen %25 = fadd reassoc nsz float %21, %23 2292546ae4eSHan-Kuan Chen %26 = fadd reassoc nsz float %22, %24 2302546ae4eSHan-Kuan Chen %27 = tail call float @llvm.sqrt.f32(float %25) 2312546ae4eSHan-Kuan Chen %28 = tail call float @llvm.sqrt.f32(float %26) 2322546ae4eSHan-Kuan Chen ret ptr null 2332546ae4eSHan-Kuan Chen} 234*08d14e10SHan-Kuan Chen 235*08d14e10SHan-Kuan Chendefine i32 @test5() { 236*08d14e10SHan-Kuan Chen; CHECK-LABEL: @test5( 237*08d14e10SHan-Kuan Chen; CHECK-NEXT: entry: 238*08d14e10SHan-Kuan Chen; CHECK-NEXT: [[TMP0:%.*]] = call <4 x double> @llvm.vector.insert.v4f64.v2f64(<4 x double> poison, <2 x double> zeroinitializer, i64 0) 239*08d14e10SHan-Kuan Chen; CHECK-NEXT: [[TMP1:%.*]] = call <4 x double> @llvm.vector.insert.v4f64.v2f64(<4 x double> [[TMP0]], <2 x double> zeroinitializer, i64 2) 240*08d14e10SHan-Kuan Chen; CHECK-NEXT: [[TMP2:%.*]] = fdiv <4 x double> [[TMP1]], [[TMP1]] 241*08d14e10SHan-Kuan Chen; CHECK-NEXT: [[TMP3:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v2f64(<8 x double> poison, <2 x double> zeroinitializer, i64 0) 242*08d14e10SHan-Kuan Chen; CHECK-NEXT: [[TMP4:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v2f64(<8 x double> [[TMP3]], <2 x double> zeroinitializer, i64 2) 243*08d14e10SHan-Kuan Chen; CHECK-NEXT: [[TMP5:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v2f64(<8 x double> [[TMP4]], <2 x double> zeroinitializer, i64 4) 244*08d14e10SHan-Kuan Chen; CHECK-NEXT: [[TMP6:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v2f64(<8 x double> [[TMP5]], <2 x double> zeroinitializer, i64 6) 245*08d14e10SHan-Kuan Chen; CHECK-NEXT: [[TMP7:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v2f64(<8 x double> poison, <2 x double> zeroinitializer, i64 2) 246*08d14e10SHan-Kuan Chen; CHECK-NEXT: [[TMP8:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v2f64(<8 x double> [[TMP7]], <2 x double> zeroinitializer, i64 6) 247*08d14e10SHan-Kuan Chen; CHECK-NEXT: [[TMP9:%.*]] = call <8 x double> @llvm.vector.insert.v8f64.v4f64(<8 x double> poison, <4 x double> [[TMP2]], i64 0) 248*08d14e10SHan-Kuan Chen; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <8 x double> [[TMP9]], <8 x double> [[TMP8]], <8 x i32> <i32 0, i32 1, i32 10, i32 11, i32 2, i32 3, i32 14, i32 15> 249*08d14e10SHan-Kuan Chen; CHECK-NEXT: [[TMP11:%.*]] = fadd <8 x double> [[TMP6]], [[TMP10]] 250*08d14e10SHan-Kuan Chen; CHECK-NEXT: br label [[FOR_END47:%.*]] 251*08d14e10SHan-Kuan Chen; CHECK: for.end47: 252*08d14e10SHan-Kuan Chen; CHECK-NEXT: [[TMP12:%.*]] = phi <8 x double> [ [[TMP11]], [[ENTRY:%.*]] ] 253*08d14e10SHan-Kuan Chen; CHECK-NEXT: ret i32 0 254*08d14e10SHan-Kuan Chen; 255*08d14e10SHan-Kuan Chenentry: 256*08d14e10SHan-Kuan Chen %div0 = fdiv <2 x double> zeroinitializer, zeroinitializer 257*08d14e10SHan-Kuan Chen %div1 = fdiv <2 x double> zeroinitializer, zeroinitializer 258*08d14e10SHan-Kuan Chen %add0 = fadd <2 x double> zeroinitializer, %div0 259*08d14e10SHan-Kuan Chen %add1 = fadd <2 x double> zeroinitializer, zeroinitializer 260*08d14e10SHan-Kuan Chen %add2 = fadd <2 x double> %div1, zeroinitializer 261*08d14e10SHan-Kuan Chen %add3 = fadd <2 x double> zeroinitializer, zeroinitializer 262*08d14e10SHan-Kuan Chen br label %for.end47 263*08d14e10SHan-Kuan Chen 264*08d14e10SHan-Kuan Chenfor.end47: ; preds = %entry 265*08d14e10SHan-Kuan Chen %add0.lcssa = phi <2 x double> [ %add0, %entry ] 266*08d14e10SHan-Kuan Chen %add1.lcssa = phi <2 x double> [ %add1, %entry ] 267*08d14e10SHan-Kuan Chen %add2.lcssa = phi <2 x double> [ %add2, %entry ] 268*08d14e10SHan-Kuan Chen %add3.lcssa = phi <2 x double> [ %add3, %entry ] 269*08d14e10SHan-Kuan Chen ret i32 0 270*08d14e10SHan-Kuan Chen} 271