| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 |
| ; RUN: llc -mtriple=s390x < %s | FileCheck %s |
| |
| ; Check that the argument for powi is passed sign extended, rather than zero-extended. |
| ; And intrinsics that expect an unsigned argument do zero-extend it. |
| |
| declare double @llvm.powi.f64.i32(double, i32) |
| |
| define double @powi_f64(double %a, i32 %b) nounwind #0 { |
| ; CHECK-LABEL: powi_f64: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: stmg %r14, %r15, 112(%r15) |
| ; CHECK-NEXT: aghi %r15, -160 |
| ; CHECK-NEXT: lgfr %r3, %r3 |
| ; CHECK-NEXT: brasl %r14, __powidf2@PLT |
| ; CHECK-NEXT: lmg %r14, %r15, 272(%r15) |
| ; CHECK-NEXT: br %r14 |
| %1 = call double @llvm.powi.f64.i32(double %a, i32 %b) |
| ret double %1 |
| } |
| |
| define double @uitofp64(i32 %arg) nounwind #0 { |
| ; CHECK-LABEL: uitofp64: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: stmg %r14, %r15, 112(%r15) |
| ; CHECK-NEXT: aghi %r15, -160 |
| ; CHECK-NEXT: llgfr %r2, %r2 |
| ; CHECK-NEXT: brasl %r14, __floatunsidf@PLT |
| ; CHECK-NEXT: lmg %r14, %r15, 272(%r15) |
| ; CHECK-NEXT: br %r14 |
| %1 = uitofp i32 %arg to double |
| ret double %1 |
| } |
| |
| define double @sitofp64(i32 %arg) nounwind #0 { |
| ; CHECK-LABEL: sitofp64: |
| ; CHECK: # %bb.0: |
| ; CHECK-NEXT: stmg %r14, %r15, 112(%r15) |
| ; CHECK-NEXT: aghi %r15, -160 |
| ; CHECK-NEXT: lgfr %r2, %r2 |
| ; CHECK-NEXT: brasl %r14, __floatsidf@PLT |
| ; CHECK-NEXT: lmg %r14, %r15, 272(%r15) |
| ; CHECK-NEXT: br %r14 |
| %1 = sitofp i32 %arg to double |
| ret double %1 |
| } |
| |
| attributes #0 = { "use-soft-float"="true" } |