767 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			767 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			LLVM
		
	
	
	
| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 | |
| 
 | |
| ; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv2_sf -mattr=+fpuv2_df | FileCheck %s --check-prefix=CHECK-DF
 | |
| ; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv3_sf -mattr=+fpuv3_df | FileCheck %s --check-prefix=CHECK-DF2
 | |
| 
 | |
| 
 | |
| ;ueq
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_ueq(double %x, double %y) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_ueq:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmpuod vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    fcmpned vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvcv16 a1
 | |
| ; CHECK-DF-NEXT:    or16 a0, a1
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_ueq:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmpuo.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    fcmpne.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvcv16 a1
 | |
| ; CHECK-DF2-NEXT:    or16 a0, a1
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp ueq double %y, %x
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_I_ueq(double %x) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_I_ueq:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    grs32 a0, .LCPI1_0
 | |
| ; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
 | |
| ; CHECK-DF-NEXT:    fcmpuod vr0, vr1
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    fcmpned vr0, vr1
 | |
| ; CHECK-DF-NEXT:    mvcv16 a1
 | |
| ; CHECK-DF-NEXT:    or16 a0, a1
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ; CHECK-DF-NEXT:    .p2align 1
 | |
| ; CHECK-DF-NEXT:  # %bb.1:
 | |
| ; CHECK-DF-NEXT:    .p2align 2
 | |
| ; CHECK-DF-NEXT:  .LCPI1_0:
 | |
| ; CHECK-DF-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_I_ueq:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI1_0]
 | |
| ; CHECK-DF2-NEXT:    fcmpuo.64 vr0, vr1
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    fcmpne.64 vr0, vr1
 | |
| ; CHECK-DF2-NEXT:    mvcv16 a1
 | |
| ; CHECK-DF2-NEXT:    or16 a0, a1
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| ; CHECK-DF2-NEXT:    .p2align 1
 | |
| ; CHECK-DF2-NEXT:  # %bb.1:
 | |
| ; CHECK-DF2-NEXT:    .p2align 2
 | |
| ; CHECK-DF2-NEXT:  .LCPI1_0:
 | |
| ; CHECK-DF2-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| entry:
 | |
|   %fcmp = fcmp ueq double %x, 0.0
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| ;une
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_une(double %x, double %y) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_une:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmpned vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_une:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmpne.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp une double %y, %x
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_I_une(double %x) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_I_une:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    grs32 a0, .LCPI3_0
 | |
| ; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
 | |
| ; CHECK-DF-NEXT:    fcmpned vr0, vr1
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ; CHECK-DF-NEXT:    .p2align 1
 | |
| ; CHECK-DF-NEXT:  # %bb.1:
 | |
| ; CHECK-DF-NEXT:    .p2align 2
 | |
| ; CHECK-DF-NEXT:  .LCPI3_0:
 | |
| ; CHECK-DF-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_I_une:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI3_0]
 | |
| ; CHECK-DF2-NEXT:    fcmpne.64 vr0, vr1
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| ; CHECK-DF2-NEXT:    .p2align 1
 | |
| ; CHECK-DF2-NEXT:  # %bb.1:
 | |
| ; CHECK-DF2-NEXT:    .p2align 2
 | |
| ; CHECK-DF2-NEXT:  .LCPI3_0:
 | |
| ; CHECK-DF2-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| entry:
 | |
|   %fcmp = fcmp une double %x, 0.0
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| ;ugt
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_ugt(double %x, double %y) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_ugt:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmphsd vr0, vr1
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_ugt:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmphs.64 vr0, vr1
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp ugt double %y, %x
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_I_ugt(double %x) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_I_ugt:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    grs32 a0, .LCPI5_0
 | |
| ; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
 | |
| ; CHECK-DF-NEXT:    fcmphsd vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ; CHECK-DF-NEXT:    .p2align 1
 | |
| ; CHECK-DF-NEXT:  # %bb.1:
 | |
| ; CHECK-DF-NEXT:    .p2align 2
 | |
| ; CHECK-DF-NEXT:  .LCPI5_0:
 | |
| ; CHECK-DF-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_I_ugt:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI5_0]
 | |
| ; CHECK-DF2-NEXT:    fcmphs.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| ; CHECK-DF2-NEXT:    .p2align 1
 | |
| ; CHECK-DF2-NEXT:  # %bb.1:
 | |
| ; CHECK-DF2-NEXT:    .p2align 2
 | |
| ; CHECK-DF2-NEXT:  .LCPI5_0:
 | |
| ; CHECK-DF2-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| entry:
 | |
|   %fcmp = fcmp ugt double %x, 0.0
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| 
 | |
