brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.3 KiB · 1207de7 Raw
355 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64 -o - %s  -mattr=+neon,+fullfp16 | FileCheck %s3 4define double @t1(double %x) {5; CHECK-LABEL: t1:6; CHECK:       // %bb.0: // %entry7; CHECK-NEXT:    fcvtzs d0, d08; CHECK-NEXT:    scvtf d0, d09; CHECK-NEXT:    ret10entry:11  %conv = fptosi double %x to i6412  %conv1 = sitofp i64 %conv to double13  ret double %conv114}15 16define float @t2(float %x) {17; CHECK-LABEL: t2:18; CHECK:       // %bb.0: // %entry19; CHECK-NEXT:    fcvtzs s0, s020; CHECK-NEXT:    scvtf s0, s021; CHECK-NEXT:    ret22entry:23  %conv = fptosi float %x to i3224  %conv1 = sitofp i32 %conv to float25  ret float %conv126}27 28define half @t3(half %x)  {29; CHECK-LABEL: t3:30; CHECK:       // %bb.0: // %entry31; CHECK-NEXT:    fcvtzs h0, h032; CHECK-NEXT:    scvtf h0, h033; CHECK-NEXT:    ret34entry:35  %conv = fptosi half %x to i3236  %conv1 = sitofp i32 %conv to half37  ret half %conv138}39 40define double @t4(double %x) {41; CHECK-LABEL: t4:42; CHECK:       // %bb.0: // %entry43; CHECK-NEXT:    fcvtzu d0, d044; CHECK-NEXT:    ucvtf d0, d045; CHECK-NEXT:    ret46entry:47  %conv = fptoui double %x to i6448  %conv1 = uitofp i64 %conv to double49  ret double %conv150}51 52define float @t5(float %x) {53; CHECK-LABEL: t5:54; CHECK:       // %bb.0: // %entry55; CHECK-NEXT:    fcvtzu s0, s056; CHECK-NEXT:    ucvtf s0, s057; CHECK-NEXT:    ret58entry:59  %conv = fptoui float %x to i3260  %conv1 = uitofp i32 %conv to float61  ret float %conv162}63 64define half @t6(half %x)  {65; CHECK-LABEL: t6:66; CHECK:       // %bb.0: // %entry67; CHECK-NEXT:    fcvtzu h0, h068; CHECK-NEXT:    ucvtf h0, h069; CHECK-NEXT:    ret70entry:71  %conv = fptoui half %x to i3272  %conv1 = uitofp i32 %conv to half73  ret half %conv174}75 76define bfloat @t7(bfloat %x)  {77; CHECK-LABEL: t7:78; CHECK:       // %bb.0: // %entry79; CHECK-NEXT:    // kill: def $h0 killed $h0 def $d080; CHECK-NEXT:    mov w8, #32767 // =0x7fff81; CHECK-NEXT:    shll v0.4s, v0.4h, #1682; CHECK-NEXT:    fcvtzs w9, s083; CHECK-NEXT:    scvtf d0, w984; CHECK-NEXT:    fcvtxn s0, d085; CHECK-NEXT:    fmov w9, s086; CHECK-NEXT:    ubfx w10, w9, #16, #187; CHECK-NEXT:    add w8, w9, w888; CHECK-NEXT:    add w8, w10, w889; CHECK-NEXT:    lsr w8, w8, #1690; CHECK-NEXT:    fmov s0, w891; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s092; CHECK-NEXT:    ret93entry:94  %conv = fptosi bfloat %x to i3295  %conv1 = sitofp i32 %conv to bfloat96  ret bfloat %conv197}98 99define bfloat @t8(bfloat %x)  {100; CHECK-LABEL: t8:101; CHECK:       // %bb.0: // %entry102; CHECK-NEXT:    // kill: def $h0 killed $h0 def $d0103; CHECK-NEXT:    mov w8, #32767 // =0x7fff104; CHECK-NEXT:    shll v0.4s, v0.4h, #16105; CHECK-NEXT:    fcvtzu w9, s0106; CHECK-NEXT:    ucvtf d0, w9107; CHECK-NEXT:    fcvtxn s0, d0108; CHECK-NEXT:    fmov w9, s0109; CHECK-NEXT:    ubfx w10, w9, #16, #1110; CHECK-NEXT:    add w8, w9, w8111; CHECK-NEXT:    add w8, w10, w8112; CHECK-NEXT:    lsr w8, w8, #16113; CHECK-NEXT:    fmov s0, w8114; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0115; CHECK-NEXT:    ret116entry:117  %conv = fptoui bfloat %x to i32118  %conv1 = uitofp i32 %conv to bfloat119  ret bfloat %conv1120}121 122define i64 @testu_f64_multiuse(double %x) {123; CHECK-LABEL: testu_f64_multiuse:124; CHECK:       // %bb.0: // %entry125; CHECK-NEXT:    fcvtzu x8, d0126; CHECK-NEXT:    ucvtf d1, x8127; CHECK-NEXT:    fcmp d0, d1128; CHECK-NEXT:    csel x0, x8, xzr, eq129; CHECK-NEXT:    ret130entry:131  %conv = fptoui double %x to i64132  %conv1 = uitofp i64 %conv to double133  %cmp = fcmp oeq double %x, %conv1134  %cond = select i1 %cmp, i64 %conv, i64 0135  ret i64 %cond136}137 138define i32 @testu_f32_multiuse(float %x) {139; CHECK-LABEL: testu_f32_multiuse:140; CHECK:       // %bb.0: // %entry141; CHECK-NEXT:    fcvtzu w8, s0142; CHECK-NEXT:    ucvtf s1, w8143; CHECK-NEXT:    fcmp s0, s1144; CHECK-NEXT:    csel w0, w8, wzr, eq145; CHECK-NEXT:    ret146entry:147  %conv = fptoui float %x to i32148  %conv1 = uitofp i32 %conv to float149  %cmp = fcmp oeq float %x, %conv1150  %cond = select i1 %cmp, i32 %conv, i32 0151  ret i32 %cond152}153 154define i32 @testu_f16_multiuse(half %x) {155; CHECK-LABEL: testu_f16_multiuse:156; CHECK:       // %bb.0: // %entry157; CHECK-NEXT:    fcvtzu w8, h0158; CHECK-NEXT:    ucvtf h1, w8159; CHECK-NEXT:    fcmp h0, h1160; CHECK-NEXT:    csel w0, w8, wzr, eq161; CHECK-NEXT:    ret162entry:163  %conv = fptoui half %x to i32164  %conv1 = uitofp i32 %conv to half165  %cmp = fcmp oeq half %x, %conv1166  %cond = select i1 %cmp, i32 %conv, i32 0167  ret i32 %cond168}169 170define i64 @tests_f64_multiuse(double %x) {171; CHECK-LABEL: tests_f64_multiuse:172; CHECK:       // %bb.0: // %entry173; CHECK-NEXT:    fcvtzs x8, d0174; CHECK-NEXT:    scvtf d1, x8175; CHECK-NEXT:    fcmp d0, d1176; CHECK-NEXT:    csel x0, x8, xzr, eq177; CHECK-NEXT:    ret178entry:179  %conv = fptosi double %x to i64180  %conv1 = sitofp i64 %conv to double181  %cmp = fcmp oeq double %x, %conv1182  %cond = select i1 %cmp, i64 %conv, i64 0183  ret i64 %cond184}185 186define i32 @tests_f32_multiuse(float %x) {187; CHECK-LABEL: tests_f32_multiuse:188; CHECK:       // %bb.0: // %entry189; CHECK-NEXT:    fcvtzs w8, s0190; CHECK-NEXT:    scvtf s1, w8191; CHECK-NEXT:    fcmp s0, s1192; CHECK-NEXT:    csel w0, w8, wzr, eq193; CHECK-NEXT:    ret194entry:195  %conv = fptosi float %x to i32196  %conv1 = sitofp i32 %conv to float197  %cmp = fcmp oeq float %x, %conv1198  %cond = select i1 %cmp, i32 %conv, i32 0199  ret i32 %cond200}201 202define i32 @tests_f16_multiuse(half %x) {203; CHECK-LABEL: tests_f16_multiuse:204; CHECK:       // %bb.0: // %entry205; CHECK-NEXT:    fcvtzs w8, h0206; CHECK-NEXT:    scvtf h1, w8207; CHECK-NEXT:    fcmp h0, h1208; CHECK-NEXT:    csel w0, w8, wzr, eq209; CHECK-NEXT:    ret210entry:211  %conv = fptosi half %x to i32212  %conv1 = sitofp i32 %conv to half213  %cmp = fcmp oeq half %x, %conv1214  %cond = select i1 %cmp, i32 %conv, i32 0215  ret i32 %cond216}217 218 219define double @t1_strict(double %x) #0 {220; CHECK-LABEL: t1_strict:221; CHECK:       // %bb.0: // %entry222; CHECK-NEXT:    fcvtzs d0, d0223; CHECK-NEXT:    scvtf d0, d0224; CHECK-NEXT:    ret225entry:226  %conv = call i64 @llvm.experimental.constrained.fptosi.i64.f64(double %x, metadata !"fpexcept.strict") #0227  %conv1 = call double @llvm.experimental.constrained.sitofp.f64.i64(i64 %conv, metadata !"round.tonearest", metadata !"fpexcept.strict") #0228  ret double %conv1229}230 231define float @t2_strict(float %x) #0 {232; CHECK-LABEL: t2_strict:233; CHECK:       // %bb.0: // %entry234; CHECK-NEXT:    fcvtzs s0, s0235; CHECK-NEXT:    scvtf s0, s0236; CHECK-NEXT:    ret237entry:238  %conv = call i32 @llvm.experimental.constrained.fptosi.i32.f32(float %x, metadata !"fpexcept.strict") #0239  %conv1 = call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %conv, metadata !"round.tonearest", metadata !"fpexcept.strict") #0240  ret float %conv1241}242 243define half @t3_strict(half %x) #0 {244; CHECK-LABEL: t3_strict:245; CHECK:       // %bb.0: // %entry246; CHECK-NEXT:    fcvtzs h0, h0247; CHECK-NEXT:    scvtf h0, h0248; CHECK-NEXT:    ret249entry:250  %conv = call i32 @llvm.experimental.constrained.fptosi.i32.f16(half %x, metadata !"fpexcept.strict") #0251  %conv1 = call half @llvm.experimental.constrained.sitofp.f16.i32(i32 %conv, metadata !"round.tonearest", metadata !"fpexcept.strict") #0252  ret half %conv1253}254 255define double @t4_strict(double %x) #0 {256; CHECK-LABEL: t4_strict:257; CHECK:       // %bb.0: // %entry258; CHECK-NEXT:    fcvtzu d0, d0259; CHECK-NEXT:    ucvtf d0, d0260; CHECK-NEXT:    ret261entry:262  %conv = call i64 @llvm.experimental.constrained.fptoui.i64.f64(double %x, metadata !"fpexcept.strict") #0263  %conv1 = call double @llvm.experimental.constrained.uitofp.f64.i64(i64 %conv, metadata !"round.tonearest", metadata !"fpexcept.strict") #0264  ret double %conv1265}266 267define float @t5_strict(float %x) #0 {268; CHECK-LABEL: t5_strict:269; CHECK:       // %bb.0: // %entry270; CHECK-NEXT:    fcvtzu s0, s0271; CHECK-NEXT:    ucvtf s0, s0272; CHECK-NEXT:    ret273entry:274  %conv = call i32 @llvm.experimental.constrained.fptoui.i32.f32(float %x, metadata !"fpexcept.strict") #0275  %conv1 = call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %conv, metadata !"round.tonearest", metadata !"fpexcept.strict") #0276  ret float %conv1277}278 279define half @t6_strict(half %x) #0 {280; CHECK-LABEL: t6_strict:281; CHECK:       // %bb.0: // %entry282; CHECK-NEXT:    fcvtzu h0, h0283; CHECK-NEXT:    ucvtf h0, h0284; CHECK-NEXT:    ret285entry:286  %conv = call i32 @llvm.experimental.constrained.fptoui.i32.f16(half %x, metadata !"fpexcept.strict") #0287  %conv1 = call half @llvm.experimental.constrained.uitofp.f16.i32(i32 %conv, metadata !"round.tonearest", metadata !"fpexcept.strict") #0288  ret half %conv1289}290 291define bfloat @t7_strict(bfloat %x) #0 {292; CHECK-LABEL: t7_strict:293; CHECK:       // %bb.0: // %entry294; CHECK-NEXT:    // kill: def $h0 killed $h0 def $d0295; CHECK-NEXT:    mov w8, #32767 // =0x7fff296; CHECK-NEXT:    shll v0.4s, v0.4h, #16297; CHECK-NEXT:    fcvtzs w9, s0298; CHECK-NEXT:    scvtf d0, w9299; CHECK-NEXT:    fcvtxn s0, d0300; CHECK-NEXT:    fmov w9, s0301; CHECK-NEXT:    ubfx w10, w9, #16, #1302; CHECK-NEXT:    add w8, w9, w8303; CHECK-NEXT:    add w8, w10, w8304; CHECK-NEXT:    lsr w8, w8, #16305; CHECK-NEXT:    fmov s0, w8306; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0307; CHECK-NEXT:    ret308entry:309  %conv = call i32 @llvm.experimental.constrained.fptosi.i32.bf16(bfloat %x, metadata !"fpexcept.strict") #0310  %conv1 = call bfloat @llvm.experimental.constrained.sitofp.bf16.i32(i32 %conv, metadata !"round.tonearest", metadata !"fpexcept.strict") #0311  ret bfloat %conv1312}313 314define bfloat @t8_strict(bfloat %x) #0 {315; CHECK-LABEL: t8_strict:316; CHECK:       // %bb.0: // %entry317; CHECK-NEXT:    // kill: def $h0 killed $h0 def $d0318; CHECK-NEXT:    mov w8, #32767 // =0x7fff319; CHECK-NEXT:    shll v0.4s, v0.4h, #16320; CHECK-NEXT:    fcvtzu w9, s0321; CHECK-NEXT:    ucvtf d0, w9322; CHECK-NEXT:    fcvtxn s0, d0323; CHECK-NEXT:    fmov w9, s0324; CHECK-NEXT:    ubfx w10, w9, #16, #1325; CHECK-NEXT:    add w8, w9, w8326; CHECK-NEXT:    add w8, w10, w8327; CHECK-NEXT:    lsr w8, w8, #16328; CHECK-NEXT:    fmov s0, w8329; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0330; CHECK-NEXT:    ret331entry:332  %conv = call i32 @llvm.experimental.constrained.fptoui.i32.bf16(bfloat %x, metadata !"fpexcept.strict") #0333  %conv1 = call bfloat @llvm.experimental.constrained.uitofp.bf16.i32(i32 %conv, metadata !"round.tonearest", metadata !"fpexcept.strict") #0334  ret bfloat %conv1335}336 337attributes #0 = { strictfp }338 339declare i32 @llvm.experimental.constrained.fptosi.i32.bf16(bfloat, metadata)340declare i32 @llvm.experimental.constrained.fptoui.i32.bf16(bfloat, metadata)341declare i32 @llvm.experimental.constrained.fptosi.i32.f16(half, metadata)342declare i32 @llvm.experimental.constrained.fptoui.i32.f16(half, metadata)343declare i32 @llvm.experimental.constrained.fptosi.i32.f32(float, metadata)344declare i32 @llvm.experimental.constrained.fptoui.i32.f32(float, metadata)345declare i64 @llvm.experimental.constrained.fptosi.i64.f64(double, metadata)346declare i64 @llvm.experimental.constrained.fptoui.i64.f64(double, metadata)347declare bfloat @llvm.experimental.constrained.sitofp.bf16.i32(i32, metadata, metadata)348declare bfloat @llvm.experimental.constrained.uitofp.bf16.i32(i32, metadata, metadata)349declare half @llvm.experimental.constrained.sitofp.f16.i32(i32, metadata, metadata)350declare half @llvm.experimental.constrained.uitofp.f16.i32(i32, metadata, metadata)351declare float @llvm.experimental.constrained.sitofp.f32.i32(i32, metadata, metadata)352declare float @llvm.experimental.constrained.uitofp.f32.i32(i32, metadata, metadata)353declare double @llvm.experimental.constrained.sitofp.f64.i64(i64, metadata, metadata)354declare double @llvm.experimental.constrained.uitofp.f64.i64(i64, metadata, metadata)355