brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.8 KiB · d4221da Raw
253 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s3; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s4; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE5 6target triple = "aarch64-unknown-linux-gnu"7 8define half @s32_to_f16(i32 %x) {9; CHECK-LABEL: s32_to_f16:10; CHECK:       // %bb.0: // %entry11; CHECK-NEXT:    fmov s0, w012; CHECK-NEXT:    ptrue p0.s13; CHECK-NEXT:    scvtf z0.h, p0/m, z0.s14; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $z015; CHECK-NEXT:    ret16;17; NONEON-NOSVE-LABEL: s32_to_f16:18; NONEON-NOSVE:       // %bb.0: // %entry19; NONEON-NOSVE-NEXT:    scvtf s0, w020; NONEON-NOSVE-NEXT:    fcvt h0, s021; NONEON-NOSVE-NEXT:    ret22entry:23  %cvt = sitofp i32 %x to half24  ret half %cvt25}26 27define float @s32_to_f32(i32 %x) {28; CHECK-LABEL: s32_to_f32:29; CHECK:       // %bb.0: // %entry30; CHECK-NEXT:    fmov s0, w031; CHECK-NEXT:    ptrue p0.s32; CHECK-NEXT:    scvtf z0.s, p0/m, z0.s33; CHECK-NEXT:    // kill: def $s0 killed $s0 killed $z034; CHECK-NEXT:    ret35;36; NONEON-NOSVE-LABEL: s32_to_f32:37; NONEON-NOSVE:       // %bb.0: // %entry38; NONEON-NOSVE-NEXT:    scvtf s0, w039; NONEON-NOSVE-NEXT:    ret40entry:41  %cvt = sitofp i32 %x to float42  ret float %cvt43}44 45define double @s32_to_f64(i32 %x) {46; CHECK-LABEL: s32_to_f64:47; CHECK:       // %bb.0: // %entry48; CHECK-NEXT:    scvtf d0, w049; CHECK-NEXT:    ret50;51; NONEON-NOSVE-LABEL: s32_to_f64:52; NONEON-NOSVE:       // %bb.0: // %entry53; NONEON-NOSVE-NEXT:    scvtf d0, w054; NONEON-NOSVE-NEXT:    ret55entry:56  %cvt = sitofp i32 %x to double57  ret double %cvt58}59 60define half @u32_to_f16(i32 %x) {61; CHECK-LABEL: u32_to_f16:62; CHECK:       // %bb.0: // %entry63; CHECK-NEXT:    fmov s0, w064; CHECK-NEXT:    ptrue p0.s65; CHECK-NEXT:    ucvtf z0.h, p0/m, z0.s66; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $z067; CHECK-NEXT:    ret68;69; NONEON-NOSVE-LABEL: u32_to_f16:70; NONEON-NOSVE:       // %bb.0: // %entry71; NONEON-NOSVE-NEXT:    ucvtf s0, w072; NONEON-NOSVE-NEXT:    fcvt h0, s073; NONEON-NOSVE-NEXT:    ret74entry:75  %cvt = uitofp i32 %x to half76  ret half %cvt77}78 79define float @u32_to_f32(i32 %x) {80; CHECK-LABEL: u32_to_f32:81; CHECK:       // %bb.0: // %entry82; CHECK-NEXT:    fmov s0, w083; CHECK-NEXT:    ptrue p0.s84; CHECK-NEXT:    ucvtf z0.s, p0/m, z0.s85; CHECK-NEXT:    // kill: def $s0 killed $s0 killed $z086; CHECK-NEXT:    ret87;88; NONEON-NOSVE-LABEL: u32_to_f32:89; NONEON-NOSVE:       // %bb.0: // %entry90; NONEON-NOSVE-NEXT:    ucvtf s0, w091; NONEON-NOSVE-NEXT:    ret92entry:93  %cvt = uitofp i32 %x to float94  ret float %cvt95}96 97define double @u32_to_f64(i32 %x) {98; CHECK-LABEL: u32_to_f64:99; CHECK:       // %bb.0: // %entry100; CHECK-NEXT:    ucvtf d0, w0101; CHECK-NEXT:    ret102;103; NONEON-NOSVE-LABEL: u32_to_f64:104; NONEON-NOSVE:       // %bb.0: // %entry105; NONEON-NOSVE-NEXT:    ucvtf d0, w0106; NONEON-NOSVE-NEXT:    ret107entry:108  %cvt = uitofp i32 %x to double109  ret double %cvt110}111 112define half @s64_to_f16(i64 %x) {113; CHECK-LABEL: s64_to_f16:114; CHECK:       // %bb.0: // %entry115; CHECK-NEXT:    fmov d0, x0116; CHECK-NEXT:    ptrue p0.d117; CHECK-NEXT:    scvtf z0.h, p0/m, z0.d118; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $z0119; CHECK-NEXT:    ret120;121; NONEON-NOSVE-LABEL: s64_to_f16:122; NONEON-NOSVE:       // %bb.0: // %entry123; NONEON-NOSVE-NEXT:    scvtf s0, x0124; NONEON-NOSVE-NEXT:    fcvt h0, s0125; NONEON-NOSVE-NEXT:    ret126entry:127  %cvt = sitofp i64 %x to half128  ret half %cvt129}130 131define float @s64_to_f32(i64 %x) {132; CHECK-LABEL: s64_to_f32:133; CHECK:       // %bb.0: // %entry134; CHECK-NEXT:    fmov d0, x0135; CHECK-NEXT:    ptrue p0.d136; CHECK-NEXT:    scvtf z0.s, p0/m, z0.d137; CHECK-NEXT:    // kill: def $s0 killed $s0 killed $z0138; CHECK-NEXT:    ret139;140; NONEON-NOSVE-LABEL: s64_to_f32:141; NONEON-NOSVE:       // %bb.0: // %entry142; NONEON-NOSVE-NEXT:    scvtf s0, x0143; NONEON-NOSVE-NEXT:    ret144entry:145  %cvt = sitofp i64 %x to float146  ret float %cvt147}148 149define double @s64_to_f64(i64 %x) {150; CHECK-LABEL: s64_to_f64:151; CHECK:       // %bb.0: // %entry152; CHECK-NEXT:    fmov d0, x0153; CHECK-NEXT:    ptrue p0.d154; CHECK-NEXT:    scvtf z0.d, p0/m, z0.d155; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0156; CHECK-NEXT:    ret157;158; NONEON-NOSVE-LABEL: s64_to_f64:159; NONEON-NOSVE:       // %bb.0: // %entry160; NONEON-NOSVE-NEXT:    scvtf d0, x0161; NONEON-NOSVE-NEXT:    ret162entry:163  %cvt = sitofp i64 %x to double164  ret double %cvt165}166 167define half @u64_to_f16(i64 %x) {168; CHECK-LABEL: u64_to_f16:169; CHECK:       // %bb.0: // %entry170; CHECK-NEXT:    fmov d0, x0171; CHECK-NEXT:    ptrue p0.d172; CHECK-NEXT:    ucvtf z0.h, p0/m, z0.d173; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $z0174; CHECK-NEXT:    ret175;176; NONEON-NOSVE-LABEL: u64_to_f16:177; NONEON-NOSVE:       // %bb.0: // %entry178; NONEON-NOSVE-NEXT:    ucvtf s0, x0179; NONEON-NOSVE-NEXT:    fcvt h0, s0180; NONEON-NOSVE-NEXT:    ret181entry:182  %cvt = uitofp i64 %x to half183  ret half %cvt184}185 186define float @u64_to_f32(i64 %x) {187; CHECK-LABEL: u64_to_f32:188; CHECK:       // %bb.0: // %entry189; CHECK-NEXT:    fmov d0, x0190; CHECK-NEXT:    ptrue p0.d191; CHECK-NEXT:    ucvtf z0.s, p0/m, z0.d192; CHECK-NEXT:    // kill: def $s0 killed $s0 killed $z0193; CHECK-NEXT:    ret194;195; NONEON-NOSVE-LABEL: u64_to_f32:196; NONEON-NOSVE:       // %bb.0: // %entry197; NONEON-NOSVE-NEXT:    ucvtf s0, x0198; NONEON-NOSVE-NEXT:    ret199entry:200  %cvt = uitofp i64 %x to float201  ret float %cvt202}203 204define double @u64_to_f64(i64 %x) {205; CHECK-LABEL: u64_to_f64:206; CHECK:       // %bb.0: // %entry207; CHECK-NEXT:    fmov d0, x0208; CHECK-NEXT:    ptrue p0.d209; CHECK-NEXT:    ucvtf z0.d, p0/m, z0.d210; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0211; CHECK-NEXT:    ret212;213; NONEON-NOSVE-LABEL: u64_to_f64:214; NONEON-NOSVE:       // %bb.0: // %entry215; NONEON-NOSVE-NEXT:    ucvtf d0, x0216; NONEON-NOSVE-NEXT:    ret217entry:218  %cvt = uitofp i64 %x to double219  ret double %cvt220}221 222define float @strict_convert_signed(i32 %x) {223; CHECK-LABEL: strict_convert_signed:224; CHECK:       // %bb.0: // %entry225; CHECK-NEXT:    scvtf s0, w0226; CHECK-NEXT:    ret227;228; NONEON-NOSVE-LABEL: strict_convert_signed:229; NONEON-NOSVE:       // %bb.0: // %entry230; NONEON-NOSVE-NEXT:    scvtf s0, w0231; NONEON-NOSVE-NEXT:    ret232entry:233  %cvt = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0234  ret float %cvt235}236 237define float @strict_convert_unsigned(i64 %x) {238; CHECK-LABEL: strict_convert_unsigned:239; CHECK:       // %bb.0: // %entry240; CHECK-NEXT:    ucvtf s0, x0241; CHECK-NEXT:    ret242;243; NONEON-NOSVE-LABEL: strict_convert_unsigned:244; NONEON-NOSVE:       // %bb.0: // %entry245; NONEON-NOSVE-NEXT:    ucvtf s0, x0246; NONEON-NOSVE-NEXT:    ret247entry:248  %cvt = call float @llvm.experimental.constrained.uitofp.f32.i64(i64 %x, metadata !"round.tonearest", metadata !"fpexcept.strict") #0249  ret float %cvt250}251 252attributes #0 = { strictfp }253