| ;uge
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_uge(double %x, double %y) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_uge:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmpltd vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_uge:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmplt.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp uge double %y, %x
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_I_uge(double %x) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_I_uge:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    grs32 a0, .LCPI7_0
 | |
| ; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
 | |
| ; CHECK-DF-NEXT:    fcmpltd vr0, vr1
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ; CHECK-DF-NEXT:    .p2align 1
 | |
| ; CHECK-DF-NEXT:  # %bb.1:
 | |
| ; CHECK-DF-NEXT:    .p2align 2
 | |
| ; CHECK-DF-NEXT:  .LCPI7_0:
 | |
| ; CHECK-DF-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_I_uge:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI7_0]
 | |
| ; CHECK-DF2-NEXT:    fcmplt.64 vr0, vr1
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| ; CHECK-DF2-NEXT:    .p2align 1
 | |
| ; CHECK-DF2-NEXT:  # %bb.1:
 | |
| ; CHECK-DF2-NEXT:    .p2align 2
 | |
| ; CHECK-DF2-NEXT:  .LCPI7_0:
 | |
| ; CHECK-DF2-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| entry:
 | |
|   %fcmp = fcmp uge double %x, 0.0
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| 
 | |
| ;ult
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_ult(double %x, double %y) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_ult:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmphsd vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_ult:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmphs.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp ult double %y, %x
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_I_ult(double %x) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_I_ult:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    grs32 a0, .LCPI9_0
 | |
| ; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
 | |
| ; CHECK-DF-NEXT:    fcmphsd vr0, vr1
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ; CHECK-DF-NEXT:    .p2align 1
 | |
| ; CHECK-DF-NEXT:  # %bb.1:
 | |
| ; CHECK-DF-NEXT:    .p2align 2
 | |
| ; CHECK-DF-NEXT:  .LCPI9_0:
 | |
| ; CHECK-DF-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_I_ult:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI9_0]
 | |
| ; CHECK-DF2-NEXT:    fcmphs.64 vr0, vr1
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| ; CHECK-DF2-NEXT:    .p2align 1
 | |
| ; CHECK-DF2-NEXT:  # %bb.1:
 | |
| ; CHECK-DF2-NEXT:    .p2align 2
 | |
| ; CHECK-DF2-NEXT:  .LCPI9_0:
 | |
| ; CHECK-DF2-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| entry:
 | |
|   %fcmp = fcmp ult double %x, 0.0
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| 
 | |
| ;ule
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_ule(double %x, double %y) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_ule:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmpltd vr0, vr1
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_ule:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmplt.64 vr0, vr1
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp ule double %y, %x
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_I_ule(double %x) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_I_ule:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    grs32 a0, .LCPI11_0
 | |
| ; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
 | |
| ; CHECK-DF-NEXT:    fcmpltd vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ; CHECK-DF-NEXT:    .p2align 1
 | |
| ; CHECK-DF-NEXT:  # %bb.1:
 | |
| ; CHECK-DF-NEXT:    .p2align 2
 | |
| ; CHECK-DF-NEXT:  .LCPI11_0:
 | |
| ; CHECK-DF-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_I_ule:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI11_0]
 | |
| ; CHECK-DF2-NEXT:    fcmplt.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    xori32 a0, a0, 1
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| ; CHECK-DF2-NEXT:    .p2align 1
 | |
| ; CHECK-DF2-NEXT:  # %bb.1:
 | |
| ; CHECK-DF2-NEXT:    .p2align 2
 | |
| ; CHECK-DF2-NEXT:  .LCPI11_0:
 | |
| ; CHECK-DF2-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| entry:
 | |
|   %fcmp = fcmp ule double %x, 0.0
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| 
 | |
| ;ogt
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_ogt(double %x, double %y) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_ogt:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmpltd vr0, vr1
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_ogt:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmplt.64 vr0, vr1
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp ogt double %y, %x
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_I_ogt(double %x) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_I_ogt:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    grs32 a0, .LCPI13_0
 | |
| ; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
 | |
| ; CHECK-DF-NEXT:    fcmpltd vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ; CHECK-DF-NEXT:    .p2align 1
 | |
| ; CHECK-DF-NEXT:  # %bb.1:
 | |
| ; CHECK-DF-NEXT:    .p2align 2
 | |
| ; CHECK-DF-NEXT:  .LCPI13_0:
 | |
| ; CHECK-DF-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_I_ogt:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI13_0]
 | |
| ; CHECK-DF2-NEXT:    fcmplt.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| ; CHECK-DF2-NEXT:    .p2align 1
 | |
| ; CHECK-DF2-NEXT:  # %bb.1:
 | |
| ; CHECK-DF2-NEXT:    .p2align 2
 | |
