brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 005caf6 Raw
125 lines · plain
1; RUN: llc -mtriple=arm-eabi -mattr=+vfp2 %s -o - | FileCheck %s -check-prefix=VFP22; RUN: llc -mtriple=arm-eabi -mattr=+neon %s -o - | FileCheck %s -check-prefix=NEON3; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a8 %s -o - | FileCheck %s -check-prefix=A84; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a9 %s -o - | FileCheck %s -check-prefix=A95; RUN: llc -mtriple=arm-linux-gnueabi -mcpu=cortex-a9 -float-abi=hard %s -o - | FileCheck %s -check-prefix=HARD6; RUN: llc -mtriple=arm-linux-gnueabi -mcpu=cortex-m4 -float-abi=hard %s -o - | FileCheck %s -check-prefix=VMLA7; RUN: llc -mtriple=arm-linux-gnueabi -mcpu=cortex-m33 -float-abi=hard %s -o - | FileCheck %s -check-prefix=VMLA8 9define float @t1(float %acc, float %a, float %b) {10entry:11; VFP2-LABEL: t1:12; VFP2: vmla.f3213 14; NEON-LABEL: t1:15; NEON: vmla.f3216 17; A8-LABEL: t1:18; A8: vmul.f3219; A8: vadd.f3220 21; VMLA-LABEL: t1:22; VMLA:       vmul.f3223; VMLA-NEXT:  vadd.f3224 25  %0 = fmul float %a, %b26  %1 = fadd float %acc, %027	ret float %128}29 30define float @vmla_minsize(float %acc, float %a, float %b) #0 {31entry:32; VMLA-LABEL: vmla_minsize:33; VMLA:       vmla.f32  s0, s1, s234; VMLA-NEXT:  bx  lr35 36  %0 = fmul float %a, %b37  %1 = fadd float %acc, %038	ret float %139}40 41define double @t2(double %acc, double %a, double %b) {42entry:43; VFP2-LABEL: t2:44; VFP2: vmla.f6445 46; NEON-LABEL: t2:47; NEON: vmla.f6448 49; A8-LABEL: t2:50; A8: vmul.f6451; A8: vadd.f6452  %0 = fmul double %a, %b53  %1 = fadd double %acc, %054	ret double %155}56 57define float @t3(float %acc, float %a, float %b) {58entry:59; VFP2-LABEL: t3:60; VFP2: vmla.f3261 62; NEON-LABEL: t3:63; NEON: vmla.f3264 65; A8-LABEL: t3:66; A8: vmul.f3267; A8: vadd.f3268  %0 = fmul float %a, %b69  %1 = fadd float %0, %acc70	ret float %171}72 73; It's possible to make use of fp vmla / vmls on Cortex-A9.74; rdar://865967575define void @t4(float %acc1, float %a, float %b, float %acc2, float %c, ptr %P1, ptr %P2) {76entry:77; A8-LABEL: t4:78; A8: vmul.f3279; A8: vmul.f3280; A8: vadd.f3281; A8: vadd.f3282 83; Two vmla with now RAW hazard84; A9-LABEL: t4:85; A9: vmla.f3286; A9: vmla.f3287 88; HARD-LABEL: t4:89; HARD: vmla.f32 s0, s1, s290; HARD: vmla.f32 s3, s1, s491  %0 = fmul float %a, %b92  %1 = fadd float %acc1, %093  %2 = fmul float %a, %c94  %3 = fadd float %acc2, %295  store float %1, ptr %P196  store float %3, ptr %P297  ret void98}99 100define float @t5(float %a, float %b, float %c, float %d, float %e) {101entry:102; A8-LABEL: t5:103; A8: vmul.f32104; A8: vmul.f32105; A8: vadd.f32106; A8: vadd.f32107 108; A9-LABEL: t5:109; A9: vmla.f32110; A9: vmul.f32111; A9: vadd.f32112 113; HARD-LABEL: t5:114; HARD: vmla.f32 s4, s0, s1115; HARD: vmul.f32 s0, s2, s3116; HARD: vadd.f32 s0, s4, s0117  %0 = fmul float %a, %b118  %1 = fadd float %e, %0119  %2 = fmul float %c, %d120  %3 = fadd float %1, %2121  ret float %3122}123 124attributes #0 = { minsize nounwind optsize }125