mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 11:02:59 +02:00
351fbaf236
To do this: 1. Change GlobalAddress SDNode to TargetGlobalAddress to avoid legalizer split the symbol. 2. Change ExternalSymbol SDNode to TargetExternalSymbol to avoid legalizer split the symbol. 3. Let PseudoCALL match direct call with target operand TargetGlobalAddress and TargetExternalSymbol. Differential Revision: https://reviews.llvm.org/D44885 llvm-svn: 330827
46 lines
1.4 KiB
LLVM
46 lines
1.4 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs < %s \
|
|
; RUN: | FileCheck -check-prefix=RV32IFD %s
|
|
|
|
define double @func(double %d, i32 %n) nounwind {
|
|
; RV32IFD-LABEL: func:
|
|
; RV32IFD: # %bb.0: # %entry
|
|
; RV32IFD-NEXT: addi sp, sp, -32
|
|
; RV32IFD-NEXT: sw ra, 28(sp)
|
|
; RV32IFD-NEXT: sw a0, 16(sp)
|
|
; RV32IFD-NEXT: sw a1, 20(sp)
|
|
; RV32IFD-NEXT: fld ft0, 16(sp)
|
|
; RV32IFD-NEXT: beqz a2, .LBB0_2
|
|
; RV32IFD-NEXT: # %bb.1: # %if.else
|
|
; RV32IFD-NEXT: addi a2, a2, -1
|
|
; RV32IFD-NEXT: fsd ft0, 16(sp)
|
|
; RV32IFD-NEXT: lw a0, 16(sp)
|
|
; RV32IFD-NEXT: lw a1, 20(sp)
|
|
; RV32IFD-NEXT: fsd ft0, 8(sp)
|
|
; RV32IFD-NEXT: call func
|
|
; RV32IFD-NEXT: sw a0, 16(sp)
|
|
; RV32IFD-NEXT: sw a1, 20(sp)
|
|
; RV32IFD-NEXT: fld ft0, 16(sp)
|
|
; RV32IFD-NEXT: fld ft1, 8(sp)
|
|
; RV32IFD-NEXT: fadd.d ft0, ft0, ft1
|
|
; RV32IFD-NEXT: .LBB0_2: # %return
|
|
; RV32IFD-NEXT: fsd ft0, 16(sp)
|
|
; RV32IFD-NEXT: lw a0, 16(sp)
|
|
; RV32IFD-NEXT: lw a1, 20(sp)
|
|
; RV32IFD-NEXT: lw ra, 28(sp)
|
|
; RV32IFD-NEXT: addi sp, sp, 32
|
|
; RV32IFD-NEXT: ret
|
|
entry:
|
|
%cmp = icmp eq i32 %n, 0
|
|
br i1 %cmp, label %return, label %if.else
|
|
|
|
if.else:
|
|
%sub = add i32 %n, -1
|
|
%call = tail call double @func(double %d, i32 %sub)
|
|
%add = fadd double %call, %d
|
|
ret double %add
|
|
|
|
return:
|
|
ret double %d
|
|
}
|