| ; CHECK-DF2-NEXT:  .LCPI13_0:
 | |
| ; CHECK-DF2-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| entry:
 | |
|   %fcmp = fcmp ogt double %x, 0.0
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| ;oge
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_oge(double %x, double %y) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_oge:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmphsd vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_oge:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmphs.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp oge double %y, %x
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_I_oge(double %x) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_I_oge:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    grs32 a0, .LCPI15_0
 | |
| ; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
 | |
| ; CHECK-DF-NEXT:    fcmphsd vr0, vr1
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ; CHECK-DF-NEXT:    .p2align 1
 | |
| ; CHECK-DF-NEXT:  # %bb.1:
 | |
| ; CHECK-DF-NEXT:    .p2align 2
 | |
| ; CHECK-DF-NEXT:  .LCPI15_0:
 | |
| ; CHECK-DF-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_I_oge:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI15_0]
 | |
| ; CHECK-DF2-NEXT:    fcmphs.64 vr0, vr1
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| ; CHECK-DF2-NEXT:    .p2align 1
 | |
| ; CHECK-DF2-NEXT:  # %bb.1:
 | |
| ; CHECK-DF2-NEXT:    .p2align 2
 | |
| ; CHECK-DF2-NEXT:  .LCPI15_0:
 | |
| ; CHECK-DF2-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| entry:
 | |
|   %fcmp = fcmp oge double %x, 0.0
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| 
 | |
| ;olt
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_olt(double %x, double %y) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_olt:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmpltd vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_olt:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmplt.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp olt double %y, %x
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_I_olt(double %x) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_I_olt:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    grs32 a0, .LCPI17_0
 | |
| ; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
 | |
| ; CHECK-DF-NEXT:    fcmpltd vr0, vr1
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ; CHECK-DF-NEXT:    .p2align 1
 | |
| ; CHECK-DF-NEXT:  # %bb.1:
 | |
| ; CHECK-DF-NEXT:    .p2align 2
 | |
| ; CHECK-DF-NEXT:  .LCPI17_0:
 | |
| ; CHECK-DF-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_I_olt:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI17_0]
 | |
| ; CHECK-DF2-NEXT:    fcmplt.64 vr0, vr1
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| ; CHECK-DF2-NEXT:    .p2align 1
 | |
| ; CHECK-DF2-NEXT:  # %bb.1:
 | |
| ; CHECK-DF2-NEXT:    .p2align 2
 | |
| ; CHECK-DF2-NEXT:  .LCPI17_0:
 | |
| ; CHECK-DF2-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| entry:
 | |
|   %fcmp = fcmp olt double %x, 0.0
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| ;ole
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_ole(double %x, double %y) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_ole:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmphsd vr0, vr1
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_ole:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmphs.64 vr0, vr1
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp ole double %y, %x
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_I_ole(double %x) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_I_ole:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    grs32 a0, .LCPI19_0
 | |
| ; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
 | |
| ; CHECK-DF-NEXT:    fcmphsd vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ; CHECK-DF-NEXT:    .p2align 1
 | |
| ; CHECK-DF-NEXT:  # %bb.1:
 | |
| ; CHECK-DF-NEXT:    .p2align 2
 | |
| ; CHECK-DF-NEXT:  .LCPI19_0:
 | |
| ; CHECK-DF-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_I_ole:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI19_0]
 | |
| ; CHECK-DF2-NEXT:    fcmphs.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| ; CHECK-DF2-NEXT:    .p2align 1
 | |
| ; CHECK-DF2-NEXT:  # %bb.1:
 | |
| ; CHECK-DF2-NEXT:    .p2align 2
 | |
| ; CHECK-DF2-NEXT:  .LCPI19_0:
 | |
| ; CHECK-DF2-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| entry:
 | |
|   %fcmp = fcmp ole double %x, 0.0
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| ;one
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_one(double %x, double %y) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_one:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmpuod vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvcv16 a0
 | |
| ; CHECK-DF-NEXT:    fcmpned vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvc32 a1
 | |
| ; CHECK-DF-NEXT:    and16 a0, a1
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_one:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmpuo.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvcv16 a0
 | |
| ; CHECK-DF2-NEXT:    fcmpne.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvc32 a1
 | |
| ; CHECK-DF2-NEXT:    and16 a0, a1
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp one double %y, %x
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_I_one(double %x) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_I_one:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    grs32 a0, .LCPI21_0
 | |
| ; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
 | |
| ; CHECK-DF-NEXT:    fcmpuod vr0, vr1
 | |
| ; CHECK-DF-NEXT:    mvcv16 a0
 | |
| ; CHECK-DF-NEXT:    fcmpned vr0, vr1
 | |
