brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.7 KiB · 1d33545 Raw
411 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -O0 -fast-isel -verify-machineinstrs -mtriple=arm64-eabi < %s | FileCheck --enable-var-scope %s3 4; Test fptosi5define i32 @fptosi_wh(half %a) nounwind ssp {6; CHECK-LABEL: fptosi_wh:7; CHECK:       // %bb.0: // %entry8; CHECK-NEXT:    fcvt s0, h09; CHECK-NEXT:    fcvtzs w0, s010; CHECK-NEXT:    ret11entry:12  %conv = fptosi half %a to i3213  ret i32 %conv14}15 16; Test fptoui17define i32 @fptoui_swh(half %a) nounwind ssp {18; CHECK-LABEL: fptoui_swh:19; CHECK:       // %bb.0: // %entry20; CHECK-NEXT:    fcvt s0, h021; CHECK-NEXT:    fcvtzu w0, s022; CHECK-NEXT:    ret23entry:24  %conv = fptoui half %a to i3225  ret i32 %conv26}27 28; Test sitofp29define half @sitofp_hw_i1(i1 %a) nounwind ssp {30; CHECK-LABEL: sitofp_hw_i1:31; CHECK:       // %bb.0: // %entry32; CHECK-NEXT:    sbfx w8, w0, #0, #133; CHECK-NEXT:    scvtf s0, w834; CHECK-NEXT:    fcvt h0, s035; CHECK-NEXT:    ret36entry:37  %conv = sitofp i1 %a to half38  ret half %conv39}40 41; Test sitofp42define half @sitofp_hw_i8(i8 %a) nounwind ssp {43; CHECK-LABEL: sitofp_hw_i8:44; CHECK:       // %bb.0: // %entry45; CHECK-NEXT:    sxtb w8, w046; CHECK-NEXT:    scvtf s0, w847; CHECK-NEXT:    fcvt h0, s048; CHECK-NEXT:    ret49entry:50  %conv = sitofp i8 %a to half51  ret half %conv52}53 54; Test sitofp55define half @sitofp_hw_i16(i16 %a) nounwind ssp {56; CHECK-LABEL: sitofp_hw_i16:57; CHECK:       // %bb.0: // %entry58; CHECK-NEXT:    sxth w8, w059; CHECK-NEXT:    scvtf s0, w860; CHECK-NEXT:    fcvt h0, s061; CHECK-NEXT:    ret62entry:63  %conv = sitofp i16 %a to half64  ret half %conv65}66 67; Test sitofp68define half @sitofp_hw_i32(i32 %a) nounwind ssp {69; CHECK-LABEL: sitofp_hw_i32:70; CHECK:       // %bb.0: // %entry71; CHECK-NEXT:    scvtf s0, w072; CHECK-NEXT:    fcvt h0, s073; CHECK-NEXT:    ret74entry:75  %conv = sitofp i32 %a to half76  ret half %conv77}78 79; Test sitofp80define half @sitofp_hx(i64 %a) nounwind ssp {81; CHECK-LABEL: sitofp_hx:82; CHECK:       // %bb.0: // %entry83; CHECK-NEXT:    scvtf s0, x084; CHECK-NEXT:    fcvt h0, s085; CHECK-NEXT:    ret86entry:87  %conv = sitofp i64 %a to half88  ret half %conv89}90 91; Test uitofp92define half @uitofp_hw_i1(i1 %a) nounwind ssp {93; CHECK-LABEL: uitofp_hw_i1:94; CHECK:       // %bb.0: // %entry95; CHECK-NEXT:    and w8, w0, #0x196; CHECK-NEXT:    ucvtf s0, w897; CHECK-NEXT:    fcvt h0, s098; CHECK-NEXT:    ret99entry:100  %conv = uitofp i1 %a to half101  ret half %conv102}103 104; Test uitofp105define half @uitofp_hw_i8(i8 %a) nounwind ssp {106; CHECK-LABEL: uitofp_hw_i8:107; CHECK:       // %bb.0: // %entry108; CHECK-NEXT:    and w8, w0, #0xff109; CHECK-NEXT:    ucvtf s0, w8110; CHECK-NEXT:    fcvt h0, s0111; CHECK-NEXT:    ret112entry:113  %conv = uitofp i8 %a to half114  ret half %conv115}116 117; Test uitofp118define half @uitofp_hw_i16(i16 %a) nounwind ssp {119; CHECK-LABEL: uitofp_hw_i16:120; CHECK:       // %bb.0: // %entry121; CHECK-NEXT:    and w8, w0, #0xffff122; CHECK-NEXT:    ucvtf s0, w8123; CHECK-NEXT:    fcvt h0, s0124; CHECK-NEXT:    ret125entry:126  %conv = uitofp i16 %a to half127  ret half %conv128}129 130; Test uitofp131define half @uitofp_hw_i32(i32 %a) nounwind ssp {132; CHECK-LABEL: uitofp_hw_i32:133; CHECK:       // %bb.0: // %entry134; CHECK-NEXT:    ucvtf s0, w0135; CHECK-NEXT:    fcvt h0, s0136; CHECK-NEXT:    ret137entry:138  %conv = uitofp i32 %a to half139  ret half %conv140}141 142; Test uitofp143define half @uitofp_hx(i64 %a) nounwind ssp {144; CHECK-LABEL: uitofp_hx:145; CHECK:       // %bb.0: // %entry146; CHECK-NEXT:    ucvtf s0, x0147; CHECK-NEXT:    fcvt h0, s0148; CHECK-NEXT:    ret149entry:150  %conv = uitofp i64 %a to half151  ret half %conv152}153 154; Test fptosi155define i32 @fptosi_bf(bfloat %a) nounwind ssp {156; CHECK-LABEL: fptosi_bf:157; CHECK:       // %bb.0: // %entry158; CHECK-NEXT:    // kill: def $d0 killed $h0159; CHECK-NEXT:    shll v0.4s, v0.4h, #16160; CHECK-NEXT:    // kill: def $s0 killed $s0 killed $q0161; CHECK-NEXT:    fcvtzs w0, s0162; CHECK-NEXT:    ret163entry:164  %conv = fptosi bfloat %a to i32165  ret i32 %conv166}167 168; Test fptoui169define i32 @fptoui_sbf(bfloat %a) nounwind ssp {170; CHECK-LABEL: fptoui_sbf:171; CHECK:       // %bb.0: // %entry172; CHECK-NEXT:    // kill: def $d0 killed $h0173; CHECK-NEXT:    shll v0.4s, v0.4h, #16174; CHECK-NEXT:    // kill: def $s0 killed $s0 killed $q0175; CHECK-NEXT:    fcvtzu w0, s0176; CHECK-NEXT:    ret177entry:178  %conv = fptoui bfloat %a to i32179  ret i32 %conv180}181 182; Test sitofp183define bfloat @sitofp_bf_i1(i1 %a) nounwind ssp {184; CHECK-LABEL: sitofp_bf_i1:185; CHECK:       // %bb.0: // %entry186; CHECK-NEXT:    sbfx w8, w0, #0, #1187; CHECK-NEXT:    scvtf s0, w8188; CHECK-NEXT:    fmov w9, s0189; CHECK-NEXT:    ubfx w8, w9, #16, #1190; CHECK-NEXT:    add w8, w8, w9191; CHECK-NEXT:    mov w9, #32767 // =0x7fff192; CHECK-NEXT:    add w8, w8, w9193; CHECK-NEXT:    lsr w8, w8, #16194; CHECK-NEXT:    fmov s0, w8195; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0196; CHECK-NEXT:    ret197entry:198  %conv = sitofp i1 %a to bfloat199  ret bfloat %conv200}201 202; Test sitofp203define bfloat @sitofp_bf_i8(i8 %a) nounwind ssp {204; CHECK-LABEL: sitofp_bf_i8:205; CHECK:       // %bb.0: // %entry206; CHECK-NEXT:    sxtb w8, w0207; CHECK-NEXT:    scvtf s0, w8208; CHECK-NEXT:    fmov w9, s0209; CHECK-NEXT:    ubfx w8, w9, #16, #1210; CHECK-NEXT:    add w8, w8, w9211; CHECK-NEXT:    mov w9, #32767 // =0x7fff212; CHECK-NEXT:    add w8, w8, w9213; CHECK-NEXT:    lsr w8, w8, #16214; CHECK-NEXT:    fmov s0, w8215; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0216; CHECK-NEXT:    ret217entry:218  %conv = sitofp i8 %a to bfloat219  ret bfloat %conv220}221 222; Test sitofp223define bfloat @sitofp_bf_i16(i16 %a) nounwind ssp {224; CHECK-LABEL: sitofp_bf_i16:225; CHECK:       // %bb.0: // %entry226; CHECK-NEXT:    sxth w8, w0227; CHECK-NEXT:    scvtf s0, w8228; CHECK-NEXT:    fmov w9, s0229; CHECK-NEXT:    ubfx w8, w9, #16, #1230; CHECK-NEXT:    add w8, w8, w9231; CHECK-NEXT:    mov w9, #32767 // =0x7fff232; CHECK-NEXT:    add w8, w8, w9233; CHECK-NEXT:    lsr w8, w8, #16234; CHECK-NEXT:    fmov s0, w8235; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0236; CHECK-NEXT:    ret237entry:238  %conv = sitofp i16 %a to bfloat239  ret bfloat %conv240}241 242; Test sitofp243define bfloat @sitofp_bf_i32(i32 %a) nounwind ssp {244; CHECK-LABEL: sitofp_bf_i32:245; CHECK:       // %bb.0: // %entry246; CHECK-NEXT:    scvtf d0, w0247; CHECK-NEXT:    fcvtxn s0, d0248; CHECK-NEXT:    fmov w9, s0249; CHECK-NEXT:    ubfx w8, w9, #16, #1250; CHECK-NEXT:    add w8, w8, w9251; CHECK-NEXT:    mov w9, #32767 // =0x7fff252; CHECK-NEXT:    add w8, w8, w9253; CHECK-NEXT:    lsr w8, w8, #16254; CHECK-NEXT:    fmov s0, w8255; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0256; CHECK-NEXT:    ret257entry:258  %conv = sitofp i32 %a to bfloat259  ret bfloat %conv260}261 262; Test sitofp263define bfloat @sitofp_bf_i164(i64 %a) nounwind ssp {264; CHECK-LABEL: sitofp_bf_i164:265; CHECK:       // %bb.0: // %entry266; CHECK-NEXT:    subs x8, x0, #0267; CHECK-NEXT:    cneg x10, x0, mi268; CHECK-NEXT:    and x8, x10, #0xfffffffffffff000269; CHECK-NEXT:    lsr x9, x10, #53270; CHECK-NEXT:    subs x9, x9, #0271; CHECK-NEXT:    csel x8, x8, x10, ne272; CHECK-NEXT:    scvtf d0, x8273; CHECK-NEXT:    fmov x8, d0274; CHECK-NEXT:    and x9, x0, #0x8000000000000000275; CHECK-NEXT:    orr x8, x8, x9276; CHECK-NEXT:    cset w9, ne277; CHECK-NEXT:    ands x10, x10, #0xfff278; CHECK-NEXT:    csel w9, wzr, w9, eq279; CHECK-NEXT:    mov w9, w9280; CHECK-NEXT:    // kill: def $x9 killed $w9281; CHECK-NEXT:    orr x8, x8, x9282; CHECK-NEXT:    fmov d0, x8283; CHECK-NEXT:    fcvtxn s0, d0284; CHECK-NEXT:    fmov w9, s0285; CHECK-NEXT:    ubfx w8, w9, #16, #1286; CHECK-NEXT:    add w8, w8, w9287; CHECK-NEXT:    mov w9, #32767 // =0x7fff288; CHECK-NEXT:    add w8, w8, w9289; CHECK-NEXT:    lsr w8, w8, #16290; CHECK-NEXT:    fmov s0, w8291; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0292; CHECK-NEXT:    ret293entry:294  %conv = sitofp i64 %a to bfloat295  ret bfloat %conv296}297 298; Test uitofp299define bfloat @uitofp_bf_i1(i1 %a) nounwind ssp {300; CHECK-LABEL: uitofp_bf_i1:301; CHECK:       // %bb.0: // %entry302; CHECK-NEXT:    and w8, w0, #0x1303; CHECK-NEXT:    ucvtf s0, w8304; CHECK-NEXT:    fmov w9, s0305; CHECK-NEXT:    ubfx w8, w9, #16, #1306; CHECK-NEXT:    add w8, w8, w9307; CHECK-NEXT:    mov w9, #32767 // =0x7fff308; CHECK-NEXT:    add w8, w8, w9309; CHECK-NEXT:    lsr w8, w8, #16310; CHECK-NEXT:    fmov s0, w8311; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0312; CHECK-NEXT:    ret313entry:314  %conv = uitofp i1 %a to bfloat315  ret bfloat %conv316}317 318; Test uitofp319define bfloat @uitofp_bf_i8(i8 %a) nounwind ssp {320; CHECK-LABEL: uitofp_bf_i8:321; CHECK:       // %bb.0: // %entry322; CHECK-NEXT:    and w8, w0, #0xff323; CHECK-NEXT:    ucvtf s0, w8324; CHECK-NEXT:    fmov w9, s0325; CHECK-NEXT:    ubfx w8, w9, #16, #1326; CHECK-NEXT:    add w8, w8, w9327; CHECK-NEXT:    mov w9, #32767 // =0x7fff328; CHECK-NEXT:    add w8, w8, w9329; CHECK-NEXT:    lsr w8, w8, #16330; CHECK-NEXT:    fmov s0, w8331; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0332; CHECK-NEXT:    ret333entry:334  %conv = uitofp i8 %a to bfloat335  ret bfloat %conv336}337 338; Test uitofp339define bfloat @uitofp_bf_i16(i16 %a) nounwind ssp {340; CHECK-LABEL: uitofp_bf_i16:341; CHECK:       // %bb.0: // %entry342; CHECK-NEXT:    and w8, w0, #0xffff343; CHECK-NEXT:    ucvtf s0, w8344; CHECK-NEXT:    fmov w9, s0345; CHECK-NEXT:    ubfx w8, w9, #16, #1346; CHECK-NEXT:    add w8, w8, w9347; CHECK-NEXT:    mov w9, #32767 // =0x7fff348; CHECK-NEXT:    add w8, w8, w9349; CHECK-NEXT:    lsr w8, w8, #16350; CHECK-NEXT:    fmov s0, w8351; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0352; CHECK-NEXT:    ret353entry:354  %conv = uitofp i16 %a to bfloat355  ret bfloat %conv356}357 358; Test uitofp359define bfloat @uitofp_bf_i32(i32 %a) nounwind ssp {360; CHECK-LABEL: uitofp_bf_i32:361; CHECK:       // %bb.0: // %entry362; CHECK-NEXT:    ucvtf d0, w0363; CHECK-NEXT:    fcvtxn s0, d0364; CHECK-NEXT:    fmov w9, s0365; CHECK-NEXT:    ubfx w8, w9, #16, #1366; CHECK-NEXT:    add w8, w8, w9367; CHECK-NEXT:    mov w9, #32767 // =0x7fff368; CHECK-NEXT:    add w8, w8, w9369; CHECK-NEXT:    lsr w8, w8, #16370; CHECK-NEXT:    fmov s0, w8371; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0372; CHECK-NEXT:    ret373entry:374  %conv = uitofp i32 %a to bfloat375  ret bfloat %conv376}377 378; Test uitofp379define bfloat @uitofp_bf_i64(i64 %a) nounwind ssp {380; CHECK-LABEL: uitofp_bf_i64:381; CHECK:       // %bb.0: // %entry382; CHECK-NEXT:    and x8, x0, #0xfffffffffffff000383; CHECK-NEXT:    lsr x9, x0, #53384; CHECK-NEXT:    subs x9, x9, #0385; CHECK-NEXT:    csel x8, x8, x0, ne386; CHECK-NEXT:    ucvtf d0, x8387; CHECK-NEXT:    fmov x8, d0388; CHECK-NEXT:    cset w9, ne389; CHECK-NEXT:    ands x10, x0, #0xfff390; CHECK-NEXT:    csel w9, wzr, w9, eq391; CHECK-NEXT:    mov w9, w9392; CHECK-NEXT:    // kill: def $x9 killed $w9393; CHECK-NEXT:    orr x8, x8, x9394; CHECK-NEXT:    fmov d0, x8395; CHECK-NEXT:    fcvtxn s0, d0396; CHECK-NEXT:    fmov w9, s0397; CHECK-NEXT:    ubfx w8, w9, #16, #1398; CHECK-NEXT:    add w8, w8, w9399; CHECK-NEXT:    mov w9, #32767 // =0x7fff400; CHECK-NEXT:    add w8, w8, w9401; CHECK-NEXT:    lsr w8, w8, #16402; CHECK-NEXT:    fmov s0, w8403; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0404; CHECK-NEXT:    ret405entry:406  %conv = uitofp i64 %a to bfloat407  ret bfloat %conv408}409 410 411