brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.3 KiB · b4e6613 Raw
180 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s3 4define ptr @test() {5; CHECK-LABEL: @test(6; CHECK-NEXT:  entry:7; CHECK-NEXT:    [[GREEN_I:%.*]] = getelementptr inbounds float, ptr null, i32 68; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x float>, ptr [[GREEN_I]], align 49; CHECK-NEXT:    [[TMP1:%.*]] = fpext <2 x float> [[TMP0]] to <2 x double>10; CHECK-NEXT:    br label [[BODY:%.*]]11; CHECK:       body:12; CHECK-NEXT:    [[TMP2:%.*]] = phi <2 x double> [ [[TMP5:%.*]], [[BODY]] ], [ [[TMP1]], [[ENTRY:%.*]] ]13; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x i16>, ptr null, align 214; CHECK-NEXT:    [[TMP4:%.*]] = uitofp <2 x i16> [[TMP3]] to <2 x double>15; CHECK-NEXT:    [[SHUFFLE:%.*]] = shufflevector <2 x double> [[TMP4]], <2 x double> poison, <2 x i32> <i32 1, i32 0>16; CHECK-NEXT:    [[TMP5]] = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> zeroinitializer, <2 x double> [[SHUFFLE]], <2 x double> [[TMP2]])17; CHECK-NEXT:    br label [[BODY]]18;19entry:20  %green.i = getelementptr inbounds float, ptr null, i32 621  %blue.i = getelementptr inbounds float, ptr null, i32 722  %0 = load float, ptr %green.i, align 423  %conv197 = fpext float %0 to double24  %1 = load float, ptr %blue.i, align 825  %conv199 = fpext float %1 to double26  br label %body27 28body:29  %phi1 = phi double [ %3, %body ], [ %conv197, %entry ]30  %phi2 = phi double [ %5, %body ], [ %conv199, %entry ]31  %green = getelementptr inbounds i16, ptr null, i32 132  %2 = load i16, ptr %green, align 233  %conv1 = uitofp i16 %2 to double34  %3 = call double @llvm.fmuladd.f64(double 0.000000e+00, double %conv1, double %phi1)35  %4 = load i16, ptr null, align 236  %conv2 = uitofp i16 %4 to double37  %5 = call double @llvm.fmuladd.f64(double 0.000000e+00, double %conv2, double %phi2)38  br label %body39}40 41declare double @llvm.fmuladd.f64(double, double, double)42 43define void @test1(ptr %agg.result, ptr %this) {44; CHECK-LABEL: @test1(45; CHECK-NEXT:  entry:46; CHECK-NEXT:    br i1 false, label [[RETURN:%.*]], label [[LOR_LHS_FALSE:%.*]]47; CHECK:       lor.lhs.false:48; CHECK-NEXT:    br i1 false, label [[RETURN]], label [[IF_END:%.*]]49; CHECK:       if.end:50; CHECK-NEXT:    [[B_I:%.*]] = getelementptr inbounds float, ptr [[THIS:%.*]], i32 151; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x float>, ptr [[B_I]], align 452; CHECK-NEXT:    [[TMP1:%.*]] = fadd <2 x float> [[TMP0]], zeroinitializer53; CHECK-NEXT:    br label [[RETURN]]54; CHECK:       return:55; CHECK-NEXT:    [[TMP2:%.*]] = phi <2 x float> [ [[TMP1]], [[IF_END]] ], [ <float 1.000000e+00, float 0.000000e+00>, [[LOR_LHS_FALSE]] ], [ <float 1.000000e+00, float 0.000000e+00>, [[ENTRY:%.*]] ]56; CHECK-NEXT:    [[C_I_I_I:%.*]] = getelementptr inbounds float, ptr [[AGG_RESULT:%.*]], i32 257; CHECK-NEXT:    [[SHUFFLE:%.*]] = shufflevector <2 x float> [[TMP2]], <2 x float> poison, <2 x i32> <i32 1, i32 0>58; CHECK-NEXT:    store <2 x float> [[SHUFFLE]], ptr [[C_I_I_I]], align 459; CHECK-NEXT:    ret void60;61entry:62  br i1 false, label %return, label %lor.lhs.false63 64lor.lhs.false:65  br i1 false, label %return, label %if.end66 67if.end:68  %c.i = getelementptr inbounds float, ptr %this, i32 269  %0 = load float, ptr %c.i, align 470  %add.i = fadd float %0, 0.000000e+0071  %b.i = getelementptr inbounds float, ptr %this, i32 172  %1 = load float, ptr %b.i, align 473  %add2.i = fadd float %1, 0.000000e+0074  br label %return75 76return:77  %add.i.sink = phi float [ %add.i, %if.end ], [ 0.000000e+00, %lor.lhs.false ], [ 0.000000e+00, %entry ]78  %add2.i.sink = phi float [ %add2.i, %if.end ], [ 1.000000e+00, %lor.lhs.false ], [ 1.000000e+00, %entry ]79  %c.i.i.i = getelementptr inbounds float, ptr %agg.result, i32 280  store float %add.i.sink, ptr %c.i.i.i, align 481  %d.i.i.i = getelementptr inbounds float, ptr %agg.result, i32 382  store float %add2.i.sink, ptr %d.i.i.i, align 483  ret void84}85 86; Here PHIs have mutual uses of each other. Reordering one requires reordering the other.87define void @test2(ptr %p1, ptr %p2) {88; CHECK-LABEL: @test2(89; CHECK-NEXT:  entry:90; CHECK-NEXT:    [[A1:%.*]] = getelementptr inbounds ptr, ptr [[P1:%.*]], i32 091; CHECK-NEXT:    [[B1:%.*]] = getelementptr inbounds ptr, ptr [[P1]], i32 492; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x double>, ptr [[A1]], align 893; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x double>, ptr [[B1]], align 894; CHECK-NEXT:    [[TMP2:%.*]] = fmul fast <2 x double> <double 1.000000e+01, double 1.000000e-01>, [[TMP0]]95; CHECK-NEXT:    [[TMP3:%.*]] = fmul fast <2 x double> <double 1.100000e+01, double 1.100000e+00>, [[TMP1]]96; CHECK-NEXT:    [[TMP4:%.*]] = fsub fast <2 x double> <double 1.000000e+01, double 1.000000e-01>, [[TMP3]]97; CHECK-NEXT:    [[TMP5:%.*]] = fmul fast <2 x double> [[TMP4]], <double 2.000000e+00, double 2.100000e+00>98; CHECK-NEXT:    [[TMP6:%.*]] = fadd fast <2 x double> [[TMP2]], <double 1.000000e+01, double 1.000000e-01>99; CHECK-NEXT:    [[TMP7:%.*]] = fadd fast <2 x double> [[TMP6]], [[TMP5]]100; CHECK-NEXT:    [[TMP8:%.*]] = fmul fast <2 x double> [[TMP7]], <double 3.000000e+00, double 3.100000e+00>101; CHECK-NEXT:    br label [[BB1:%.*]]102; CHECK:       bb1:103; CHECK-NEXT:    [[TMP9:%.*]] = fadd fast <2 x double> <double 4.000000e+00, double 4.100000e+00>, [[TMP8]]104; CHECK-NEXT:    [[TMP10:%.*]] = fadd fast <2 x double> [[TMP9]], <double 2.000000e+00, double 2.100000e+00>105; CHECK-NEXT:    [[TMP11:%.*]] = fadd fast <2 x double> [[TMP10]], <double 3.000000e+00, double 3.100000e+00>106; CHECK-NEXT:    [[TMP12:%.*]] = shufflevector <2 x double> [[TMP11]], <2 x double> poison, <2 x i32> <i32 1, i32 0>107; CHECK-NEXT:    br label [[BB2:%.*]]108; CHECK:       bb2:109; CHECK-NEXT:    [[TMP13:%.*]] = phi <2 x double> [ [[TMP12]], [[BB1]] ], [ [[TMP15:%.*]], [[BB6:%.*]] ]110; CHECK-NEXT:    [[X0:%.*]] = getelementptr inbounds double, ptr [[P2:%.*]], i32 0111; CHECK-NEXT:    [[TMP14:%.*]] = load <2 x double>, ptr [[X0]], align 8112; CHECK-NEXT:    br i1 poison, label [[BB3:%.*]], label [[BB6]]113; CHECK:       bb3:114; CHECK-NEXT:    br i1 poison, label [[BB5:%.*]], label [[BB4:%.*]]115; CHECK:       bb4:116; CHECK-NEXT:    br label [[BB6]]117; CHECK:       bb5:118; CHECK-NEXT:    br label [[BB6]]119; CHECK:       bb6:120; CHECK-NEXT:    [[TMP15]] = phi <2 x double> [ [[TMP13]], [[BB2]] ], [ [[TMP14]], [[BB4]] ], [ [[TMP14]], [[BB5]] ]121; CHECK-NEXT:    br label [[BB2]]122;123entry:124  %a1 = getelementptr inbounds ptr, ptr %p1, i32 0125  %a2 = getelementptr inbounds ptr, ptr %p1, i32 1126  %b2 = getelementptr inbounds ptr, ptr %p1, i32 5127  %lda1 = load double, ptr %a1, align 8128  %lda2 = load double, ptr %a2, align 8129  %b1 = getelementptr inbounds ptr, ptr %p1, i32 4130  %ldb1 = load double, ptr %b1, align 8131  %ldb2 = load double, ptr %b2, align 8132  %mul0.1 = fmul fast double 0.1, %lda2133  %mul1.1 = fmul fast double 1.1, %ldb2134  %sub0.1 = fsub fast double 0.1, %mul1.1135  %mul2.1 = fmul fast double %sub0.1, 2.1136  %add0.1 = fadd fast double %mul0.1, 0.1137  %add1.1 = fadd fast double %add0.1, %mul2.1138  %mul3.1 = fmul fast double %add1.1, 3.1139  %mul0.0 = fmul fast double 10.0, %lda1140  %mul1.0 = fmul fast double 11.0, %ldb1141  %sub0.0 = fsub fast double 10.0, %mul1.0142  %mul2.0 = fmul fast double %sub0.0, 2.0143  %add0.0 = fadd fast double %mul0.0, 10.0144  %add1.0 = fadd fast double %add0.0, %mul2.0145  %mul3.0 = fmul fast double 3.0, %add1.0146  br label %bb1147 148bb1:149  %add4.1 = fadd fast double 4.1, %mul3.1150  %add2.1 = fadd fast double %add4.1, 2.1151  %add3.1 = fadd fast double %add2.1, 3.1152  %add4.0 = fadd fast double 4.0, %mul3.0153  %add2.0 = fadd fast double %add4.0, 2.0154  %add3.0 = fadd fast double %add2.0, 3.0155  br label %bb2156 157bb2:                                    ; preds = %bb6, %bb1158  %phi0.0 = phi double [ %add3.1, %bb1 ], [ %phi1.0, %bb6 ]159  %phi0.1 = phi double [ %add3.0, %bb1 ], [ %phi1.1, %bb6 ]160  %x0 = getelementptr inbounds double, ptr %p2, i32 0161  %i0 = load double, ptr %x0, align 8162  %x1 = getelementptr inbounds double, ptr %p2, i32 1163  %i1 = load double, ptr %x1, align 8164  br i1 poison, label %bb3, label %bb6165 166bb3:                                   ; preds = %bb2167  br i1 poison, label %bb5, label %bb4168 169bb4:                                  ; preds = %bb3170  br label %bb6171 172bb5:                                  ; preds = %bb3173  br label %bb6174 175bb6:                                        ; preds = %bb5, %bb4, %bb3176  %phi1.0 = phi double [ %phi0.0, %bb2 ], [ %i0, %bb4 ], [ %i0, %bb5 ]177  %phi1.1 = phi double [ %phi0.1, %bb2 ], [ %i1, %bb4 ], [ %i1, %bb5 ]178  br label %bb2179}180