brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.0 KiB · 5fb468c Raw
113 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -mtriple=arm64-apple-macosx11.0.0 -passes=slp-vectorizer -S < %s | FileCheck %s3 4; Test case reported on D134605 where the vectorization was causing a slowdown due to an underestimation in the cost of the extractions.5 6; NOTE: cost of shuffle <4 x float>,  <4 x float>, <2 x i32> <i32 2, i32 5> is 12!7 8define fastcc i64 @zot(float %arg, float %arg1, float %arg2, float %arg3, float %arg4, ptr %arg5, i1 %arg6, i1 %arg7, i1 %arg8) {9; CHECK-LABEL: @zot(10; CHECK-NEXT:  bb:11; CHECK-NEXT:    [[VAL9:%.*]] = fmul fast float 0.000000e+00, [[ARG:%.*]]12; CHECK-NEXT:    [[TMP0:%.*]] = insertelement <4 x float> <float 0.000000e+00, float poison, float poison, float poison>, float [[ARG]], i32 113; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <4 x float> [[TMP0]], float [[ARG3:%.*]], i32 214; CHECK-NEXT:    [[TMP2:%.*]] = shufflevector <4 x float> [[TMP1]], <4 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 2>15; CHECK-NEXT:    [[TMP3:%.*]] = fmul fast <4 x float> <float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 1.000000e+00>, [[TMP2]]16; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <2 x float> <float poison, float 0.000000e+00>, float [[ARG3]], i32 017; CHECK-NEXT:    [[TMP5:%.*]] = fadd fast <2 x float> [[TMP4]], <float 1.000000e+00, float 0.000000e+00>18; CHECK-NEXT:    [[TMP6:%.*]] = shufflevector <2 x float> [[TMP5]], <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>19; CHECK-NEXT:    [[TMP7:%.*]] = shufflevector <4 x float> [[TMP2]], <4 x float> [[TMP6]], <4 x i32> <i32 4, i32 5, i32 2, i32 3>20; CHECK-NEXT:    [[TMP8:%.*]] = fadd fast <4 x float> [[TMP7]], <float 2.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>21; CHECK-NEXT:    br i1 [[ARG6:%.*]], label [[BB18:%.*]], label [[BB57:%.*]]22; CHECK:       bb18:23; CHECK-NEXT:    [[TMP9:%.*]] = phi <4 x float> [ [[TMP8]], [[BB:%.*]] ]24; CHECK-NEXT:    [[VAL16:%.*]] = extractelement <4 x float> [[TMP8]], i32 225; CHECK-NEXT:    [[VAL23:%.*]] = fmul fast float [[VAL16]], 2.000000e+0026; CHECK-NEXT:    [[VAL17:%.*]] = extractelement <4 x float> [[TMP8]], i32 327; CHECK-NEXT:    [[VAL24:%.*]] = fmul fast float [[VAL17]], 3.000000e+0028; CHECK-NEXT:    br i1 [[ARG7:%.*]], label [[BB25:%.*]], label [[BB57]]29; CHECK:       bb25:30; CHECK-NEXT:    [[TMP12:%.*]] = phi <4 x float> [ [[TMP9]], [[BB18]] ]31; CHECK-NEXT:    br label [[BB30:%.*]]32; CHECK:       bb30:33; CHECK-NEXT:    [[VAL31:%.*]] = phi float [ [[VAL55:%.*]], [[BB30]] ], [ 0.000000e+00, [[BB25]] ]34; CHECK-NEXT:    [[VAL32:%.*]] = phi float [ [[VAL9]], [[BB30]] ], [ 0.000000e+00, [[BB25]] ]35; CHECK-NEXT:    [[TMP13:%.*]] = load <4 x i8>, ptr [[ARG5:%.*]], align 136; CHECK-NEXT:    [[TMP14:%.*]] = uitofp <4 x i8> [[TMP13]] to <4 x float>37; CHECK-NEXT:    [[TMP15:%.*]] = fsub fast <4 x float> [[TMP14]], [[TMP3]]38; CHECK-NEXT:    [[TMP16:%.*]] = fmul fast <4 x float> [[TMP15]], [[TMP12]]39; CHECK-NEXT:    [[VAL54:%.*]] = call fast float @llvm.vector.reduce.fadd.v4f32(float 0.000000e+00, <4 x float> [[TMP16]])40; CHECK-NEXT:    [[VAL55]] = tail call fast float @llvm.minnum.f32(float [[VAL31]], float [[ARG1:%.*]])41; CHECK-NEXT:    [[VAL56:%.*]] = tail call fast float @llvm.maxnum.f32(float [[ARG2:%.*]], float [[VAL54]])42; CHECK-NEXT:    call void @ham(float [[VAL55]], float [[VAL56]])43; CHECK-NEXT:    br i1 [[ARG8:%.*]], label [[BB30]], label [[BB57]]44; CHECK:       bb57:45; CHECK-NEXT:    ret i64 046;47bb:48  %val = fmul fast float 0.000000e+00, 0.000000e+0049  %val9 = fmul fast float 0.000000e+00, %arg50  %val10 = fmul fast float %arg3, 1.000000e+0051  %val11 = fmul fast float %arg3, 1.000000e+0052  %val12 = fadd fast float %arg3, 1.000000e+0053  %val13 = fadd fast float %val12, 2.000000e+0054  %val14 = fadd fast float 0.000000e+00, 0.000000e+0055  %val15 = fadd fast float %val14, 1.000000e+0056  %val16 = fadd fast float %arg3, 1.000000e+0057  %val17 = fadd fast float %arg3, 1.000000e+0058  br i1 %arg6, label %bb18, label %bb5759 60bb18:                                             ; preds = %bb61  %val19 = phi float [ %val13, %bb ]62  %val20 = phi float [ %val15, %bb ]63  %val21 = phi float [ %val16, %bb ]64  %val22 = phi float [ %val17, %bb ]65  %val23 = fmul fast float %val16, 2.000000e+0066  %val24 = fmul fast float %val17, 3.000000e+0067  br i1 %arg7, label %bb25, label %bb5768 69bb25:                                             ; preds = %bb1870  %val26 = phi float [ %val19, %bb18 ]71  %val27 = phi float [ %val20, %bb18 ]72  %val28 = phi float [ %val21, %bb18 ]73  %val29 = phi float [ %val22, %bb18 ]74  br label %bb3075 76bb30:                                             ; preds = %bb30, %bb2577  %val31 = phi float [ %val55, %bb30 ], [ 0.000000e+00, %bb25 ]78  %val32 = phi float [ %val9, %bb30 ], [ 0.000000e+00, %bb25 ]79  %val33 = load i8, ptr %arg5, align 180  %val34 = uitofp i8 %val33 to float81  %val35 = getelementptr inbounds i8, ptr %arg5, i64 182  %val36 = load i8, ptr %val35, align 183  %val37 = uitofp i8 %val36 to float84  %val38 = getelementptr inbounds i8, ptr %arg5, i64 285  %val39 = load i8, ptr %val38, align 186  %val40 = uitofp i8 %val39 to float87  %val41 = getelementptr inbounds i8, ptr %arg5, i64 388  %val42 = load i8, ptr %val41, align 189  %val43 = uitofp i8 %val42 to float90  %val44 = fsub fast float %val34, %val91  %val45 = fsub fast float %val37, %val992  %val46 = fsub fast float %val40, %val1093  %val47 = fsub fast float %val43, %val1194  %val48 = fmul fast float %val44, %val2695  %val49 = fmul fast float %val45, %val2796  %val50 = fadd fast float %val49, %val4897  %val51 = fmul fast float %val46, %val2898  %val52 = fadd fast float %val50, %val5199  %val53 = fmul fast float %val47, %val29100  %val54 = fadd fast float %val52, %val53101  %val55 = tail call fast float @llvm.minnum.f32(float %val31, float %arg1)102  %val56 = tail call fast float @llvm.maxnum.f32(float %arg2, float %val54)103  call void @ham(float %val55, float %val56)104  br i1 %arg8, label %bb30, label %bb57105 106bb57:                                             ; preds = %bb30, %bb18, %bb107  ret i64 0108}109 110declare float @llvm.maxnum.f32(float, float)111declare float @llvm.minnum.f32(float, float)112declare void @ham(float, float)113