brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.5 KiB · bd2aa4b Raw
363 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve.fp,+fp64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FP3; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve,+fullfp16,+fp64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NOFP4 5define arm_aapcs_vfpcc float @fadd_v2f32(<2 x float> %x, float %y) {6; CHECK-LABEL: fadd_v2f32:7; CHECK:       @ %bb.0: @ %entry8; CHECK-NEXT:    vadd.f32 s0, s0, s19; CHECK-NEXT:    vadd.f32 s0, s4, s010; CHECK-NEXT:    bx lr11entry:12  %z = call fast float @llvm.vector.reduce.fadd.f32.v2f32(float %y, <2 x float> %x)13  ret float %z14}15 16define arm_aapcs_vfpcc float @fadd_v4f32(<4 x float> %x, float %y) {17; CHECK-FP-LABEL: fadd_v4f32:18; CHECK-FP:       @ %bb.0: @ %entry19; CHECK-FP-NEXT:    vadd.f32 s2, s2, s320; CHECK-FP-NEXT:    vadd.f32 s0, s0, s121; CHECK-FP-NEXT:    vadd.f32 s0, s0, s222; CHECK-FP-NEXT:    vadd.f32 s0, s4, s023; CHECK-FP-NEXT:    bx lr24;25; CHECK-NOFP-LABEL: fadd_v4f32:26; CHECK-NOFP:       @ %bb.0: @ %entry27; CHECK-NOFP-NEXT:    vadd.f32 s0, s0, s128; CHECK-NOFP-NEXT:    vadd.f32 s0, s0, s229; CHECK-NOFP-NEXT:    vadd.f32 s0, s0, s330; CHECK-NOFP-NEXT:    vadd.f32 s0, s4, s031; CHECK-NOFP-NEXT:    bx lr32entry:33  %z = call fast float @llvm.vector.reduce.fadd.f32.v4f32(float %y, <4 x float> %x)34  ret float %z35}36 37define arm_aapcs_vfpcc float @fadd_v8f32(<8 x float> %x, float %y) {38; CHECK-FP-LABEL: fadd_v8f32:39; CHECK-FP:       @ %bb.0: @ %entry40; CHECK-FP-NEXT:    vadd.f32 q0, q0, q141; CHECK-FP-NEXT:    vadd.f32 s2, s2, s342; CHECK-FP-NEXT:    vadd.f32 s0, s0, s143; CHECK-FP-NEXT:    vadd.f32 s0, s0, s244; CHECK-FP-NEXT:    vadd.f32 s0, s8, s045; CHECK-FP-NEXT:    bx lr46;47; CHECK-NOFP-LABEL: fadd_v8f32:48; CHECK-NOFP:       @ %bb.0: @ %entry49; CHECK-NOFP-NEXT:    vadd.f32 s0, s0, s450; CHECK-NOFP-NEXT:    vadd.f32 s10, s1, s551; CHECK-NOFP-NEXT:    vadd.f32 s2, s2, s652; CHECK-NOFP-NEXT:    vadd.f32 s4, s3, s753; CHECK-NOFP-NEXT:    vadd.f32 s0, s0, s1054; CHECK-NOFP-NEXT:    vadd.f32 s0, s0, s255; CHECK-NOFP-NEXT:    vadd.f32 s0, s0, s456; CHECK-NOFP-NEXT:    vadd.f32 s0, s8, s057; CHECK-NOFP-NEXT:    bx lr58entry:59  %z = call fast float @llvm.vector.reduce.fadd.f32.v8f32(float %y, <8 x float> %x)60  ret float %z61}62 63define arm_aapcs_vfpcc half @fadd_v2f16(<2 x half> %x, half %y) {64; CHECK-LABEL: fadd_v2f16:65; CHECK:       @ %bb.0: @ %entry66; CHECK-NEXT:    vmovx.f16 s2, s067; CHECK-NEXT:    vadd.f16 s0, s0, s268; CHECK-NEXT:    vadd.f16 s0, s4, s069; CHECK-NEXT:    bx lr70entry:71  %z = call fast half @llvm.vector.reduce.fadd.f16.v2f16(half %y, <2 x half> %x)72  ret half %z73}74 75define arm_aapcs_vfpcc half @fadd_v4f16(<4 x half> %x, half %y) {76; CHECK-FP-LABEL: fadd_v4f16:77; CHECK-FP:       @ %bb.0: @ %entry78; CHECK-FP-NEXT:    vmovx.f16 s2, s179; CHECK-FP-NEXT:    vmovx.f16 s6, s080; CHECK-FP-NEXT:    vadd.f16 s2, s1, s281; CHECK-FP-NEXT:    vadd.f16 s0, s0, s682; CHECK-FP-NEXT:    vadd.f16 s0, s0, s283; CHECK-FP-NEXT:    vadd.f16 s0, s4, s084; CHECK-FP-NEXT:    bx lr85;86; CHECK-NOFP-LABEL: fadd_v4f16:87; CHECK-NOFP:       @ %bb.0: @ %entry88; CHECK-NOFP-NEXT:    vmovx.f16 s2, s089; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s290; CHECK-NOFP-NEXT:    vmovx.f16 s2, s191; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s192; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s293; CHECK-NOFP-NEXT:    vadd.f16 s0, s4, s094; CHECK-NOFP-NEXT:    bx lr95entry:96  %z = call fast half @llvm.vector.reduce.fadd.f16.v4f16(half %y, <4 x half> %x)97  ret half %z98}99 100define arm_aapcs_vfpcc half @fadd_v8f16(<8 x half> %x, half %y) {101; CHECK-FP-LABEL: fadd_v8f16:102; CHECK-FP:       @ %bb.0: @ %entry103; CHECK-FP-NEXT:    vrev32.16 q2, q0104; CHECK-FP-NEXT:    vadd.f16 q0, q0, q2105; CHECK-FP-NEXT:    vadd.f16 s2, s2, s3106; CHECK-FP-NEXT:    vadd.f16 s0, s0, s1107; CHECK-FP-NEXT:    vadd.f16 s0, s0, s2108; CHECK-FP-NEXT:    vadd.f16 s0, s4, s0109; CHECK-FP-NEXT:    bx lr110;111; CHECK-NOFP-LABEL: fadd_v8f16:112; CHECK-NOFP:       @ %bb.0: @ %entry113; CHECK-NOFP-NEXT:    vmovx.f16 s6, s0114; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s6115; CHECK-NOFP-NEXT:    vmovx.f16 s6, s1116; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s1117; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s6118; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s2119; CHECK-NOFP-NEXT:    vmovx.f16 s2, s2120; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s2121; CHECK-NOFP-NEXT:    vmovx.f16 s2, s3122; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s3123; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s2124; CHECK-NOFP-NEXT:    vadd.f16 s0, s4, s0125; CHECK-NOFP-NEXT:    bx lr126entry:127  %z = call fast half @llvm.vector.reduce.fadd.f16.v8f16(half %y, <8 x half> %x)128  ret half %z129}130 131define arm_aapcs_vfpcc half @fadd_v16f16(<16 x half> %x, half %y) {132; CHECK-FP-LABEL: fadd_v16f16:133; CHECK-FP:       @ %bb.0: @ %entry134; CHECK-FP-NEXT:    vadd.f16 q0, q0, q1135; CHECK-FP-NEXT:    vrev32.16 q1, q0136; CHECK-FP-NEXT:    vadd.f16 q0, q0, q1137; CHECK-FP-NEXT:    vadd.f16 s2, s2, s3138; CHECK-FP-NEXT:    vadd.f16 s0, s0, s1139; CHECK-FP-NEXT:    vadd.f16 s0, s0, s2140; CHECK-FP-NEXT:    vadd.f16 s0, s8, s0141; CHECK-FP-NEXT:    bx lr142;143; CHECK-NOFP-LABEL: fadd_v16f16:144; CHECK-NOFP:       @ %bb.0: @ %entry145; CHECK-NOFP-NEXT:    vmovx.f16 s12, s0146; CHECK-NOFP-NEXT:    vmovx.f16 s10, s4147; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s4148; CHECK-NOFP-NEXT:    vadd.f16 s10, s12, s10149; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s10150; CHECK-NOFP-NEXT:    vadd.f16 s4, s1, s5151; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s4152; CHECK-NOFP-NEXT:    vmovx.f16 s4, s5153; CHECK-NOFP-NEXT:    vmovx.f16 s10, s1154; CHECK-NOFP-NEXT:    vadd.f16 s4, s10, s4155; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s4156; CHECK-NOFP-NEXT:    vadd.f16 s4, s2, s6157; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s4158; CHECK-NOFP-NEXT:    vmovx.f16 s4, s6159; CHECK-NOFP-NEXT:    vmovx.f16 s2, s2160; CHECK-NOFP-NEXT:    vadd.f16 s2, s2, s4161; CHECK-NOFP-NEXT:    vmovx.f16 s4, s3162; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s2163; CHECK-NOFP-NEXT:    vadd.f16 s2, s3, s7164; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s2165; CHECK-NOFP-NEXT:    vmovx.f16 s2, s7166; CHECK-NOFP-NEXT:    vadd.f16 s2, s4, s2167; CHECK-NOFP-NEXT:    vadd.f16 s0, s0, s2168; CHECK-NOFP-NEXT:    vadd.f16 s0, s8, s0169; CHECK-NOFP-NEXT:    bx lr170entry:171  %z = call fast half @llvm.vector.reduce.fadd.f16.v16f16(half %y, <16 x half> %x)172  ret half %z173}174 175define arm_aapcs_vfpcc double @fadd_v1f64(<1 x double> %x, double %y) {176; CHECK-LABEL: fadd_v1f64:177; CHECK:       @ %bb.0: @ %entry178; CHECK-NEXT:    vadd.f64 d0, d1, d0179; CHECK-NEXT:    bx lr180entry:181  %z = call fast double @llvm.vector.reduce.fadd.f64.v1f64(double %y, <1 x double> %x)182  ret double %z183}184 185define arm_aapcs_vfpcc double @fadd_v2f64(<2 x double> %x, double %y) {186; CHECK-LABEL: fadd_v2f64:187; CHECK:       @ %bb.0: @ %entry188; CHECK-NEXT:    vadd.f64 d0, d0, d1189; CHECK-NEXT:    vadd.f64 d0, d2, d0190; CHECK-NEXT:    bx lr191entry:192  %z = call fast double @llvm.vector.reduce.fadd.f64.v2f64(double %y, <2 x double> %x)193  ret double %z194}195 196define arm_aapcs_vfpcc double @fadd_v4f64(<4 x double> %x, double %y) {197; CHECK-LABEL: fadd_v4f64:198; CHECK:       @ %bb.0: @ %entry199; CHECK-NEXT:    vadd.f64 d1, d1, d3200; CHECK-NEXT:    vadd.f64 d0, d0, d2201; CHECK-NEXT:    vadd.f64 d0, d0, d1202; CHECK-NEXT:    vadd.f64 d0, d4, d0203; CHECK-NEXT:    bx lr204entry:205  %z = call fast double @llvm.vector.reduce.fadd.f64.v4f64(double %y, <4 x double> %x)206  ret double %z207}208 209define arm_aapcs_vfpcc float @fadd_v2f32_nofast(<2 x float> %x, float %y) {210; CHECK-LABEL: fadd_v2f32_nofast:211; CHECK:       @ %bb.0: @ %entry212; CHECK-NEXT:    vadd.f32 s0, s4, s0213; CHECK-NEXT:    vadd.f32 s0, s0, s1214; CHECK-NEXT:    bx lr215entry:216  %z = call float @llvm.vector.reduce.fadd.f32.v2f32(float %y, <2 x float> %x)217  ret float %z218}219 220define arm_aapcs_vfpcc float @fadd_v4f32_nofast(<4 x float> %x, float %y) {221; CHECK-LABEL: fadd_v4f32_nofast:222; CHECK:       @ %bb.0: @ %entry223; CHECK-NEXT:    vadd.f32 s0, s4, s0224; CHECK-NEXT:    vadd.f32 s0, s0, s1225; CHECK-NEXT:    vadd.f32 s0, s0, s2226; CHECK-NEXT:    vadd.f32 s0, s0, s3227; CHECK-NEXT:    bx lr228entry:229  %z = call float @llvm.vector.reduce.fadd.f32.v4f32(float %y, <4 x float> %x)230  ret float %z231}232 233define arm_aapcs_vfpcc float @fadd_v8f32_nofast(<8 x float> %x, float %y) {234; CHECK-LABEL: fadd_v8f32_nofast:235; CHECK:       @ %bb.0: @ %entry236; CHECK-NEXT:    vadd.f32 s0, s8, s0237; CHECK-NEXT:    vadd.f32 s0, s0, s1238; CHECK-NEXT:    vadd.f32 s0, s0, s2239; CHECK-NEXT:    vadd.f32 s0, s0, s3240; CHECK-NEXT:    vadd.f32 s0, s0, s4241; CHECK-NEXT:    vadd.f32 s0, s0, s5242; CHECK-NEXT:    vadd.f32 s0, s0, s6243; CHECK-NEXT:    vadd.f32 s0, s0, s7244; CHECK-NEXT:    bx lr245entry:246  %z = call float @llvm.vector.reduce.fadd.f32.v8f32(float %y, <8 x float> %x)247  ret float %z248}249 250define arm_aapcs_vfpcc half @fadd_v4f16_nofast(<4 x half> %x, half %y) {251; CHECK-LABEL: fadd_v4f16_nofast:252; CHECK:       @ %bb.0: @ %entry253; CHECK-NEXT:    vadd.f16 s2, s4, s0254; CHECK-NEXT:    vmovx.f16 s0, s0255; CHECK-NEXT:    vadd.f16 s0, s2, s0256; CHECK-NEXT:    vmovx.f16 s2, s1257; CHECK-NEXT:    vadd.f16 s0, s0, s1258; CHECK-NEXT:    vadd.f16 s0, s0, s2259; CHECK-NEXT:    bx lr260entry:261  %z = call half @llvm.vector.reduce.fadd.f16.v4f16(half %y, <4 x half> %x)262  ret half %z263}264 265define arm_aapcs_vfpcc half @fadd_v8f16_nofast(<8 x half> %x, half %y) {266; CHECK-LABEL: fadd_v8f16_nofast:267; CHECK:       @ %bb.0: @ %entry268; CHECK-NEXT:    vadd.f16 s4, s4, s0269; CHECK-NEXT:    vmovx.f16 s0, s0270; CHECK-NEXT:    vadd.f16 s0, s4, s0271; CHECK-NEXT:    vmovx.f16 s4, s1272; CHECK-NEXT:    vadd.f16 s0, s0, s1273; CHECK-NEXT:    vadd.f16 s0, s0, s4274; CHECK-NEXT:    vadd.f16 s0, s0, s2275; CHECK-NEXT:    vmovx.f16 s2, s2276; CHECK-NEXT:    vadd.f16 s0, s0, s2277; CHECK-NEXT:    vmovx.f16 s2, s3278; CHECK-NEXT:    vadd.f16 s0, s0, s3279; CHECK-NEXT:    vadd.f16 s0, s0, s2280; CHECK-NEXT:    bx lr281entry:282  %z = call half @llvm.vector.reduce.fadd.f16.v8f16(half %y, <8 x half> %x)283  ret half %z284}285 286define arm_aapcs_vfpcc half @fadd_v16f16_nofast(<16 x half> %x, half %y) {287; CHECK-LABEL: fadd_v16f16_nofast:288; CHECK:       @ %bb.0: @ %entry289; CHECK-NEXT:    vadd.f16 s8, s8, s0290; CHECK-NEXT:    vmovx.f16 s0, s0291; CHECK-NEXT:    vadd.f16 s0, s8, s0292; CHECK-NEXT:    vmovx.f16 s8, s1293; CHECK-NEXT:    vadd.f16 s0, s0, s1294; CHECK-NEXT:    vadd.f16 s0, s0, s8295; CHECK-NEXT:    vadd.f16 s0, s0, s2296; CHECK-NEXT:    vmovx.f16 s2, s2297; CHECK-NEXT:    vadd.f16 s0, s0, s2298; CHECK-NEXT:    vmovx.f16 s2, s3299; CHECK-NEXT:    vadd.f16 s0, s0, s3300; CHECK-NEXT:    vadd.f16 s0, s0, s2301; CHECK-NEXT:    vmovx.f16 s2, s4302; CHECK-NEXT:    vadd.f16 s0, s0, s4303; CHECK-NEXT:    vadd.f16 s0, s0, s2304; CHECK-NEXT:    vmovx.f16 s2, s5305; CHECK-NEXT:    vadd.f16 s0, s0, s5306; CHECK-NEXT:    vadd.f16 s0, s0, s2307; CHECK-NEXT:    vmovx.f16 s2, s6308; CHECK-NEXT:    vadd.f16 s0, s0, s6309; CHECK-NEXT:    vadd.f16 s0, s0, s2310; CHECK-NEXT:    vmovx.f16 s2, s7311; CHECK-NEXT:    vadd.f16 s0, s0, s7312; CHECK-NEXT:    vadd.f16 s0, s0, s2313; CHECK-NEXT:    bx lr314entry:315  %z = call half @llvm.vector.reduce.fadd.f16.v16f16(half %y, <16 x half> %x)316  ret half %z317}318 319define arm_aapcs_vfpcc double @fadd_v1f64_nofast(<1 x double> %x, double %y) {320; CHECK-LABEL: fadd_v1f64_nofast:321; CHECK:       @ %bb.0: @ %entry322; CHECK-NEXT:    vadd.f64 d0, d1, d0323; CHECK-NEXT:    bx lr324entry:325  %z = call double @llvm.vector.reduce.fadd.f64.v1f64(double %y, <1 x double> %x)326  ret double %z327}328 329define arm_aapcs_vfpcc double @fadd_v2f64_nofast(<2 x double> %x, double %y) {330; CHECK-LABEL: fadd_v2f64_nofast:331; CHECK:       @ %bb.0: @ %entry332; CHECK-NEXT:    vadd.f64 d0, d2, d0333; CHECK-NEXT:    vadd.f64 d0, d0, d1334; CHECK-NEXT:    bx lr335entry:336  %z = call double @llvm.vector.reduce.fadd.f64.v2f64(double %y, <2 x double> %x)337  ret double %z338}339 340define arm_aapcs_vfpcc double @fadd_v4f64_nofast(<4 x double> %x, double %y) {341; CHECK-LABEL: fadd_v4f64_nofast:342; CHECK:       @ %bb.0: @ %entry343; CHECK-NEXT:    vadd.f64 d0, d4, d0344; CHECK-NEXT:    vadd.f64 d0, d0, d1345; CHECK-NEXT:    vadd.f64 d0, d0, d2346; CHECK-NEXT:    vadd.f64 d0, d0, d3347; CHECK-NEXT:    bx lr348entry:349  %z = call double @llvm.vector.reduce.fadd.f64.v4f64(double %y, <4 x double> %x)350  ret double %z351}352 353declare double @llvm.vector.reduce.fadd.f64.v1f64(double, <1 x double>)354declare double @llvm.vector.reduce.fadd.f64.v2f64(double, <2 x double>)355declare double @llvm.vector.reduce.fadd.f64.v4f64(double, <4 x double>)356declare float @llvm.vector.reduce.fadd.f32.v2f32(float, <2 x float>)357declare float @llvm.vector.reduce.fadd.f32.v4f32(float, <4 x float>)358declare float @llvm.vector.reduce.fadd.f32.v8f32(float, <8 x float>)359declare half @llvm.vector.reduce.fadd.f16.v16f16(half, <16 x half>)360declare half @llvm.vector.reduce.fadd.f16.v2f16(half, <2 x half>)361declare half @llvm.vector.reduce.fadd.f16.v4f16(half, <4 x half>)362declare half @llvm.vector.reduce.fadd.f16.v8f16(half, <8 x half>)363