; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -enable-ppc-gen-scalar-mass -O3 -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck --check-prefix=CHECK-LNX %s
; RUN: llc -enable-ppc-gen-scalar-mass -O3 -mtriple=powerpc-ibm-aix-xcoff < %s | FileCheck --check-prefix=CHECK-AIX %s
define void @cos_f64(ptr %arg) {
; CHECK-LNX-LABEL: cos_f64:
; CHECK-LNX: # %bb.0: # %bb
; CHECK-LNX-NEXT: mflr 0
; CHECK-LNX-NEXT: .cfi_def_cfa_offset 48
; CHECK-LNX-NEXT: .cfi_offset lr, 16
; CHECK-LNX-NEXT: .cfi_offset f31, -8
; CHECK-LNX-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
; CHECK-LNX-NEXT: stdu 1, -48(1)
; CHECK-LNX-NEXT: addis 3, 2, .LCPI0_0@toc@ha
; CHECK-LNX-NEXT: std 0, 64(1)
; CHECK-LNX-NEXT: xssqrtdp 31, 0
; CHECK-LNX-NEXT: lfs 1, .LCPI0_0@toc@l(3)
; CHECK-LNX-NEXT: bl __xl_cos
; CHECK-LNX-NEXT: nop
; CHECK-LNX-NEXT: xsmuldp 0, 31, 1
; CHECK-LNX-NEXT: .p2align 4
; CHECK-LNX-NEXT: .LBB0_1: # %bb2
; CHECK-LNX-NEXT: #
; CHECK-LNX-NEXT: stfd 0, 0(3)
; CHECK-LNX-NEXT: b .LBB0_1
;
; CHECK-AIX-LABEL: cos_f64:
; CHECK-AIX: # %bb.0: # %bb
; CHECK-AIX-NEXT: mflr 0
; CHECK-AIX-NEXT: stwu 1, -64(1)
; CHECK-AIX-NEXT: stw 0, 72(1)
; CHECK-AIX-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
; CHECK-AIX-NEXT: bl .sqrt[PR]
; CHECK-AIX-NEXT: nop
; CHECK-AIX-NEXT: lwz 3, L..C0(2) # %const.0
; CHECK-AIX-NEXT: fmr 31, 1
; CHECK-AIX-NEXT: lfs 0, 0(3)
; CHECK-AIX-NEXT: fmr 1, 0
; CHECK-AIX-NEXT: bl .__xl_cos[PR]
; CHECK-AIX-NEXT: nop
; CHECK-AIX-NEXT: fmul 0, 31, 1
; CHECK-AIX-NEXT: L..BB0_1: # %bb2
; CHECK-AIX-NEXT: #
; CHECK-AIX-NEXT: stfd 0, 0(3)
; CHECK-AIX-NEXT: b L..BB0_1
bb:
%i1 = getelementptr i8, ptr %arg, i64 undef
br label %bb2
bb2:
%i3 = getelementptr inbounds i8, ptr %i1, i64 undef
store double undef, ptr %i3, align 8
%i7 = tail call afn double @llvm.sqrt.f64(double undef)
%i8 = fmul afn double undef, 0x401921FB54442D28
%i9 = tail call afn double @llvm.cos.f64(double %i8) #2
%i10 = fmul afn double %i7, %i9
store double %i10, ptr %i1, align 8
br label %bb2
}
define void @log_f64(ptr %arg) {
; CHECK-LNX-LABEL: log_f64:
; CHECK-LNX: # %bb.0: # %bb
; CHECK-LNX-NEXT: mflr 0
; CHECK-LNX-NEXT: .cfi_def_cfa_offset 48
; CHECK-LNX-NEXT: .cfi_offset lr, 16
; CHECK-LNX-NEXT: .cfi_offset f31, -8
; CHECK-LNX-NEXT: stfd 31, -8(1) # 8-byte Folded Spill
; CHECK-LNX-NEXT: stdu 1, -48(1)
; CHECK-LNX-NEXT: addis 3, 2, .LCPI1_0@toc@ha
; CHECK-LNX-NEXT: std 0, 64(1)
; CHECK-LNX-NEXT: xssqrtdp 31, 0
; CHECK-LNX-NEXT: lfs 1, .LCPI1_0@toc@l(3)
; CHECK-LNX-NEXT: bl __xl_log
; CHECK-LNX-NEXT: nop
; CHECK-LNX-NEXT: xsmuldp 0, 31, 1
; CHECK-LNX-NEXT: .p2align 4
; CHECK-LNX-NEXT: .LBB1_1: # %bb2
; CHECK-LNX-NEXT: #
; CHECK-LNX-NEXT: stfd 0, 0(3)
; CHECK-LNX-NEXT: b .LBB1_1
;
; CHECK-AIX-LABEL: log_f64:
; CHECK-AIX: # %bb.0: # %bb
; CHECK-AIX-NEXT: mflr 0
; CHECK-AIX-NEXT: stwu 1, -64(1)
; CHECK-AIX-NEXT: stw 0, 72(1)
; CHECK-AIX-NEXT: stfd 31, 56(1) # 8-byte Folded Spill
; CHECK-AIX-NEXT: bl .sqrt[PR]
; CHECK-AIX-NEXT: nop
; CHECK-AIX-NEXT: lwz 3, L..C1(2) # %const.0
; CHECK-AIX-NEXT: fmr 31, 1
; CHECK-AIX-NEXT: lfs 0, 0(3)
; CHECK-AIX-NEXT: fmr 1, 0
; CHECK-AIX-NEXT: bl .__xl_log[PR]
; CHECK-AIX-NEXT: nop
; CHECK-AIX-NEXT: fmul 0, 31, 1
; CHECK-AIX-NEXT: L..BB1_1: # %bb2
; CHECK-AIX-NEXT: #
; CHECK-AIX-NEXT: stfd 0, 0(3)
; CHECK-AIX-NEXT: b L..BB1_1
bb:
%i1 = getelementptr i8, ptr %arg, i64 undef
br label %bb2
bb2:
%i3 = getelementptr inbounds i8, ptr %i1, i64 undef
store double undef, ptr %i3, align 8
%i7 = tail call afn double @llvm.sqrt.f64(double undef)
%i8 = fmul afn double undef, 0x401921FB54442D28
%i9 = tail call afn double @llvm.log.f64(double %i8) #2
%i10 = fmul afn double %i7, %i9
store double %i10, ptr %i1, align 8
br label %bb2
}
declare double @llvm.sqrt.f64(double)
declare double @llvm.cos.f64(double)
declare double @llvm.log.f64(double)