Files
clang-p2996/llvm/test/CodeGen/PowerPC/aix-complex.ll
Kai Nacke 427fb35192 [PPC] Opaque pointer migration, part 1.
The LIT test cases were migrated with the script provided by
Nikita Popov. Due to the size of the change it is split into
several parts.

Reviewed By: nemanja, amyk, nikic, PowerPC

Differential Revision: https://reviews.llvm.org/D135470
2022-10-11 17:24:06 +00:00

126 lines
4.5 KiB
LLVM

; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff < %s | \
; RUN: FileCheck --check-prefixes=CHECK,32BIT %s
; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff < %s | \
; RUN: FileCheck --check-prefixes=CHECK,64BIT %s
@gcd = external global { double, double }, align 8
@gcf = external global { float, float }, align 4
@gcfp128 = external global { ppc_fp128, ppc_fp128 }, align 16
declare void @anchor(...)
define dso_local { double, double } @dblCmplxRetCallee() {
entry:
%retval = alloca { double, double }, align 8
%retval.realp = getelementptr inbounds { double, double }, ptr %retval, i32 0, i32 0
store double 1.000000e+00, ptr %retval.realp, align 8
%retval.imagp = getelementptr inbounds { double, double }, ptr %retval, i32 0, i32 1
store double 0.000000e+00, ptr %retval.imagp, align 8
%0 = load { double, double }, ptr %retval, align 8
ret { double, double } %0
}
; CHECK-LABEL: .dblCmplxRetCallee:
; CHECK-DAG: lfs 1,
; CHECK-DAG: lfs 2,
; CHECK: blr
define dso_local void @dblCmplxRetCaller() {
entry:
%call = call { double, double } @dblCmplxRetCallee()
%0 = extractvalue { double, double } %call, 0
%1 = extractvalue { double, double } %call, 1
store double %0, ptr getelementptr inbounds ({ double, double }, ptr @gcd, i32 0, i32 0), align 8
store double %1, ptr getelementptr inbounds ({ double, double }, ptr @gcd, i32 0, i32 1), align 8
call void @anchor()
ret void
}
; CHECK-LABEL: .dblCmplxRetCaller:
; CHECK: bl .dblCmplxRetCallee
; 32BIT-NEXT: lwz [[REG:[0-9]+]], L..C{{[0-9]+}}(2)
; 64BIT-NEXT: ld [[REG:[0-9]+]], L..C{{[0-9]+}}(2)
; CHECK-DAG: stfd 1, 0([[REG]])
; CHECK-DAG: stfd 2, 8([[REG]])
; CHECK-NEXT: bl .anchor
define dso_local { float, float } @fltCmplxRetCallee() {
entry:
%retval = alloca { float, float }, align 4
%retval.realp = getelementptr inbounds { float, float }, ptr %retval, i32 0, i32 0
%retval.imagp = getelementptr inbounds { float, float }, ptr %retval, i32 0, i32 1
store float 1.000000e+00, ptr %retval.realp, align 4
store float 0.000000e+00, ptr %retval.imagp, align 4
%0 = load { float, float }, ptr %retval, align 4
ret { float, float } %0
}
; CHECK-LABEL: .fltCmplxRetCallee:
; CHECK-DAG: lfs 1,
; CHECK-DAG: lfs 2,
; CHECK: blr
define dso_local void @fltCmplxRetCaller() {
entry:
%call = call { float, float } @fltCmplxRetCallee()
%0 = extractvalue { float, float } %call, 0
%1 = extractvalue { float, float } %call, 1
store float %0, ptr getelementptr inbounds ({ float, float }, ptr @gcf, i32 0, i32 0), align 4
store float %1, ptr getelementptr inbounds ({ float, float }, ptr @gcf, i32 0, i32 1), align 4
call void @anchor()
ret void
}
; CHECK-LABEL: .fltCmplxRetCaller:
; CHECK: bl .fltCmplxRetCallee
; 32BIT-NEXT: lwz [[REG:[0-9]+]], L..C{{[0-9]+}}(2)
; 64BIT-NEXT: ld [[REG:[0-9]+]], L..C{{[0-9]+}}(2)
; CHECK-DAG: stfs 1, 0([[REG]])
; CHECK-DAG: stfs 2, 4([[REG]])
; CHECK-NEXT: bl .anchor
define dso_local { ppc_fp128, ppc_fp128 } @fp128CmplxRetCallee() {
entry:
%retval = alloca { ppc_fp128, ppc_fp128 }, align 16
%retval.realp = getelementptr inbounds { ppc_fp128, ppc_fp128 }, ptr %retval, i32 0, i32 0
%retval.imagp = getelementptr inbounds { ppc_fp128, ppc_fp128 }, ptr %retval, i32 0, i32 1
store ppc_fp128 0xM7ffeffffffffffffffffffffffffffff, ptr %retval.realp, align 16
store ppc_fp128 0xM3ffefffffffffffffffffffffffffffe, ptr %retval.imagp, align 16
%0 = load { ppc_fp128, ppc_fp128 }, ptr %retval, align 16
ret { ppc_fp128, ppc_fp128 } %0
}
; CHECK-LABEL: .fp128CmplxRetCallee:
; CHECK-DAG: lfd 1,
; CHECK-DAG: lfd 2,
; CHECK-DAG: lfd 3,
; CHECK-DAG: lfd 4,
; CHECK: blr
define dso_local void @fp128CmplxRetCaller() {
entry:
%call = call { ppc_fp128, ppc_fp128 } @fp128CmplxRetCallee()
%0 = extractvalue { ppc_fp128, ppc_fp128 } %call, 0
%1 = extractvalue { ppc_fp128, ppc_fp128 } %call, 1
store ppc_fp128 %0, ptr getelementptr inbounds ({ ppc_fp128, ppc_fp128 }, ptr @gcfp128, i32 0, i32 0), align 16
store ppc_fp128 %1, ptr getelementptr inbounds ({ ppc_fp128, ppc_fp128 }, ptr @gcfp128, i32 0, i32 1), align 16
call void @anchor()
ret void
}
; CHECK-LABEL: .fp128CmplxRetCaller:
; CHECK: bl .fp128CmplxRetCallee
; 32BIT-NEXT: lwz [[REG:[0-9]+]], L..C{{[0-9]+}}(2)
; 64BIT-NEXT: ld [[REG:[0-9]+]], L..C{{[0-9]+}}(2)
; CHECK-DAG: stfd 1, 0([[REG]])
; CHECK-DAG: stfd 2, 8([[REG]])
; CHECK-DAG: stfd 3, 16([[REG]])
; CHECK-DAG: stfd 4, 24([[REG]])
; CHECK-NEXT: bl .anchor