|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 |
| 2 | +; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu -mcpu=icelake-server -slp-threshold=-37 < %s | FileCheck %s |
| 3 | + |
| 4 | +declare double @llvm.fmuladd.f64(double, double, double) |
| 5 | + |
| 6 | +define 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 8 |
| 11 | +; CHECK-NEXT: [[ARRAYIDX_I1464:%.*]] = getelementptr i8, ptr [[TMP0]], i64 8 |
| 12 | +; CHECK-NEXT: [[TMP3:%.*]] = load double, ptr [[ARRAYIDX_I1464]], align 8 |
| 13 | +; CHECK-NEXT: [[TMP4:%.*]] = load double, ptr [[THIS]], align 8 |
| 14 | +; CHECK-NEXT: [[DIV251:%.*]] = fmul double [[TMP1]], 0.000000e+00 |
| 15 | +; CHECK-NEXT: [[MUL257:%.*]] = fmul double [[TMP4]], 0.000000e+00 |
| 16 | +; CHECK-NEXT: [[MUL305:%.*]] = fmul double [[TMP4]], 0.000000e+00 |
| 17 | +; 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 8 |
| 21 | +; 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 0 |
| 27 | +; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <2 x double> [[TMP11]], <2 x double> poison, <2 x i32> zeroinitializer |
| 28 | +; CHECK-NEXT: [[TMP13:%.*]] = insertelement <2 x double> poison, double [[FNEG381]], i32 0 |
| 29 | +; CHECK-NEXT: [[TMP14:%.*]] = insertelement <2 x double> [[TMP13]], double [[TMP10]], i32 1 |
| 30 | +; 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 0 |
| 46 | +; CHECK-NEXT: [[TMP23:%.*]] = shufflevector <4 x double> [[TMP22]], <4 x double> poison, <4 x i32> zeroinitializer |
| 47 | +; CHECK-NEXT: [[TMP24:%.*]] = insertelement <4 x double> poison, double [[FNEG437]], i32 0 |
| 48 | +; CHECK-NEXT: [[TMP25:%.*]] = insertelement <4 x double> [[TMP24]], double [[TMP19]], i32 1 |
| 49 | +; CHECK-NEXT: [[TMP26:%.*]] = insertelement <4 x double> [[TMP25]], double [[FNEG474]], i32 2 |
| 50 | +; CHECK-NEXT: [[TMP27:%.*]] = insertelement <4 x double> [[TMP26]], double [[TMP21]], i32 3 |
| 51 | +; CHECK-NEXT: [[TMP28:%.*]] = fmul <4 x double> [[TMP23]], [[TMP27]] |
| 52 | +; CHECK-NEXT: [[TMP29:%.*]] = insertelement <8 x double> poison, double [[TMP6]], i32 0 |
| 53 | +; 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 3 |
| 56 | +; 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 4 |
| 60 | +; CHECK-NEXT: ret void |
| 61 | +; |
| 62 | +if.else: |
| 63 | + %2 = load double, ptr %0, align 8 |
| 64 | + %arrayidx.i1464 = getelementptr i8, ptr %0, i64 8 |
| 65 | + %3 = load double, ptr %arrayidx.i1464, align 8 |
| 66 | + %4 = load double, ptr %this, align 8 |
| 67 | + %div251 = fmul double %1, 0.000000e+00 |
| 68 | + %mul257 = fmul double %4, 0.000000e+00 |
| 69 | + %mul305 = fmul double %4, 0.000000e+00 |
| 70 | + %5 = fneg double %2 |
| 71 | + %neg356 = fmul double %1, %5 |
| 72 | + %6 = tail call double @llvm.fmuladd.f64(double %neg356, double 0.000000e+00, double 0.000000e+00) |
| 73 | + %conv358 = fptrunc double %6 to float |
| 74 | + %7 = load ptr, ptr %this, align 8 |
| 75 | + store float %conv358, ptr %7, align 4 |
| 76 | + %8 = fneg double %3 |
| 77 | + %neg380 = fmul double %1, %8 |
| 78 | + %9 = tail call double @llvm.fmuladd.f64(double %neg380, double 0.000000e+00, double %mul257) |
| 79 | + %fneg381 = fneg double %9 |
| 80 | + %mul382 = fmul double %div251, %fneg381 |
| 81 | + %conv383 = fptrunc double %mul382 to float |
| 82 | + %arrayidx.i2136 = getelementptr i8, ptr %7, i64 4 |
| 83 | + store float %conv383, ptr %arrayidx.i2136, align 4 |
| 84 | + %10 = tail call double @llvm.fmuladd.f64(double %neg380, double 0.000000e+00, double 0.000000e+00) |
| 85 | + %mul400 = fmul double %10, %div251 |
| 86 | + %conv401 = fptrunc double %mul400 to float |
| 87 | + %arrayidx.i2178 = getelementptr i8, ptr %7, i64 8 |
| 88 | + store float %conv401, ptr %arrayidx.i2178, align 4 |
| 89 | + %neg417 = fneg double %mul257 |
| 90 | + %11 = tail call double @llvm.fmuladd.f64(double %neg417, double 0.000000e+00, double 0.000000e+00) |
| 91 | + %fneg418 = fneg double %11 |
| 92 | + %mul419 = fmul double %div251, %fneg418 |
| 93 | + %conv420 = fptrunc double %mul419 to float |
| 94 | + %arrayidx.i2220 = getelementptr i8, ptr %7, i64 12 |
| 95 | + store float %conv420, ptr %arrayidx.i2220, align 4 |
| 96 | + %neg436 = fmul double %1, %5 |
| 97 | + %12 = tail call double @llvm.fmuladd.f64(double %neg436, double 0.000000e+00, double 0.000000e+00) |
| 98 | + %fneg437 = fneg double %12 |
| 99 | + %mul438 = fmul double %div251, %fneg437 |
| 100 | + %conv439 = fptrunc double %mul438 to float |
| 101 | + %arrayidx.i2262 = getelementptr i8, ptr %7, i64 16 |
| 102 | + store float %conv439, ptr %arrayidx.i2262, align 4 |
| 103 | + %13 = fneg double %4 |
| 104 | + %neg455 = fmul double %1, %13 |
| 105 | + %14 = tail call double @llvm.fmuladd.f64(double %neg455, double 0.000000e+00, double %mul305) |
| 106 | + %mul456 = fmul double %14, %div251 |
| 107 | + %conv457 = fptrunc double %mul456 to float |
| 108 | + %arrayidx.i2304 = getelementptr i8, ptr %7, i64 20 |
| 109 | + store float %conv457, ptr %arrayidx.i2304, align 4 |
| 110 | + %15 = tail call double @llvm.fmuladd.f64(double %neg455, double 0.000000e+00, double 0.000000e+00) |
| 111 | + %fneg474 = fneg double %15 |
| 112 | + %mul475 = fmul double %div251, %fneg474 |
| 113 | + %conv476 = fptrunc double %mul475 to float |
| 114 | + %arrayidx.i2346 = getelementptr i8, ptr %7, i64 24 |
| 115 | + store float %conv476, ptr %arrayidx.i2346, align 4 |
| 116 | + %neg492 = fneg double %mul305 |
| 117 | + %16 = tail call double @llvm.fmuladd.f64(double %neg492, double 0.000000e+00, double 0.000000e+00) |
| 118 | + %mul493 = fmul double %16, %div251 |
| 119 | + %conv494 = fptrunc double %mul493 to float |
| 120 | + %arrayidx.i2388 = getelementptr i8, ptr %7, i64 28 |
| 121 | + store float %conv494, ptr %arrayidx.i2388, align 4 |
| 122 | + ret void |
| 123 | +} |
0 commit comments