174 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 -mattr=+sme2p2 -force-streaming-compatible < %s | FileCheck %s --check-prefix=USE-NEON-NO-GPRS5; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE6 7target triple = "aarch64-unknown-linux-gnu"8 9define double @t1(double %x) {10; CHECK-LABEL: t1:11; CHECK: // %bb.0: // %entry12; CHECK-NEXT: ptrue p0.d13; CHECK-NEXT: // kill: def $d0 killed $d0 def $z014; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d15; CHECK-NEXT: scvtf z0.d, p0/m, z0.d16; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z017; CHECK-NEXT: ret18;19; USE-NEON-NO-GPRS-LABEL: t1:20; USE-NEON-NO-GPRS: // %bb.0: // %entry21; USE-NEON-NO-GPRS-NEXT: fcvtzs d0, d022; USE-NEON-NO-GPRS-NEXT: scvtf d0, d023; USE-NEON-NO-GPRS-NEXT: ret24;25; NONEON-NOSVE-LABEL: t1:26; NONEON-NOSVE: // %bb.0: // %entry27; NONEON-NOSVE-NEXT: fcvtzs x8, d028; NONEON-NOSVE-NEXT: scvtf d0, x829; NONEON-NOSVE-NEXT: ret30entry:31 %conv = fptosi double %x to i6432 %conv1 = sitofp i64 %conv to double33 ret double %conv134}35 36define float @t2(float %x) {37; CHECK-LABEL: t2:38; CHECK: // %bb.0: // %entry39; CHECK-NEXT: ptrue p0.s40; CHECK-NEXT: // kill: def $s0 killed $s0 def $z041; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s42; CHECK-NEXT: scvtf z0.s, p0/m, z0.s43; CHECK-NEXT: // kill: def $s0 killed $s0 killed $z044; CHECK-NEXT: ret45;46; USE-NEON-NO-GPRS-LABEL: t2:47; USE-NEON-NO-GPRS: // %bb.0: // %entry48; USE-NEON-NO-GPRS-NEXT: fcvtzs s0, s049; USE-NEON-NO-GPRS-NEXT: scvtf s0, s050; USE-NEON-NO-GPRS-NEXT: ret51;52; NONEON-NOSVE-LABEL: t2:53; NONEON-NOSVE: // %bb.0: // %entry54; NONEON-NOSVE-NEXT: fcvtzs w8, s055; NONEON-NOSVE-NEXT: scvtf s0, w856; NONEON-NOSVE-NEXT: ret57entry:58 %conv = fptosi float %x to i3259 %conv1 = sitofp i32 %conv to float60 ret float %conv161}62 63define half @t3(half %x) {64; CHECK-LABEL: t3:65; CHECK: // %bb.0: // %entry66; CHECK-NEXT: ptrue p0.s67; CHECK-NEXT: // kill: def $h0 killed $h0 def $z068; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.h69; CHECK-NEXT: scvtf z0.h, p0/m, z0.s70; CHECK-NEXT: // kill: def $h0 killed $h0 killed $z071; CHECK-NEXT: ret72;73; USE-NEON-NO-GPRS-LABEL: t3:74; USE-NEON-NO-GPRS: // %bb.0: // %entry75; USE-NEON-NO-GPRS-NEXT: fcvtzs h0, h076; USE-NEON-NO-GPRS-NEXT: scvtf h0, h077; USE-NEON-NO-GPRS-NEXT: ret78;79; NONEON-NOSVE-LABEL: t3:80; NONEON-NOSVE: // %bb.0: // %entry81; NONEON-NOSVE-NEXT: fcvt s0, h082; NONEON-NOSVE-NEXT: fcvtzs w8, s083; NONEON-NOSVE-NEXT: scvtf s0, w884; NONEON-NOSVE-NEXT: fcvt h0, s085; NONEON-NOSVE-NEXT: ret86entry:87 %conv = fptosi half %x to i3288 %conv1 = sitofp i32 %conv to half89 ret half %conv190}91 92define double @t4(double %x) {93; CHECK-LABEL: t4:94; CHECK: // %bb.0: // %entry95; CHECK-NEXT: ptrue p0.d96; CHECK-NEXT: // kill: def $d0 killed $d0 def $z097; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.d98; CHECK-NEXT: ucvtf z0.d, p0/m, z0.d99; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0100; CHECK-NEXT: ret101;102; USE-NEON-NO-GPRS-LABEL: t4:103; USE-NEON-NO-GPRS: // %bb.0: // %entry104; USE-NEON-NO-GPRS-NEXT: fcvtzu d0, d0105; USE-NEON-NO-GPRS-NEXT: ucvtf d0, d0106; USE-NEON-NO-GPRS-NEXT: ret107;108; NONEON-NOSVE-LABEL: t4:109; NONEON-NOSVE: // %bb.0: // %entry110; NONEON-NOSVE-NEXT: fcvtzu x8, d0111; NONEON-NOSVE-NEXT: ucvtf d0, x8112; NONEON-NOSVE-NEXT: ret113entry:114 %conv = fptoui double %x to i64115 %conv1 = uitofp i64 %conv to double116 ret double %conv1117}118 119define float @t5(float %x) {120; CHECK-LABEL: t5:121; CHECK: // %bb.0: // %entry122; CHECK-NEXT: ptrue p0.s123; CHECK-NEXT: // kill: def $s0 killed $s0 def $z0124; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.s125; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s126; CHECK-NEXT: // kill: def $s0 killed $s0 killed $z0127; CHECK-NEXT: ret128;129; USE-NEON-NO-GPRS-LABEL: t5:130; USE-NEON-NO-GPRS: // %bb.0: // %entry131; USE-NEON-NO-GPRS-NEXT: fcvtzu s0, s0132; USE-NEON-NO-GPRS-NEXT: ucvtf s0, s0133; USE-NEON-NO-GPRS-NEXT: ret134;135; NONEON-NOSVE-LABEL: t5:136; NONEON-NOSVE: // %bb.0: // %entry137; NONEON-NOSVE-NEXT: fcvtzu w8, s0138; NONEON-NOSVE-NEXT: ucvtf s0, w8139; NONEON-NOSVE-NEXT: ret140entry:141 %conv = fptoui float %x to i32142 %conv1 = uitofp i32 %conv to float143 ret float %conv1144}145 146define half @t6(half %x) {147; CHECK-LABEL: t6:148; CHECK: // %bb.0: // %entry149; CHECK-NEXT: ptrue p0.s150; CHECK-NEXT: // kill: def $h0 killed $h0 def $z0151; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.h152; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s153; CHECK-NEXT: // kill: def $h0 killed $h0 killed $z0154; CHECK-NEXT: ret155;156; USE-NEON-NO-GPRS-LABEL: t6:157; USE-NEON-NO-GPRS: // %bb.0: // %entry158; USE-NEON-NO-GPRS-NEXT: fcvtzu h0, h0159; USE-NEON-NO-GPRS-NEXT: ucvtf h0, h0160; USE-NEON-NO-GPRS-NEXT: ret161;162; NONEON-NOSVE-LABEL: t6:163; NONEON-NOSVE: // %bb.0: // %entry164; NONEON-NOSVE-NEXT: fcvt s0, h0165; NONEON-NOSVE-NEXT: fcvtzu w8, s0166; NONEON-NOSVE-NEXT: ucvtf s0, w8167; NONEON-NOSVE-NEXT: fcvt h0, s0168; NONEON-NOSVE-NEXT: ret169entry:170 %conv = fptoui half %x to i32171 %conv1 = uitofp i32 %conv to half172 ret half %conv1173}174