| ; CHECK-DF-NEXT:    mvc32 a1
 | |
| ; CHECK-DF-NEXT:    and16 a0, a1
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ; CHECK-DF-NEXT:    .p2align 1
 | |
| ; CHECK-DF-NEXT:  # %bb.1:
 | |
| ; CHECK-DF-NEXT:    .p2align 2
 | |
| ; CHECK-DF-NEXT:  .LCPI21_0:
 | |
| ; CHECK-DF-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_I_one:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI21_0]
 | |
| ; CHECK-DF2-NEXT:    fcmpuo.64 vr0, vr1
 | |
| ; CHECK-DF2-NEXT:    mvcv16 a0
 | |
| ; CHECK-DF2-NEXT:    fcmpne.64 vr0, vr1
 | |
| ; CHECK-DF2-NEXT:    mvc32 a1
 | |
| ; CHECK-DF2-NEXT:    and16 a0, a1
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| ; CHECK-DF2-NEXT:    .p2align 1
 | |
| ; CHECK-DF2-NEXT:  # %bb.1:
 | |
| ; CHECK-DF2-NEXT:    .p2align 2
 | |
| ; CHECK-DF2-NEXT:  .LCPI21_0:
 | |
| ; CHECK-DF2-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| entry:
 | |
|   %fcmp = fcmp one double %x, 0.0
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| ;oeq
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_oeq(double %x, double %y) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_oeq:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmpned vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvcv16 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_oeq:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmpne.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvcv16 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp oeq double %y, %x
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_I_oeq(double %x) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_I_oeq:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    grs32 a0, .LCPI23_0
 | |
| ; CHECK-DF-NEXT:    fldd vr1, (a0, 0)
 | |
| ; CHECK-DF-NEXT:    fcmpned vr0, vr1
 | |
| ; CHECK-DF-NEXT:    mvcv16 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ; CHECK-DF-NEXT:    .p2align 1
 | |
| ; CHECK-DF-NEXT:  # %bb.1:
 | |
| ; CHECK-DF-NEXT:    .p2align 2
 | |
| ; CHECK-DF-NEXT:  .LCPI23_0:
 | |
| ; CHECK-DF-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_I_oeq:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    flrw.64 vr1, [.LCPI23_0]
 | |
| ; CHECK-DF2-NEXT:    fcmpne.64 vr0, vr1
 | |
| ; CHECK-DF2-NEXT:    mvcv16 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| ; CHECK-DF2-NEXT:    .p2align 1
 | |
| ; CHECK-DF2-NEXT:  # %bb.1:
 | |
| ; CHECK-DF2-NEXT:    .p2align 2
 | |
| ; CHECK-DF2-NEXT:  .LCPI23_0:
 | |
| ; CHECK-DF2-NEXT:    .quad 0x0000000000000000 # double 0
 | |
| entry:
 | |
|   %fcmp = fcmp oeq double %x, 0.0
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| ;ord
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_ord(double %x, double %y) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_ord:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmpuod vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvcv16 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_ord:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmpuo.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvcv16 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp ord double %y, %x
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_I_ord(double %x) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_I_ord:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmpuod vr0, vr0
 | |
| ; CHECK-DF-NEXT:    mvcv16 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_I_ord:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmpuo.64 vr0, vr0
 | |
| ; CHECK-DF2-NEXT:    mvcv16 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp ord double %x, 0.0
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| ;uno
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_uno(double %x, double %y) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_uno:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmpuod vr1, vr0
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_uno:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmpuo.64 vr1, vr0
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp uno double %y, %x
 | |
|   ret i1 %fcmp
 | |
| }
 | |
| 
 | |
| define i1 @FCMP_DOUBLE_I_uno(double %x) {
 | |
| ;
 | |
| ;
 | |
| ; CHECK-DF-LABEL: FCMP_DOUBLE_I_uno:
 | |
| ; CHECK-DF:       # %bb.0: # %entry
 | |
| ; CHECK-DF-NEXT:    fcmpuod vr0, vr0
 | |
| ; CHECK-DF-NEXT:    mvc32 a0
 | |
| ; CHECK-DF-NEXT:    rts16
 | |
| ;
 | |
| ; CHECK-DF2-LABEL: FCMP_DOUBLE_I_uno:
 | |
| ; CHECK-DF2:       # %bb.0: # %entry
 | |
| ; CHECK-DF2-NEXT:    fcmpuo.64 vr0, vr0
 | |
| ; CHECK-DF2-NEXT:    mvc32 a0
 | |
| ; CHECK-DF2-NEXT:    rts16
 | |
| entry:
 | |
|   %fcmp = fcmp uno double %x, 0.0
 | |
|   ret i1 %fcmp
 | |
| }
 |