brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.6 KiB · c0239a0 Raw
361 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=armv8m.main-none-eabi   < %s -frame-pointer=none -mattr=+fp-armv8d16 | FileCheck %s --check-prefix=LE3; RUN: llc -mtriple=armebv8m.main-none-eabi < %s -frame-pointer=none -mattr=+fp-armv8d16 | FileCheck %s --check-prefix=BE4; RUN: llc -mtriple=armv8m.main-none-eabi   < %s -frame-pointer=none -mattr=+fp-armv8d16,+fullfp16 | FileCheck %s --check-prefix=LE-FP165; RUN: llc -mtriple=armebv8m.main-none-eabi < %s -frame-pointer=none -mattr=+fp-armv8d16,+fullfp16 | FileCheck %s --check-prefix=BE-FP166 7;; Global ISel successfully generates code for some functions for little-endian8;; without +fullfp16, and falls back to SelectionDAG in all others.9; RUN: llc -mtriple=armv8m.main-none-eabi   < %s -frame-pointer=none -mattr=+fp-armv8d16 -global-isel=1 -global-isel-abort=2 | FileCheck %s --check-prefix=LE-GISEL10; RUN: llc -mtriple=armebv8m.main-none-eabi < %s -frame-pointer=none -mattr=+fp-armv8d16 -global-isel=1 -global-isel-abort=2 | FileCheck %s --check-prefix=BE11; RUN: llc -mtriple=armv8m.main-none-eabi   < %s -frame-pointer=none -mattr=+fp-armv8d16,+fullfp16 -global-isel=1 -global-isel-abort=2 | FileCheck %s --check-prefix=LE-FP1612; RUN: llc -mtriple=armebv8m.main-none-eabi < %s -frame-pointer=none -mattr=+fp-armv8d16,+fullfp16 -global-isel=1 -global-isel-abort=2 | FileCheck %s --check-prefix=BE-FP1613 14define arm_aapcscc half @callee_soft_half_in_reg(half %f) {15; LE-LABEL: callee_soft_half_in_reg:16; LE:       @ %bb.0: @ %entry17; LE-NEXT:    bx lr18;19; BE-LABEL: callee_soft_half_in_reg:20; BE:       @ %bb.0: @ %entry21; BE-NEXT:    bx lr22;23; LE-FP16-LABEL: callee_soft_half_in_reg:24; LE-FP16:       @ %bb.0: @ %entry25; LE-FP16-NEXT:    vmov.f16 s0, r026; LE-FP16-NEXT:    vmov r0, s027; LE-FP16-NEXT:    bx lr28;29; BE-FP16-LABEL: callee_soft_half_in_reg:30; BE-FP16:       @ %bb.0: @ %entry31; BE-FP16-NEXT:    vmov.f16 s0, r032; BE-FP16-NEXT:    vmov r0, s033; BE-FP16-NEXT:    bx lr34;35; LE-GISEL-LABEL: callee_soft_half_in_reg:36; LE-GISEL:       @ %bb.0: @ %entry37; LE-GISEL-NEXT:    bx lr38entry:39  ret half %f40}41 42define void @caller_soft_half_in_reg() {43; LE-LABEL: caller_soft_half_in_reg:44; LE:       @ %bb.0: @ %entry45; LE-NEXT:    .save {r7, lr}46; LE-NEXT:    push {r7, lr}47; LE-NEXT:    mov.w r0, #1536048; LE-NEXT:    bl callee_soft_half_in_reg49; LE-NEXT:    pop {r7, pc}50;51; BE-LABEL: caller_soft_half_in_reg:52; BE:       @ %bb.0: @ %entry53; BE-NEXT:    .save {r7, lr}54; BE-NEXT:    push {r7, lr}55; BE-NEXT:    mov.w r0, #1536056; BE-NEXT:    bl callee_soft_half_in_reg57; BE-NEXT:    pop {r7, pc}58;59; LE-FP16-LABEL: caller_soft_half_in_reg:60; LE-FP16:       @ %bb.0: @ %entry61; LE-FP16-NEXT:    .save {r7, lr}62; LE-FP16-NEXT:    push {r7, lr}63; LE-FP16-NEXT:    mov.w r0, #1536064; LE-FP16-NEXT:    bl callee_soft_half_in_reg65; LE-FP16-NEXT:    pop {r7, pc}66;67; BE-FP16-LABEL: caller_soft_half_in_reg:68; BE-FP16:       @ %bb.0: @ %entry69; BE-FP16-NEXT:    .save {r7, lr}70; BE-FP16-NEXT:    push {r7, lr}71; BE-FP16-NEXT:    mov.w r0, #1536072; BE-FP16-NEXT:    bl callee_soft_half_in_reg73; BE-FP16-NEXT:    pop {r7, pc}74;75; LE-GISEL-LABEL: caller_soft_half_in_reg:76; LE-GISEL:       @ %bb.0: @ %entry77; LE-GISEL-NEXT:    .save {r7, lr}78; LE-GISEL-NEXT:    push {r7, lr}79; LE-GISEL-NEXT:    mov.w r0, #1536080; LE-GISEL-NEXT:    bl callee_soft_half_in_reg81; LE-GISEL-NEXT:    pop {r7, pc}82entry:83  %ret = call arm_aapcscc half @callee_soft_half_in_reg(half 1.0)84  ret void85}86 87define arm_aapcscc half @callee_soft_half_on_stack(float %r0, float %r1, float %r2, float %r3, half %f) {88; LE-LABEL: callee_soft_half_on_stack:89; LE:       @ %bb.0: @ %entry90; LE-NEXT:    ldr r0, [sp]91; LE-NEXT:    bx lr92;93; BE-LABEL: callee_soft_half_on_stack:94; BE:       @ %bb.0: @ %entry95; BE-NEXT:    ldr r0, [sp]96; BE-NEXT:    bx lr97;98; LE-FP16-LABEL: callee_soft_half_on_stack:99; LE-FP16:       @ %bb.0: @ %entry100; LE-FP16-NEXT:    vldr.16 s0, [sp]101; LE-FP16-NEXT:    vmov r0, s0102; LE-FP16-NEXT:    bx lr103;104; BE-FP16-LABEL: callee_soft_half_on_stack:105; BE-FP16:       @ %bb.0: @ %entry106; BE-FP16-NEXT:    vldr.16 s0, [sp, #2]107; BE-FP16-NEXT:    vmov r0, s0108; BE-FP16-NEXT:    bx lr109;110; LE-GISEL-LABEL: callee_soft_half_on_stack:111; LE-GISEL:       @ %bb.0: @ %entry112; LE-GISEL-NEXT:    mov r0, sp113; LE-GISEL-NEXT:    ldr r0, [r0]114; LE-GISEL-NEXT:    bx lr115entry:116  ret half %f117}118 119define void @caller_soft_half_on_stack() {120; LE-LABEL: caller_soft_half_on_stack:121; LE:       @ %bb.0: @ %entry122; LE-NEXT:    .save {r7, lr}123; LE-NEXT:    push {r7, lr}124; LE-NEXT:    .pad #8125; LE-NEXT:    sub sp, #8126; LE-NEXT:    mov.w r0, #15360127; LE-NEXT:    str r0, [sp]128; LE-NEXT:    bl callee_soft_half_on_stack129; LE-NEXT:    add sp, #8130; LE-NEXT:    pop {r7, pc}131;132; BE-LABEL: caller_soft_half_on_stack:133; BE:       @ %bb.0: @ %entry134; BE-NEXT:    .save {r7, lr}135; BE-NEXT:    push {r7, lr}136; BE-NEXT:    .pad #8137; BE-NEXT:    sub sp, #8138; BE-NEXT:    mov.w r0, #15360139; BE-NEXT:    str r0, [sp]140; BE-NEXT:    bl callee_soft_half_on_stack141; BE-NEXT:    add sp, #8142; BE-NEXT:    pop {r7, pc}143;144; LE-FP16-LABEL: caller_soft_half_on_stack:145; LE-FP16:       @ %bb.0: @ %entry146; LE-FP16-NEXT:    .save {r7, lr}147; LE-FP16-NEXT:    push {r7, lr}148; LE-FP16-NEXT:    .pad #8149; LE-FP16-NEXT:    sub sp, #8150; LE-FP16-NEXT:    mov.w r0, #15360151; LE-FP16-NEXT:    str r0, [sp]152; LE-FP16-NEXT:    bl callee_soft_half_on_stack153; LE-FP16-NEXT:    add sp, #8154; LE-FP16-NEXT:    pop {r7, pc}155;156; BE-FP16-LABEL: caller_soft_half_on_stack:157; BE-FP16:       @ %bb.0: @ %entry158; BE-FP16-NEXT:    .save {r7, lr}159; BE-FP16-NEXT:    push {r7, lr}160; BE-FP16-NEXT:    .pad #8161; BE-FP16-NEXT:    sub sp, #8162; BE-FP16-NEXT:    mov.w r0, #15360163; BE-FP16-NEXT:    str r0, [sp]164; BE-FP16-NEXT:    bl callee_soft_half_on_stack165; BE-FP16-NEXT:    add sp, #8166; BE-FP16-NEXT:    pop {r7, pc}167;168; LE-GISEL-LABEL: caller_soft_half_on_stack:169; LE-GISEL:       @ %bb.0: @ %entry170; LE-GISEL-NEXT:    .save {r7, lr}171; LE-GISEL-NEXT:    push {r7, lr}172; LE-GISEL-NEXT:    .pad #8173; LE-GISEL-NEXT:    sub sp, #8174; LE-GISEL-NEXT:    mov.w r0, #15360175; LE-GISEL-NEXT:    str r0, [sp]176; LE-GISEL-NEXT:    bl callee_soft_half_on_stack177; LE-GISEL-NEXT:    add sp, #8178; LE-GISEL-NEXT:    pop {r7, pc}179entry:180  %ret = call arm_aapcscc half @callee_soft_half_on_stack(float poison, float poison, float poison, float poison, half 1.0)181  ret void182}183 184define arm_aapcs_vfpcc half @callee_hard_half_in_reg(half %f) {185; LE-LABEL: callee_hard_half_in_reg:186; LE:       @ %bb.0: @ %entry187; LE-NEXT:    bx lr188;189; BE-LABEL: callee_hard_half_in_reg:190; BE:       @ %bb.0: @ %entry191; BE-NEXT:    bx lr192;193; LE-FP16-LABEL: callee_hard_half_in_reg:194; LE-FP16:       @ %bb.0: @ %entry195; LE-FP16-NEXT:    bx lr196;197; BE-FP16-LABEL: callee_hard_half_in_reg:198; BE-FP16:       @ %bb.0: @ %entry199; BE-FP16-NEXT:    bx lr200;201; LE-GISEL-LABEL: callee_hard_half_in_reg:202; LE-GISEL:       @ %bb.0: @ %entry203; LE-GISEL-NEXT:    bx lr204entry:205  ret half %f206}207 208define void @caller_hard_half_in_reg() {209; LE-LABEL: caller_hard_half_in_reg:210; LE:       @ %bb.0: @ %entry211; LE-NEXT:    .save {r7, lr}212; LE-NEXT:    push {r7, lr}213; LE-NEXT:    vldr s0, .LCPI5_0214; LE-NEXT:    bl callee_hard_half_in_reg215; LE-NEXT:    pop {r7, pc}216; LE-NEXT:    .p2align 2217; LE-NEXT:  @ %bb.1:218; LE-NEXT:  .LCPI5_0:219; LE-NEXT:    .long 0x00003c00 @ float 2.15239444E-41220;221; BE-LABEL: caller_hard_half_in_reg:222; BE:       @ %bb.0: @ %entry223; BE-NEXT:    .save {r7, lr}224; BE-NEXT:    push {r7, lr}225; BE-NEXT:    vldr s0, .LCPI5_0226; BE-NEXT:    bl callee_hard_half_in_reg227; BE-NEXT:    pop {r7, pc}228; BE-NEXT:    .p2align 2229; BE-NEXT:  @ %bb.1:230; BE-NEXT:  .LCPI5_0:231; BE-NEXT:    .long 0x00003c00 @ float 2.15239444E-41232;233; LE-FP16-LABEL: caller_hard_half_in_reg:234; LE-FP16:       @ %bb.0: @ %entry235; LE-FP16-NEXT:    .save {r7, lr}236; LE-FP16-NEXT:    push {r7, lr}237; LE-FP16-NEXT:    vmov.f16 s0, #1.000000e+00238; LE-FP16-NEXT:    bl callee_hard_half_in_reg239; LE-FP16-NEXT:    pop {r7, pc}240;241; BE-FP16-LABEL: caller_hard_half_in_reg:242; BE-FP16:       @ %bb.0: @ %entry243; BE-FP16-NEXT:    .save {r7, lr}244; BE-FP16-NEXT:    push {r7, lr}245; BE-FP16-NEXT:    vmov.f16 s0, #1.000000e+00246; BE-FP16-NEXT:    bl callee_hard_half_in_reg247; BE-FP16-NEXT:    pop {r7, pc}248;249; LE-GISEL-LABEL: caller_hard_half_in_reg:250; LE-GISEL:       @ %bb.0: @ %entry251; LE-GISEL-NEXT:    .save {r7, lr}252; LE-GISEL-NEXT:    push {r7, lr}253; LE-GISEL-NEXT:    vldr s0, .LCPI5_0254; LE-GISEL-NEXT:    bl callee_hard_half_in_reg255; LE-GISEL-NEXT:    pop {r7, pc}256; LE-GISEL-NEXT:    .p2align 2257; LE-GISEL-NEXT:  @ %bb.1:258; LE-GISEL-NEXT:  .LCPI5_0:259; LE-GISEL-NEXT:    .long 0x00003c00 @ float 2.15239444E-41260entry:261  %ret = call arm_aapcs_vfpcc half @callee_hard_half_in_reg(half 1.0)262  ret void263}264 265define arm_aapcs_vfpcc half @callee_hard_half_on_stack(float %s0, float %s1, float %s2, float %s3, float %s4, float %s5, float %s6, float %s7,float %s8, float %s9, float %s10, float %s11, float %s12, float %s13, float %s14, float %s15, half %f) {266; LE-LABEL: callee_hard_half_on_stack:267; LE:       @ %bb.0: @ %entry268; LE-NEXT:    vldr s0, [sp]269; LE-NEXT:    bx lr270;271; BE-LABEL: callee_hard_half_on_stack:272; BE:       @ %bb.0: @ %entry273; BE-NEXT:    vldr s0, [sp]274; BE-NEXT:    bx lr275;276; LE-FP16-LABEL: callee_hard_half_on_stack:277; LE-FP16:       @ %bb.0: @ %entry278; LE-FP16-NEXT:    vldr.16 s0, [sp]279; LE-FP16-NEXT:    bx lr280;281; BE-FP16-LABEL: callee_hard_half_on_stack:282; BE-FP16:       @ %bb.0: @ %entry283; BE-FP16-NEXT:    vldr.16 s0, [sp, #2]284; BE-FP16-NEXT:    bx lr285;286; LE-GISEL-LABEL: callee_hard_half_on_stack:287; LE-GISEL:       @ %bb.0: @ %entry288; LE-GISEL-NEXT:    mov r0, sp289; LE-GISEL-NEXT:    ldr r0, [r0]290; LE-GISEL-NEXT:    vmov s0, r0291; LE-GISEL-NEXT:    bx lr292entry:293  ret half %f294}295 296 297define void @caller_hard_half_on_stack() {298; LE-LABEL: caller_hard_half_on_stack:299; LE:       @ %bb.0: @ %entry300; LE-NEXT:    .save {r7, lr}301; LE-NEXT:    push {r7, lr}302; LE-NEXT:    .pad #8303; LE-NEXT:    sub sp, #8304; LE-NEXT:    mov.w r0, #15360305; LE-NEXT:    str r0, [sp]306; LE-NEXT:    bl callee_hard_half_on_stack307; LE-NEXT:    add sp, #8308; LE-NEXT:    pop {r7, pc}309;310; BE-LABEL: caller_hard_half_on_stack:311; BE:       @ %bb.0: @ %entry312; BE-NEXT:    .save {r7, lr}313; BE-NEXT:    push {r7, lr}314; BE-NEXT:    .pad #8315; BE-NEXT:    sub sp, #8316; BE-NEXT:    mov.w r0, #15360317; BE-NEXT:    str r0, [sp]318; BE-NEXT:    bl callee_hard_half_on_stack319; BE-NEXT:    add sp, #8320; BE-NEXT:    pop {r7, pc}321;322; LE-FP16-LABEL: caller_hard_half_on_stack:323; LE-FP16:       @ %bb.0: @ %entry324; LE-FP16-NEXT:    .save {r7, lr}325; LE-FP16-NEXT:    push {r7, lr}326; LE-FP16-NEXT:    .pad #8327; LE-FP16-NEXT:    sub sp, #8328; LE-FP16-NEXT:    mov.w r0, #15360329; LE-FP16-NEXT:    str r0, [sp]330; LE-FP16-NEXT:    bl callee_hard_half_on_stack331; LE-FP16-NEXT:    add sp, #8332; LE-FP16-NEXT:    pop {r7, pc}333;334; BE-FP16-LABEL: caller_hard_half_on_stack:335; BE-FP16:       @ %bb.0: @ %entry336; BE-FP16-NEXT:    .save {r7, lr}337; BE-FP16-NEXT:    push {r7, lr}338; BE-FP16-NEXT:    .pad #8339; BE-FP16-NEXT:    sub sp, #8340; BE-FP16-NEXT:    mov.w r0, #15360341; BE-FP16-NEXT:    str r0, [sp]342; BE-FP16-NEXT:    bl callee_hard_half_on_stack343; BE-FP16-NEXT:    add sp, #8344; BE-FP16-NEXT:    pop {r7, pc}345;346; LE-GISEL-LABEL: caller_hard_half_on_stack:347; LE-GISEL:       @ %bb.0: @ %entry348; LE-GISEL-NEXT:    .save {r7, lr}349; LE-GISEL-NEXT:    push {r7, lr}350; LE-GISEL-NEXT:    .pad #8351; LE-GISEL-NEXT:    sub sp, #8352; LE-GISEL-NEXT:    mov.w r0, #15360353; LE-GISEL-NEXT:    str r0, [sp]354; LE-GISEL-NEXT:    bl callee_hard_half_on_stack355; LE-GISEL-NEXT:    add sp, #8356; LE-GISEL-NEXT:    pop {r7, pc}357entry:358  %ret = call arm_aapcs_vfpcc half @callee_hard_half_on_stack(float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, float poison, half 1.0)359  ret void360}361