162 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z16 -verify-machineinstrs \3; RUN: | FileCheck %s4;5; Some tests with comparisons and their uses involving 16-bit floating point.6 7; fcmp half; select half8define half @fun0(half %Arg0, half %Arg1) {9; CHECK-LABEL: fun0:10; CHECK: # %bb.0: # %entry11; CHECK-NEXT: stmg %r14, %r15, 112(%r15)12; CHECK-NEXT: .cfi_offset %r14, -4813; CHECK-NEXT: .cfi_offset %r15, -4014; CHECK-NEXT: aghi %r15, -17615; CHECK-NEXT: .cfi_def_cfa_offset 33616; CHECK-NEXT: std %f8, 168(%r15) # 8-byte Spill17; CHECK-NEXT: std %f9, 160(%r15) # 8-byte Spill18; CHECK-NEXT: .cfi_offset %f8, -16819; CHECK-NEXT: .cfi_offset %f9, -17620; CHECK-NEXT: ldr %f8, %f221; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT22; CHECK-NEXT: ldr %f9, %f023; CHECK-NEXT: ldr %f0, %f824; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT25; CHECK-NEXT: ltebr %f1, %f926; CHECK-NEXT: # kill: def $f0s killed $f0s def $v027; CHECK-NEXT: jl .LBB0_228; CHECK-NEXT: # %bb.1: # %entry29; CHECK-NEXT: vgmf %v0, 2, 830; CHECK-NEXT: .LBB0_2: # %entry31; CHECK-NEXT: # kill: def $f0s killed $f0s killed $v032; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT33; CHECK-NEXT: ld %f8, 168(%r15) # 8-byte Reload34; CHECK-NEXT: ld %f9, 160(%r15) # 8-byte Reload35; CHECK-NEXT: lmg %r14, %r15, 288(%r15)36; CHECK-NEXT: br %r1437entry:38 %cmp = fcmp olt half %Arg0, 0xH000039 %cond = select i1 %cmp, half %Arg1, half 1.040 ret half %cond41}42 43; fcmp half; select i3244define i32 @fun1(half %Arg0, i32 %Arg1) {45; CHECK-LABEL: fun1:46; CHECK: # %bb.0: # %entry47; CHECK-NEXT: stmg %r13, %r15, 104(%r15)48; CHECK-NEXT: .cfi_offset %r13, -5649; CHECK-NEXT: .cfi_offset %r14, -4850; CHECK-NEXT: .cfi_offset %r15, -4051; CHECK-NEXT: aghi %r15, -16052; CHECK-NEXT: .cfi_def_cfa_offset 32053; CHECK-NEXT: lr %r13, %r254; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT55; CHECK-NEXT: ltebr %f0, %f056; CHECK-NEXT: lochinl %r13, 057; CHECK-NEXT: lr %r2, %r1358; CHECK-NEXT: lmg %r13, %r15, 264(%r15)59; CHECK-NEXT: br %r1460entry:61 %cmp = fcmp olt half %Arg0, 0xH000062 %cond = select i1 %cmp, i32 %Arg1, i32 063 ret i32 %cond64}65 66; icmp i32; select half67define half @fun2(i32 %Arg0, half %Arg1) {68; CHECK-LABEL: fun2:69; CHECK: # %bb.0: # %entry70; CHECK-NEXT: stmg %r13, %r15, 104(%r15)71; CHECK-NEXT: .cfi_offset %r13, -5672; CHECK-NEXT: .cfi_offset %r14, -4873; CHECK-NEXT: .cfi_offset %r15, -4074; CHECK-NEXT: aghi %r15, -16075; CHECK-NEXT: .cfi_def_cfa_offset 32076; CHECK-NEXT: lr %r13, %r277; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT78; CHECK-NEXT: # kill: def $f0s killed $f0s def $v079; CHECK-NEXT: cije %r13, 0, .LBB2_280; CHECK-NEXT: # %bb.1: # %entry81; CHECK-NEXT: vgmf %v0, 2, 882; CHECK-NEXT: .LBB2_2: # %entry83; CHECK-NEXT: # kill: def $f0s killed $f0s killed $v084; CHECK-NEXT: brasl %r14, __truncsfhf2@PLT85; CHECK-NEXT: lmg %r13, %r15, 264(%r15)86; CHECK-NEXT: br %r1487entry:88 %cmp = icmp eq i32 %Arg0, 089 %cond = select i1 %cmp, half %Arg1, half 1.090 ret half %cond91}92 93define i64 @fun3(i64 %a, i64 %b, half %f1, half %f2) #0 {94; CHECK-LABEL: fun3:95; CHECK: # %bb.0:96; CHECK-NEXT: stmg %r12, %r15, 96(%r15)97; CHECK-NEXT: .cfi_offset %r12, -6498; CHECK-NEXT: .cfi_offset %r13, -5699; CHECK-NEXT: .cfi_offset %r14, -48100; CHECK-NEXT: .cfi_offset %r15, -40101; CHECK-NEXT: aghi %r15, -176102; CHECK-NEXT: .cfi_def_cfa_offset 336103; CHECK-NEXT: std %f8, 168(%r15) # 8-byte Spill104; CHECK-NEXT: std %f9, 160(%r15) # 8-byte Spill105; CHECK-NEXT: .cfi_offset %f8, -168106; CHECK-NEXT: .cfi_offset %f9, -176107; CHECK-NEXT: ldr %f8, %f0108; CHECK-NEXT: ldr %f0, %f2109; CHECK-NEXT: lgr %r13, %r3110; CHECK-NEXT: lgr %r12, %r2111; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT112; CHECK-NEXT: ldr %f9, %f0113; CHECK-NEXT: ldr %f0, %f8114; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT115; CHECK-NEXT: cebr %f0, %f9116; CHECK-NEXT: ld %f8, 168(%r15) # 8-byte Reload117; CHECK-NEXT: ld %f9, 160(%r15) # 8-byte Reload118; CHECK-NEXT: selgre %r2, %r12, %r13119; CHECK-NEXT: lmg %r12, %r15, 272(%r15)120; CHECK-NEXT: br %r14121 %cond = call i1 @llvm.experimental.constrained.fcmp.f32(122 half %f1, half %f2,123 metadata !"oeq",124 metadata !"fpexcept.strict") #0125 %res = select i1 %cond, i64 %a, i64 %b126 ret i64 %res127}128 129define half @fun4(half %Arg0, ptr %Dst) {130; CHECK-LABEL: fun4:131; CHECK: # %bb.0: # %entry132; CHECK-NEXT: stmg %r13, %r15, 104(%r15)133; CHECK-NEXT: .cfi_offset %r13, -56134; CHECK-NEXT: .cfi_offset %r14, -48135; CHECK-NEXT: .cfi_offset %r15, -40136; CHECK-NEXT: aghi %r15, -160137; CHECK-NEXT: .cfi_def_cfa_offset 320138; CHECK-NEXT: lgr %r13, %r2139; CHECK-NEXT: brasl %r14, __extendhfsf2@PLT140; CHECK-NEXT: ltebr %f0, %f0141; CHECK-NEXT: je .LBB4_2142; CHECK-NEXT: # %bb.1: # %store143; CHECK-NEXT: lzer %f0144; CHECK-NEXT: vsteh %v0, 0(%r13), 0145; CHECK-NEXT: .LBB4_2: # %exit146; CHECK-NEXT: lzer %f0147; CHECK-NEXT: lmg %r13, %r15, 264(%r15)148; CHECK-NEXT: br %r14149entry:150 %cmp = fcmp oeq half %Arg0, 0.0151 br i1 %cmp, label %exit, label %store152 153store:154 store half 0.0, ptr %Dst155 br label %exit156 157exit:158 ret half 0.0159}160 161declare i1 @llvm.experimental.constrained.fcmp.f32(half, half, metadata, metadata)162