| ; 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" } |