brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.5 KiB · 60c48bf Raw
185 lines · plain
1; RUN: llc < %s -O3 -mtriple=arm64-apple-ios -mattr=+fullfp16 | FileCheck %s2; RUN: llc < %s -O3 -mtriple=arm64-apple-ios -fp-contract=fast -mattr=+fullfp16 | FileCheck %s3 4define void @foo_2d(ptr %src) {5entry:6  %arrayidx1 = getelementptr inbounds double, ptr %src, i64 57  %arrayidx2 = getelementptr inbounds double, ptr %src, i64 118  br label %for.body9 10; CHECK-LABEL: %for.body11; CHECK: fmls.2d {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}}12; CHECK: fmls.2d {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}}[0]13; CHECK: fmsub {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}14for.body:                                         ; preds = %for.body, %entry15  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]16  %indvars.iv.next = sub nuw nsw i64 %indvars.iv, 117  %arrayidx3 = getelementptr inbounds double, ptr %src, i64 %indvars.iv.next18  %tmp1 = load double, ptr %arrayidx3, align 819  %add = fadd fast double %tmp1, %tmp120  %mul = fmul fast double %add, %add21  %e1 = insertelement <2 x double> undef, double %add, i32 022  %e2 = insertelement <2 x double> %e1, double %add, i32 123  %sub2 = fsub fast <2 x double> %e2, <double 3.000000e+00, double -3.000000e+00>24  %e3 = insertelement <2 x double> undef, double %mul, i32 025  %e4 = insertelement <2 x double> %e3, double %mul, i32 126  %mul2 = fmul fast <2 x double> %sub2,<double 3.000000e+00, double -3.000000e+00>27  %e5 = insertelement <2 x double> undef, double %add, i32 028  %e6 = insertelement <2 x double> %e5, double %add, i32 129  %sub3 = fsub fast  <2 x double>  <double 3.000000e+00, double -3.000000e+00>, %mul230  %mulx = fmul fast <2 x double> %sub2, %e231  %subx = fsub fast  <2 x double> %e4, %mulx32  %e7 = insertelement <2 x double> undef, double %mul, i32 033  %e8 = insertelement <2 x double> %e7, double %mul, i32 134  %e9 = fmul fast <2 x double>  %subx, %sub335  store <2 x double> %e9, ptr %arrayidx1, align 836  %e10 = extractelement <2 x double> %sub3, i32 037  %mul3 = fmul fast double %mul, %e1038  %sub4 = fsub fast double %mul, %mul339  store double %sub4, ptr %arrayidx2, align 840  %exitcond = icmp eq i64 %indvars.iv.next, 2541  br i1 %exitcond, label %for.end, label %for.body42 43for.end:                                          ; preds = %for.body44  ret void45}46define void @foo_2s(ptr %src) {47entry:48  %arrayidx1 = getelementptr inbounds float, ptr %src, i64 549  %arrayidx2 = getelementptr inbounds float, ptr %src, i64 1150  br label %for.body51 52; CHECK-LABEL: %for.body53; CHECK: fmls.2s {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}}54; CHECK: fmls.2s {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}}[0]55; CHECK: fmsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}56for.body:                                         ; preds = %for.body, %entry57  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]58  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 159  %arrayidx3 = getelementptr inbounds float, ptr %src, i64 %indvars.iv.next60  %tmp1 = load float, ptr %arrayidx3, align 861  %add = fadd fast float %tmp1, %tmp162  %mul = fmul fast float %add, %add63  %e1 = insertelement <2 x float> undef, float %add, i32 064  %e2 = insertelement <2 x float> %e1, float %add, i32 165  %add2 = fsub fast <2 x float> %e2, <float 3.000000e+00, float -3.000000e+00>66  %e3 = insertelement <2 x float> undef, float %mul, i32 067  %e4 = insertelement <2 x float> %e3, float %mul, i32 168  %mul2 = fmul fast <2 x float> %add2,<float 3.000000e+00, float -3.000000e+00>69  %e5 = insertelement <2 x float> undef, float %add, i32 070  %e6 = insertelement <2 x float> %e5, float %add, i32 171  %add3 = fsub fast  <2 x float>  <float 3.000000e+00, float -3.000000e+00>, %mul272  %mulx = fmul fast <2 x float> %add2, %e273  %addx = fsub fast  <2 x float> %e4, %mulx74  %e7 = insertelement <2 x float> undef, float %mul, i32 075  %e8 = insertelement <2 x float> %e7, float %mul, i32 176  %e9 = fmul fast <2 x float>  %addx, %add377  store <2 x float> %e9, ptr %arrayidx1, align 878  %e10 = extractelement <2 x float> %add3, i32 079  %mul3 = fmul fast float %mul, %e1080  %add4 = fsub fast float %mul, %mul381  store float %add4, ptr %arrayidx2, align 882  %exitcond = icmp eq i64 %indvars.iv.next, 2583  br i1 %exitcond, label %for.end, label %for.body84 85for.end:                                          ; preds = %for.body86  ret void87}88define void @foo_4s(ptr %src) {89entry:90  %arrayidx1 = getelementptr inbounds float, ptr %src, i64 591  %arrayidx2 = getelementptr inbounds float, ptr %src, i64 1192  br label %for.body93 94; CHECK-LABEL: %for.body95; CHECK: fmls.4s {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}}96; CHECK: fmls.4s {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}}[0]97for.body:                                         ; preds = %for.body, %entry98  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]99  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1100  %arrayidx3 = getelementptr inbounds float, ptr %src, i64 %indvars.iv.next101  %tmp1 = load float, ptr %arrayidx3, align 8102  %add = fadd fast float %tmp1, %tmp1103  %mul = fmul fast float %add, %add104  %e1 = insertelement <4 x float> undef, float %add, i32 0105  %e2 = insertelement <4 x float> %e1, float %add, i32 1106  %add2 = fadd fast <4 x float> %e2, <float 3.000000e+00, float -3.000000e+00, float 5.000000e+00, float 7.000000e+00>107  %e3 = insertelement <4 x float> undef, float %mul, i32 0108  %e4 = insertelement <4 x float> %e3, float %mul, i32 1109  %mul2 = fmul fast <4 x float> %add2,<float 3.000000e+00, float -3.000000e+00, float 5.000000e+00, float 7.000000e+00>110  %e5 = insertelement <4 x float> undef, float %add, i32 0111  %e6 = insertelement <4 x float> %e5, float %add, i32 1112  %add3 = fsub fast  <4 x float> <float 3.000000e+00, float -3.000000e+00, float 5.000000e+00, float 7.000000e+00> , %mul2113  %mulx = fmul fast <4 x float> %add2, %e2114  %addx = fsub fast  <4 x float> %e4, %mulx115  %e7 = insertelement <4 x float> undef, float %mul, i32 0116  %e8 = insertelement <4 x float> %e7, float %mul, i32 1117  %e9 = fmul fast <4 x float>  %addx, %add3118  store <4 x float> %e9, ptr %arrayidx1, align 8119  %e10 = extractelement <4 x float> %add3, i32 0120  %mul3 = fmul fast float %mul, %e10121  store float %mul3, ptr %arrayidx2, align 8122  %exitcond = icmp eq i64 %indvars.iv.next, 25123  br i1 %exitcond, label %for.end, label %for.body124 125for.end:                                          ; preds = %for.body126  ret void127}128 129; CHECK-LABEL: test0:130; CHECK: fnmadd h0, h0, h1, h2131define half @test0(half %a, half %b, half %c) {132entry:133  %0 = fmul contract half %a, %b134  %mul = fsub contract half -0.000000e+00, %0135  %sub1 = fsub contract half %mul, %c136  ret half %sub1137}138 139; CHECK-LABEL: test1:140; CHECK: fnmadd s0, s0, s1, s2141define float @test1(float %a, float %b, float %c) {142entry:143  %0 = fmul contract float %a, %b144  %mul = fsub contract float -0.000000e+00, %0145  %sub1 = fsub contract float %mul, %c146  ret float %sub1147}148 149; CHECK-LABEL: test2:150; CHECK: fnmadd d0, d0, d1, d2151define double @test2(double %a, double %b, double %c) {152entry:153  %0 = fmul contract double %a, %b154  %mul = fsub contract double -0.000000e+00, %0155  %sub1 = fsub contract double %mul, %c156  ret double %sub1157}158 159; CHECK-LABEL: test3:160; CHECK: fnmadd h0, h0, h1, h2161define half @test3(half %0, half %1, half %2) {162  %4 = fneg fast half %0163  %5 = fmul fast half %4, %1164  %6 = fsub fast half %5, %2165  ret half %6166}167 168; CHECK-LABEL: test4:169; CHECK: fnmadd s0, s0, s1, s2170define float @test4(float %0, float %1, float %2) {171  %4 = fneg fast float %0172  %5 = fmul fast float %4, %1173  %6 = fsub fast float %5, %2174  ret float %6175}176 177; CHECK-LABEL: test5:178; CHECK: fnmadd d0, d0, d1, d2179define double @test5(double %0, double %1, double %2) {180  %4 = fneg fast double %0181  %5 = fmul fast double %4, %1182  %6 = fsub fast double %5, %2183  ret double %6184}185