blob: 637e8548c7e6ea85c134f06aec0f449da9c929ea [file] [edit]
; 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" }