120 lines
4.0 KiB
LLVM
120 lines
4.0 KiB
LLVM
; 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)
|