Files
clang-p2996/llvm/test/CodeGen/SystemZ/fp-conv-01.ll
Kai Nacke a1710eb3cd [SystemZ][NFC] Opaque pointer migration.
The LIT test cases were migrated with the script provided by
Nikita Popov.

No manual changes were made. Committed without review since
no functional changes, after consultation with uweigand.
2022-10-11 21:09:43 +00:00

68 lines
1.7 KiB
LLVM

; Test floating-point truncations.
;
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 \
; RUN: | FileCheck -check-prefix=CHECK -check-prefix=CHECK-SCALAR %s
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 \
; RUN: | FileCheck -check-prefix=CHECK -check-prefix=CHECK-VECTOR %s
; Test f64->f32.
define float @f1(double %d1, double %d2) {
; CHECK-LABEL: f1:
; CHECK-SCALAR: ledbr %f0, %f2
; CHECK-VECTOR: ledbra %f0, 0, %f2, 0
; CHECK: br %r14
%res = fptrunc double %d2 to float
ret float %res
}
; Test f128->f32.
define float @f2(ptr %ptr) {
; CHECK-LABEL: f2:
; CHECK: lexbr %f0, %f0
; CHECK: br %r14
%val = load fp128, ptr %ptr
%res = fptrunc fp128 %val to float
ret float %res
}
; Make sure that we don't use %f0 as the destination of LEXBR when %f2
; is still live.
define void @f3(ptr %dst, ptr %ptr, float %d1, float %d2) {
; CHECK-LABEL: f3:
; CHECK: lexbr %f1, %f1
; CHECK: aebr %f1, %f2
; CHECK: ste %f1, 0(%r2)
; CHECK: br %r14
%val = load fp128, ptr %ptr
%conv = fptrunc fp128 %val to float
%res = fadd float %conv, %d2
store float %res, ptr %dst
ret void
}
; Test f128->f64.
define double @f4(ptr %ptr) {
; CHECK-LABEL: f4:
; CHECK: ldxbr %f0, %f0
; CHECK: br %r14
%val = load fp128, ptr %ptr
%res = fptrunc fp128 %val to double
ret double %res
}
; Like f3, but for f128->f64.
define void @f5(ptr %dst, ptr %ptr, double %d1, double %d2) {
; CHECK-LABEL: f5:
; CHECK: ldxbr %f1, %f1
; CHECK-SCALAR: adbr %f1, %f2
; CHECK-SCALAR: std %f1, 0(%r2)
; CHECK-VECTOR: wfadb [[REG:%f[0-9]+]], %f1, %f2
; CHECK-VECTOR: std [[REG]], 0(%r2)
; CHECK: br %r14
%val = load fp128, ptr %ptr
%conv = fptrunc fp128 %val to double
%res = fadd double %conv, %d2
store double %res, ptr %dst
ret void
}