123 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=aarch64 -mattr=-fp-armv8 -o - %s | FileCheck %s3 4define half @f2h(float %a) {5; CHECK-LABEL: f2h:6; CHECK: // %bb.0: // %entry7; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill8; CHECK-NEXT: .cfi_def_cfa_offset 169; CHECK-NEXT: .cfi_offset w30, -1610; CHECK-NEXT: bl __truncsfhf211; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload12; CHECK-NEXT: ret13entry:14 %0 = fptrunc float %a to half15 ret half %016}17 18define bfloat @f2bfloat(float %a) {19; CHECK-LABEL: f2bfloat:20; CHECK: // %bb.0: // %entry21; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill22; CHECK-NEXT: .cfi_def_cfa_offset 1623; CHECK-NEXT: .cfi_offset w30, -1624; CHECK-NEXT: bl __truncsfbf225; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload26; CHECK-NEXT: ret27entry:28 %0 = fptrunc float %a to bfloat29 ret bfloat %030}31 32define double @select_f64(double %a, double %b, i1 %c) {33; CHECK-LABEL: select_f64:34; CHECK: // %bb.0: // %entry35; CHECK-NEXT: tst w2, #0x136; CHECK-NEXT: csel x0, x0, x1, ne37; CHECK-NEXT: ret38entry:39 %0 = select i1 %c, double %a, double %b40 ret double %041}42 43define float @select_f32(float %a, float %b, i1 %c) {44; CHECK-LABEL: select_f32:45; CHECK: // %bb.0: // %entry46; CHECK-NEXT: tst w2, #0x147; CHECK-NEXT: csel w0, w0, w1, ne48; CHECK-NEXT: ret49entry:50 %0 = select i1 %c, float %a, float %b51 ret float %052}53 54define half @select_f16(half %a, half %b, i1 %c) {55; CHECK-LABEL: select_f16:56; CHECK: // %bb.0: // %entry57; CHECK-NEXT: tst w2, #0x158; CHECK-NEXT: csel w0, w0, w1, ne59; CHECK-NEXT: ret60entry:61 %0 = select i1 %c, half %a, half %b62 ret half %063}64 65define bfloat @select_bf16(bfloat %a, bfloat %b, i1 %c) {66; CHECK-LABEL: select_bf16:67; CHECK: // %bb.0: // %entry68; CHECK-NEXT: tst w2, #0x169; CHECK-NEXT: csel w0, w0, w1, ne70; CHECK-NEXT: ret71entry:72 %0 = select i1 %c, bfloat %a, bfloat %b73 ret bfloat %074}75 76define double @selectcc_f64(double %a, double %b, i32 %d) {77; CHECK-LABEL: selectcc_f64:78; CHECK: // %bb.0: // %entry79; CHECK-NEXT: cmp w2, #080; CHECK-NEXT: csel x0, x0, x1, mi81; CHECK-NEXT: ret82entry:83 %c = icmp slt i32 %d, 084 %0 = select i1 %c, double %a, double %b85 ret double %086}87 88define float @selectcc_f32(float %a, float %b, i32 %d) {89; CHECK-LABEL: selectcc_f32:90; CHECK: // %bb.0: // %entry91; CHECK-NEXT: cmp w2, #092; CHECK-NEXT: csel w0, w0, w1, mi93; CHECK-NEXT: ret94entry:95 %c = icmp slt i32 %d, 096 %0 = select i1 %c, float %a, float %b97 ret float %098}99 100define half @selectcc_f16(half %a, half %b, i32 %d) {101; CHECK-LABEL: selectcc_f16:102; CHECK: // %bb.0: // %entry103; CHECK-NEXT: cmp w2, #0104; CHECK-NEXT: csel w0, w0, w1, mi105; CHECK-NEXT: ret106entry:107 %c = icmp slt i32 %d, 0108 %0 = select i1 %c, half %a, half %b109 ret half %0110}111 112define bfloat @selectcc_bf16(bfloat %a, bfloat %b, i32 %d) {113; CHECK-LABEL: selectcc_bf16:114; CHECK: // %bb.0: // %entry115; CHECK-NEXT: cmp w2, #0116; CHECK-NEXT: csel w0, w0, w1, mi117; CHECK-NEXT: ret118entry:119 %c = icmp slt i32 %d, 0120 %0 = select i1 %c, bfloat %a, bfloat %b121 ret bfloat %0122}123