brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.4 KiB · a84cbce Raw
213 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --filter-out "(\.v?save|push|pop)"2 3; No FP16/BF164; RUN: llc -mtriple=arm-none-eabi -float-abi=soft -mattr=+armv8.2-a,+fp-armv8,-fullfp16,-bf16,-neon %s -o - | FileCheck %s --check-prefixes=NO-FP16-SOFT5; RUN: llc -mtriple=thumb-none-eabi -float-abi=soft -mattr=+armv8.2-a,+fp-armv8,-fullfp16,-bf16,-neon %s -o - | FileCheck %s --check-prefixes=NO-FP16-SOFT6; RUN: llc -mtriple=arm-none-eabi -mattr=+armv8.2-a,+fp-armv8,-fullfp16,-bf16,-neon %s -o - | FileCheck %s --check-prefixes=NO-FP16-SOFT7; RUN: llc -mtriple=thumb-none-eabi -mattr=+armv8.2-a,+fp-armv8,-fullfp16,-bf16,-neon %s -o - | FileCheck %s --check-prefixes=NO-FP16-SOFT8; RUN: llc -mtriple=arm-none-eabihf -mattr=+armv8.2-a,+fp-armv8,-fullfp16,-bf16,-neon %s -o - | FileCheck %s --check-prefixes=NO-FP16-HARD9; RUN: llc -mtriple=thumb-none-eabihf -mattr=+armv8.2-a,+fp-armv8,-fullfp16,-bf16,-neon %s -o - | FileCheck %s --check-prefixes=NO-FP16-HARD10 11; FP16/BF1612; RUN: llc -mtriple=arm-none-eabi -float-abi=soft -mattr=+armv8.2-a,+fp-armv8,+fullfp16,+bf16,-neon %s -o - | FileCheck %s --check-prefixes=FP16-SOFT13; RUN: llc -mtriple=thumb-none-eabi -float-abi=soft -mattr=+armv8.2-a,+fp-armv8,+fullfp16,+bf16,-neon %s -o - | FileCheck %s --check-prefixes=FP16-SOFT14; RUN: llc -mtriple=arm-none-eabi -mattr=+armv8.2-a,+fp-armv8,+fullfp16,+bf16,-neon %s -o - | FileCheck %s --check-prefixes=FP16-SOFT15; RUN: llc -mtriple=thumb-none-eabi -mattr=+armv8.2-a,+fp-armv8,+fullfp16,+bf16,-neon %s -o - | FileCheck %s --check-prefixes=FP16-SOFT16; RUN: llc -mtriple=arm-none-eabihf -mattr=+armv8.2-a,+fp-armv8,+fullfp16,+bf16,-neon %s -o - | FileCheck %s --check-prefixes=FP16-HARD17; RUN: llc -mtriple=thumb-none-eabihf -mattr=+armv8.2-a,+fp-armv8,+fullfp16,+bf16,-neon %s -o - | FileCheck %s --check-prefixes=FP16-HARD18 19; PR60510 showed a bug where the return from `*_inner` was getting "lost" by an20; optimisation, and a garbage value was being left in `s0`.21 22declare dso_local float @other(float) nounwind23declare dso_local void @fp16_sink(half) nounwind24declare dso_local void @bf16_sink(bfloat) nounwind25 26declare dso_local half @fp16_inner() nounwind27declare dso_local bfloat @bf_inner() nounwind28 29define half @fp16_out_call_oneuse(float %arg) nounwind {30; NO-FP16-SOFT-LABEL: fp16_out_call_oneuse:31; NO-FP16-SOFT:  @ %bb.0:32; NO-FP16-SOFT:    mov r4, r033; NO-FP16-SOFT:    bl fp16_inner34; NO-FP16-SOFT:    mov r5, r035; NO-FP16-SOFT:    mov r0, r436; NO-FP16-SOFT:    bl other37; NO-FP16-SOFT:    mov r0, r538;39; NO-FP16-HARD-LABEL: fp16_out_call_oneuse:40; NO-FP16-HARD:  @ %bb.0:41; NO-FP16-HARD:    vmov.f32 s16, s042; NO-FP16-HARD:    bl fp16_inner43; NO-FP16-HARD:    vmov.f32 s18, s044; NO-FP16-HARD:    vmov.f32 s0, s1645; NO-FP16-HARD:    bl other46; NO-FP16-HARD:    vmov.f32 s0, s1847;48; FP16-SOFT-LABEL: fp16_out_call_oneuse:49; FP16-SOFT:  @ %bb.0:50; FP16-SOFT:    mov r4, r051; FP16-SOFT:    bl fp16_inner52; FP16-SOFT:    mov r5, r053; FP16-SOFT:    mov r0, r454; FP16-SOFT:    bl other55; FP16-SOFT:    vmov.f16 s0, r556; FP16-SOFT:    vmov r0, s057;58; FP16-HARD-LABEL: fp16_out_call_oneuse:59; FP16-HARD:  @ %bb.0:60; FP16-HARD:    vmov.f32 s16, s061; FP16-HARD:    bl fp16_inner62; FP16-HARD:    vmov.f32 s18, s063; FP16-HARD:    vmov.f32 s0, s1664; FP16-HARD:    bl other65; FP16-HARD:    vmov.f32 s0, s1866  %call = call half @fp16_inner()67  %call1 = call float @other(float %arg)68  ret half %call69}70 71define half @fp16_out_call_multiuse(float %arg) nounwind {72; NO-FP16-SOFT-LABEL: fp16_out_call_multiuse:73; NO-FP16-SOFT:  @ %bb.0:74; NO-FP16-SOFT:    mov r4, r075; NO-FP16-SOFT:    bl fp16_inner76; NO-FP16-SOFT:    mov r5, r077; NO-FP16-SOFT:    mov r0, r478; NO-FP16-SOFT:    bl other79; NO-FP16-SOFT:    mov r0, r580; NO-FP16-SOFT:    bl fp16_sink81; NO-FP16-SOFT:    mov r0, r582;83; NO-FP16-HARD-LABEL: fp16_out_call_multiuse:84; NO-FP16-HARD:  @ %bb.0:85; NO-FP16-HARD:    vmov.f32 s16, s086; NO-FP16-HARD:    bl fp16_inner87; NO-FP16-HARD:    vmov.f32 s18, s088; NO-FP16-HARD:    vmov.f32 s0, s1689; NO-FP16-HARD:    bl other90; NO-FP16-HARD:    vmov.f32 s0, s1891; NO-FP16-HARD:    bl fp16_sink92; NO-FP16-HARD:    vmov.f32 s0, s1893;94; FP16-SOFT-LABEL: fp16_out_call_multiuse:95; FP16-SOFT:  @ %bb.0:96; FP16-SOFT:    mov r4, r097; FP16-SOFT:    bl fp16_inner98; FP16-SOFT:    mov r5, r099; FP16-SOFT:    mov r0, r4100; FP16-SOFT:    bl other101; FP16-SOFT:    vmov.f16 s16, r5102; FP16-SOFT:    vmov.f16 r0, s16103; FP16-SOFT:    bl fp16_sink104; FP16-SOFT:    vmov r0, s16105;106; FP16-HARD-LABEL: fp16_out_call_multiuse:107; FP16-HARD:  @ %bb.0:108; FP16-HARD:    vmov.f32 s16, s0109; FP16-HARD:    bl fp16_inner110; FP16-HARD:    vmov.f32 s18, s0111; FP16-HARD:    vmov.f32 s0, s16112; FP16-HARD:    bl other113; FP16-HARD:    vmov.f16 r0, s18114; FP16-HARD:    vmov s0, r0115; FP16-HARD:    bl fp16_sink116; FP16-HARD:    vmov.f32 s0, s18117  %call = call half @fp16_inner()118  %call1 = call float @other(float %arg)119  call void @fp16_sink(half %call)120  ret half %call121}122 123define bfloat @bf_out_call_oneuse(float %arg) nounwind {124; NO-FP16-SOFT-LABEL: bf_out_call_oneuse:125; NO-FP16-SOFT:  @ %bb.0:126; NO-FP16-SOFT:    mov r4, r0127; NO-FP16-SOFT:    bl bf_inner128; NO-FP16-SOFT:    mov r5, r0129; NO-FP16-SOFT:    mov r0, r4130; NO-FP16-SOFT:    bl other131; NO-FP16-SOFT:    mov r0, r5132;133; NO-FP16-HARD-LABEL: bf_out_call_oneuse:134; NO-FP16-HARD:  @ %bb.0:135; NO-FP16-HARD:    vmov.f32 s16, s0136; NO-FP16-HARD:    bl bf_inner137; NO-FP16-HARD:    vmov.f32 s18, s0138; NO-FP16-HARD:    vmov.f32 s0, s16139; NO-FP16-HARD:    bl other140; NO-FP16-HARD:    vmov.f32 s0, s18141;142; FP16-SOFT-LABEL: bf_out_call_oneuse:143; FP16-SOFT:  @ %bb.0:144; FP16-SOFT:    mov r4, r0145; FP16-SOFT:    bl bf_inner146; FP16-SOFT:    mov r5, r0147; FP16-SOFT:    mov r0, r4148; FP16-SOFT:    bl other149; FP16-SOFT:    mov r0, r5150;151; FP16-HARD-LABEL: bf_out_call_oneuse:152; FP16-HARD:  @ %bb.0:153; FP16-HARD:    vmov.f32 s16, s0154; FP16-HARD:    bl bf_inner155; FP16-HARD:    vmov.f32 s18, s0156; FP16-HARD:    vmov.f32 s0, s16157; FP16-HARD:    bl other158; FP16-HARD:    vmov.f32 s0, s18159  %call = call bfloat @bf_inner()160  %call1 = call float @other(float %arg)161  ret bfloat %call162}163 164define bfloat @bf_out_call_multiuse(float %arg) nounwind {165; NO-FP16-SOFT-LABEL: bf_out_call_multiuse:166; NO-FP16-SOFT:  @ %bb.0:167; NO-FP16-SOFT:    mov r4, r0168; NO-FP16-SOFT:    bl bf_inner169; NO-FP16-SOFT:    mov r5, r0170; NO-FP16-SOFT:    mov r0, r4171; NO-FP16-SOFT:    bl other172; NO-FP16-SOFT:    mov r0, r5173; NO-FP16-SOFT:    bl bf16_sink174; NO-FP16-SOFT:    mov r0, r5175;176; NO-FP16-HARD-LABEL: bf_out_call_multiuse:177; NO-FP16-HARD:  @ %bb.0:178; NO-FP16-HARD:    vmov.f32 s16, s0179; NO-FP16-HARD:    bl bf_inner180; NO-FP16-HARD:    vmov.f32 s18, s0181; NO-FP16-HARD:    vmov.f32 s0, s16182; NO-FP16-HARD:    bl other183; NO-FP16-HARD:    vmov.f32 s0, s18184; NO-FP16-HARD:    bl bf16_sink185; NO-FP16-HARD:    vmov.f32 s0, s18186;187; FP16-SOFT-LABEL: bf_out_call_multiuse:188; FP16-SOFT:  @ %bb.0:189; FP16-SOFT:    mov r4, r0190; FP16-SOFT:    bl bf_inner191; FP16-SOFT:    mov r5, r0192; FP16-SOFT:    mov r0, r4193; FP16-SOFT:    bl other194; FP16-SOFT:    mov r0, r5195; FP16-SOFT:    bl bf16_sink196; FP16-SOFT:    mov r0, r5197;198; FP16-HARD-LABEL: bf_out_call_multiuse:199; FP16-HARD:  @ %bb.0:200; FP16-HARD:    vmov.f32 s16, s0201; FP16-HARD:    bl bf_inner202; FP16-HARD:    vmov.f32 s18, s0203; FP16-HARD:    vmov.f32 s0, s16204; FP16-HARD:    bl other205; FP16-HARD:    vmov.f32 s0, s18206; FP16-HARD:    bl bf16_sink207; FP16-HARD:    vmov.f32 s0, s18208  %call = call bfloat @bf_inner()209  %call1 = call float @other(float %arg)210  call void @bf16_sink(bfloat %call)211  ret bfloat %call212}213