brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.7 KiB · 3ae0089 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 i32 @f16_to_s32(half %x) {9; CHECK-LABEL: f16_to_s32:10; CHECK:       // %bb.0: // %entry11; CHECK-NEXT:    ptrue p0.s12; CHECK-NEXT:    // kill: def $h0 killed $h0 def $z013; CHECK-NEXT:    fcvtzs z0.s, p0/m, z0.h14; CHECK-NEXT:    fmov w0, s015; CHECK-NEXT:    ret16;17; NONEON-NOSVE-LABEL: f16_to_s32:18; NONEON-NOSVE:       // %bb.0: // %entry19; NONEON-NOSVE-NEXT:    fcvt s0, h020; NONEON-NOSVE-NEXT:    fcvtzs w0, s021; NONEON-NOSVE-NEXT:    ret22  entry:23  %cvt = fptosi half %x to i3224  ret i32 %cvt25}26 27define i64 @f16_to_s64(half %x) {28; CHECK-LABEL: f16_to_s64:29; CHECK:       // %bb.0: // %entry30; CHECK-NEXT:    ptrue p0.d31; CHECK-NEXT:    // kill: def $h0 killed $h0 def $z032; CHECK-NEXT:    fcvtzs z0.d, p0/m, z0.h33; CHECK-NEXT:    fmov x0, d034; CHECK-NEXT:    ret35;36; NONEON-NOSVE-LABEL: f16_to_s64:37; NONEON-NOSVE:       // %bb.0: // %entry38; NONEON-NOSVE-NEXT:    fcvt s0, h039; NONEON-NOSVE-NEXT:    fcvtzs x0, s040; NONEON-NOSVE-NEXT:    ret41  entry:42  %cvt = fptosi half %x to i6443  ret i64 %cvt44}45 46define i32 @f32_to_s32(float %x) {47; CHECK-LABEL: f32_to_s32:48; CHECK:       // %bb.0: // %entry49; CHECK-NEXT:    ptrue p0.s50; CHECK-NEXT:    // kill: def $s0 killed $s0 def $z051; CHECK-NEXT:    fcvtzs z0.s, p0/m, z0.s52; CHECK-NEXT:    fmov w0, s053; CHECK-NEXT:    ret54;55; NONEON-NOSVE-LABEL: f32_to_s32:56; NONEON-NOSVE:       // %bb.0: // %entry57; NONEON-NOSVE-NEXT:    fcvtzs w0, s058; NONEON-NOSVE-NEXT:    ret59  entry:60  %cvt = fptosi float %x to i3261  ret i32 %cvt62}63 64define i64 @f32_to_s64(float %x) {65; CHECK-LABEL: f32_to_s64:66; CHECK:       // %bb.0: // %entry67; CHECK-NEXT:    ptrue p0.d68; CHECK-NEXT:    // kill: def $s0 killed $s0 def $z069; CHECK-NEXT:    fcvtzs z0.d, p0/m, z0.s70; CHECK-NEXT:    fmov x0, d071; CHECK-NEXT:    ret72;73; NONEON-NOSVE-LABEL: f32_to_s64:74; NONEON-NOSVE:       // %bb.0: // %entry75; NONEON-NOSVE-NEXT:    fcvtzs x0, s076; NONEON-NOSVE-NEXT:    ret77  entry:78  %cvt = fptosi float %x to i6479  ret i64 %cvt80}81 82define i32 @f64_to_s32(double %x) {83; CHECK-LABEL: f64_to_s32:84; CHECK:       // %bb.0: // %entry85; CHECK-NEXT:    fcvtzs w0, d086; CHECK-NEXT:    ret87;88; NONEON-NOSVE-LABEL: f64_to_s32:89; NONEON-NOSVE:       // %bb.0: // %entry90; NONEON-NOSVE-NEXT:    fcvtzs w0, d091; NONEON-NOSVE-NEXT:    ret92  entry:93  %cvt = fptosi double %x to i3294  ret i32 %cvt95}96 97define i64 @f64_to_s64(double %x) {98; CHECK-LABEL: f64_to_s64:99; CHECK:       // %bb.0: // %entry100; CHECK-NEXT:    ptrue p0.d101; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0102; CHECK-NEXT:    fcvtzs z0.d, p0/m, z0.d103; CHECK-NEXT:    fmov x0, d0104; CHECK-NEXT:    ret105;106; NONEON-NOSVE-LABEL: f64_to_s64:107; NONEON-NOSVE:       // %bb.0: // %entry108; NONEON-NOSVE-NEXT:    fcvtzs x0, d0109; NONEON-NOSVE-NEXT:    ret110  entry:111  %cvt = fptosi double %x to i64112  ret i64 %cvt113}114 115define i32 @f16_to_u32(half %x) {116; CHECK-LABEL: f16_to_u32:117; CHECK:       // %bb.0: // %entry118; CHECK-NEXT:    ptrue p0.s119; CHECK-NEXT:    // kill: def $h0 killed $h0 def $z0120; CHECK-NEXT:    fcvtzu z0.s, p0/m, z0.h121; CHECK-NEXT:    fmov w0, s0122; CHECK-NEXT:    ret123;124; NONEON-NOSVE-LABEL: f16_to_u32:125; NONEON-NOSVE:       // %bb.0: // %entry126; NONEON-NOSVE-NEXT:    fcvt s0, h0127; NONEON-NOSVE-NEXT:    fcvtzu w0, s0128; NONEON-NOSVE-NEXT:    ret129  entry:130  %cvt = fptoui half %x to i32131  ret i32 %cvt132}133 134define i64 @f16_to_u64(half %x) {135; CHECK-LABEL: f16_to_u64:136; CHECK:       // %bb.0: // %entry137; CHECK-NEXT:    ptrue p0.d138; CHECK-NEXT:    // kill: def $h0 killed $h0 def $z0139; CHECK-NEXT:    fcvtzu z0.d, p0/m, z0.h140; CHECK-NEXT:    fmov x0, d0141; CHECK-NEXT:    ret142;143; NONEON-NOSVE-LABEL: f16_to_u64:144; NONEON-NOSVE:       // %bb.0: // %entry145; NONEON-NOSVE-NEXT:    fcvt s0, h0146; NONEON-NOSVE-NEXT:    fcvtzu x0, s0147; NONEON-NOSVE-NEXT:    ret148  entry:149  %cvt = fptoui half %x to i64150  ret i64 %cvt151}152 153define i32 @f32_to_u32(float %x) {154; CHECK-LABEL: f32_to_u32:155; CHECK:       // %bb.0: // %entry156; CHECK-NEXT:    ptrue p0.s157; CHECK-NEXT:    // kill: def $s0 killed $s0 def $z0158; CHECK-NEXT:    fcvtzu z0.s, p0/m, z0.s159; CHECK-NEXT:    fmov w0, s0160; CHECK-NEXT:    ret161;162; NONEON-NOSVE-LABEL: f32_to_u32:163; NONEON-NOSVE:       // %bb.0: // %entry164; NONEON-NOSVE-NEXT:    fcvtzu w0, s0165; NONEON-NOSVE-NEXT:    ret166  entry:167  %cvt = fptoui float %x to i32168  ret i32 %cvt169}170 171define i64 @f32_to_u64(float %x) {172; CHECK-LABEL: f32_to_u64:173; CHECK:       // %bb.0: // %entry174; CHECK-NEXT:    ptrue p0.d175; CHECK-NEXT:    // kill: def $s0 killed $s0 def $z0176; CHECK-NEXT:    fcvtzu z0.d, p0/m, z0.s177; CHECK-NEXT:    fmov x0, d0178; CHECK-NEXT:    ret179;180; NONEON-NOSVE-LABEL: f32_to_u64:181; NONEON-NOSVE:       // %bb.0: // %entry182; NONEON-NOSVE-NEXT:    fcvtzu x0, s0183; NONEON-NOSVE-NEXT:    ret184  entry:185  %cvt = fptoui float %x to i64186  ret i64 %cvt187}188 189define i32 @f64_to_u32(double %x) {190; CHECK-LABEL: f64_to_u32:191; CHECK:       // %bb.0: // %entry192; CHECK-NEXT:    fcvtzu w0, d0193; CHECK-NEXT:    ret194;195; NONEON-NOSVE-LABEL: f64_to_u32:196; NONEON-NOSVE:       // %bb.0: // %entry197; NONEON-NOSVE-NEXT:    fcvtzu w0, d0198; NONEON-NOSVE-NEXT:    ret199  entry:200  %cvt = fptoui double %x to i32201  ret i32 %cvt202}203 204define i64 @f64_to_u64(double %x) {205; CHECK-LABEL: f64_to_u64:206; CHECK:       // %bb.0: // %entry207; CHECK-NEXT:    ptrue p0.d208; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0209; CHECK-NEXT:    fcvtzu z0.d, p0/m, z0.d210; CHECK-NEXT:    fmov x0, d0211; CHECK-NEXT:    ret212;213; NONEON-NOSVE-LABEL: f64_to_u64:214; NONEON-NOSVE:       // %bb.0: // %entry215; NONEON-NOSVE-NEXT:    fcvtzu x0, d0216; NONEON-NOSVE-NEXT:    ret217  entry:218  %cvt = fptoui double %x to i64219  ret i64 %cvt220}221 222define i32 @strict_convert_signed(double %x) {223; CHECK-LABEL: strict_convert_signed:224; CHECK:       // %bb.0: // %entry225; CHECK-NEXT:    fcvtzs w0, d0226; CHECK-NEXT:    ret227;228; NONEON-NOSVE-LABEL: strict_convert_signed:229; NONEON-NOSVE:       // %bb.0: // %entry230; NONEON-NOSVE-NEXT:    fcvtzs w0, d0231; NONEON-NOSVE-NEXT:    ret232  entry:233  %cvt = call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %x, metadata !"fpexcept.strict") #0234  ret i32 %cvt235}236 237define i32 @strict_convert_unsigned(float %x) {238; CHECK-LABEL: strict_convert_unsigned:239; CHECK:       // %bb.0: // %entry240; CHECK-NEXT:    fcvtzu w0, s0241; CHECK-NEXT:    ret242;243; NONEON-NOSVE-LABEL: strict_convert_unsigned:244; NONEON-NOSVE:       // %bb.0: // %entry245; NONEON-NOSVE-NEXT:    fcvtzu w0, s0246; NONEON-NOSVE-NEXT:    ret247  entry:248  %cvt = call i32 @llvm.experimental.constrained.fptoui.i32.f32(float %x, metadata !"fpexcept.strict") #0249  ret i32 %cvt250}251 252attributes #0 = { strictfp }253