124 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 62; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu -mcpu=icelake-server -slp-threshold=-37 < %s | FileCheck %s3 4declare double @llvm.fmuladd.f64(double, double, double)5 6define void @test(ptr %this, ptr %0, double %1) {7; CHECK-LABEL: define void @test(8; CHECK-SAME: ptr [[THIS:%.*]], ptr [[TMP0:%.*]], double [[TMP1:%.*]]) #[[ATTR1:[0-9]+]] {9; CHECK-NEXT: [[IF_ELSE:.*:]]10; CHECK-NEXT: [[TMP2:%.*]] = load double, ptr [[TMP0]], align 811; CHECK-NEXT: [[ARRAYIDX_I1464:%.*]] = getelementptr i8, ptr [[TMP0]], i64 812; CHECK-NEXT: [[TMP3:%.*]] = load double, ptr [[ARRAYIDX_I1464]], align 813; CHECK-NEXT: [[TMP4:%.*]] = load double, ptr [[THIS]], align 814; CHECK-NEXT: [[DIV251:%.*]] = fmul double [[TMP1]], 0.000000e+0015; CHECK-NEXT: [[MUL257:%.*]] = fmul double [[TMP4]], 0.000000e+0016; CHECK-NEXT: [[MUL305:%.*]] = fmul double [[TMP4]], 0.000000e+0017; CHECK-NEXT: [[TMP5:%.*]] = fneg double [[TMP2]]18; CHECK-NEXT: [[NEG356:%.*]] = fmul double [[TMP1]], [[TMP5]]19; CHECK-NEXT: [[TMP6:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG356]], double 0.000000e+00, double 0.000000e+00)20; CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[THIS]], align 821; CHECK-NEXT: [[TMP8:%.*]] = fneg double [[TMP3]]22; CHECK-NEXT: [[NEG380:%.*]] = fmul double [[TMP1]], [[TMP8]]23; CHECK-NEXT: [[TMP9:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG380]], double 0.000000e+00, double [[MUL257]])24; CHECK-NEXT: [[FNEG381:%.*]] = fneg double [[TMP9]]25; CHECK-NEXT: [[TMP10:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG380]], double 0.000000e+00, double 0.000000e+00)26; CHECK-NEXT: [[TMP11:%.*]] = insertelement <2 x double> poison, double [[DIV251]], i32 027; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <2 x double> [[TMP11]], <2 x double> poison, <2 x i32> zeroinitializer28; CHECK-NEXT: [[TMP13:%.*]] = insertelement <2 x double> poison, double [[FNEG381]], i32 029; CHECK-NEXT: [[TMP14:%.*]] = insertelement <2 x double> [[TMP13]], double [[TMP10]], i32 130; CHECK-NEXT: [[TMP15:%.*]] = fmul <2 x double> [[TMP12]], [[TMP14]]31; CHECK-NEXT: [[NEG417:%.*]] = fneg double [[MUL257]]32; CHECK-NEXT: [[TMP16:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG417]], double 0.000000e+00, double 0.000000e+00)33; CHECK-NEXT: [[FNEG418:%.*]] = fneg double [[TMP16]]34; CHECK-NEXT: [[MUL419:%.*]] = fmul double [[DIV251]], [[FNEG418]]35; CHECK-NEXT: [[NEG436:%.*]] = fmul double [[TMP1]], [[TMP5]]36; CHECK-NEXT: [[TMP17:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG436]], double 0.000000e+00, double 0.000000e+00)37; CHECK-NEXT: [[FNEG437:%.*]] = fneg double [[TMP17]]38; CHECK-NEXT: [[TMP18:%.*]] = fneg double [[TMP4]]39; CHECK-NEXT: [[NEG455:%.*]] = fmul double [[TMP1]], [[TMP18]]40; CHECK-NEXT: [[TMP19:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG455]], double 0.000000e+00, double [[MUL305]])41; CHECK-NEXT: [[TMP20:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG455]], double 0.000000e+00, double 0.000000e+00)42; CHECK-NEXT: [[FNEG474:%.*]] = fneg double [[TMP20]]43; CHECK-NEXT: [[NEG492:%.*]] = fneg double [[MUL305]]44; CHECK-NEXT: [[TMP21:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG492]], double 0.000000e+00, double 0.000000e+00)45; CHECK-NEXT: [[TMP22:%.*]] = insertelement <4 x double> poison, double [[DIV251]], i32 046; CHECK-NEXT: [[TMP23:%.*]] = shufflevector <4 x double> [[TMP22]], <4 x double> poison, <4 x i32> zeroinitializer47; CHECK-NEXT: [[TMP24:%.*]] = insertelement <4 x double> poison, double [[FNEG437]], i32 048; CHECK-NEXT: [[TMP25:%.*]] = insertelement <4 x double> [[TMP24]], double [[TMP19]], i32 149; CHECK-NEXT: [[TMP26:%.*]] = insertelement <4 x double> [[TMP25]], double [[FNEG474]], i32 250; CHECK-NEXT: [[TMP27:%.*]] = insertelement <4 x double> [[TMP26]], double [[TMP21]], i32 351; CHECK-NEXT: [[TMP28:%.*]] = fmul <4 x double> [[TMP23]], [[TMP27]]52; CHECK-NEXT: [[TMP29:%.*]] = insertelement <8 x double> poison, double [[TMP6]], i32 053; CHECK-NEXT: [[TMP30:%.*]] = shufflevector <2 x double> [[TMP15]], <2 x double> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>54; CHECK-NEXT: [[TMP31:%.*]] = shufflevector <8 x double> [[TMP29]], <8 x double> [[TMP30]], <8 x i32> <i32 0, i32 8, i32 9, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>55; CHECK-NEXT: [[TMP32:%.*]] = insertelement <8 x double> [[TMP31]], double [[MUL419]], i32 356; CHECK-NEXT: [[TMP33:%.*]] = shufflevector <4 x double> [[TMP28]], <4 x double> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>57; CHECK-NEXT: [[TMP34:%.*]] = shufflevector <8 x double> [[TMP32]], <8 x double> [[TMP33]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>58; CHECK-NEXT: [[TMP35:%.*]] = fptrunc <8 x double> [[TMP34]] to <8 x float>59; CHECK-NEXT: store <8 x float> [[TMP35]], ptr [[TMP7]], align 460; CHECK-NEXT: ret void61;62if.else:63 %2 = load double, ptr %0, align 864 %arrayidx.i1464 = getelementptr i8, ptr %0, i64 865 %3 = load double, ptr %arrayidx.i1464, align 866 %4 = load double, ptr %this, align 867 %div251 = fmul double %1, 0.000000e+0068 %mul257 = fmul double %4, 0.000000e+0069 %mul305 = fmul double %4, 0.000000e+0070 %5 = fneg double %271 %neg356 = fmul double %1, %572 %6 = tail call double @llvm.fmuladd.f64(double %neg356, double 0.000000e+00, double 0.000000e+00)73 %conv358 = fptrunc double %6 to float74 %7 = load ptr, ptr %this, align 875 store float %conv358, ptr %7, align 476 %8 = fneg double %377 %neg380 = fmul double %1, %878 %9 = tail call double @llvm.fmuladd.f64(double %neg380, double 0.000000e+00, double %mul257)79 %fneg381 = fneg double %980 %mul382 = fmul double %div251, %fneg38181 %conv383 = fptrunc double %mul382 to float82 %arrayidx.i2136 = getelementptr i8, ptr %7, i64 483 store float %conv383, ptr %arrayidx.i2136, align 484 %10 = tail call double @llvm.fmuladd.f64(double %neg380, double 0.000000e+00, double 0.000000e+00)85 %mul400 = fmul double %10, %div25186 %conv401 = fptrunc double %mul400 to float87 %arrayidx.i2178 = getelementptr i8, ptr %7, i64 888 store float %conv401, ptr %arrayidx.i2178, align 489 %neg417 = fneg double %mul25790 %11 = tail call double @llvm.fmuladd.f64(double %neg417, double 0.000000e+00, double 0.000000e+00)91 %fneg418 = fneg double %1192 %mul419 = fmul double %div251, %fneg41893 %conv420 = fptrunc double %mul419 to float94 %arrayidx.i2220 = getelementptr i8, ptr %7, i64 1295 store float %conv420, ptr %arrayidx.i2220, align 496 %neg436 = fmul double %1, %597 %12 = tail call double @llvm.fmuladd.f64(double %neg436, double 0.000000e+00, double 0.000000e+00)98 %fneg437 = fneg double %1299 %mul438 = fmul double %div251, %fneg437100 %conv439 = fptrunc double %mul438 to float101 %arrayidx.i2262 = getelementptr i8, ptr %7, i64 16102 store float %conv439, ptr %arrayidx.i2262, align 4103 %13 = fneg double %4104 %neg455 = fmul double %1, %13105 %14 = tail call double @llvm.fmuladd.f64(double %neg455, double 0.000000e+00, double %mul305)106 %mul456 = fmul double %14, %div251107 %conv457 = fptrunc double %mul456 to float108 %arrayidx.i2304 = getelementptr i8, ptr %7, i64 20109 store float %conv457, ptr %arrayidx.i2304, align 4110 %15 = tail call double @llvm.fmuladd.f64(double %neg455, double 0.000000e+00, double 0.000000e+00)111 %fneg474 = fneg double %15112 %mul475 = fmul double %div251, %fneg474113 %conv476 = fptrunc double %mul475 to float114 %arrayidx.i2346 = getelementptr i8, ptr %7, i64 24115 store float %conv476, ptr %arrayidx.i2346, align 4116 %neg492 = fneg double %mul305117 %16 = tail call double @llvm.fmuladd.f64(double %neg492, double 0.000000e+00, double 0.000000e+00)118 %mul493 = fmul double %16, %div251119 %conv494 = fptrunc double %mul493 to float120 %arrayidx.i2388 = getelementptr i8, ptr %7, i64 28121 store float %conv494, ptr %arrayidx.i2388, align 4122 ret void123}124