@@ -2109,3 +2109,111 @@ define double @tanh_f64(double %a) nounwind {
21092109 %1 = call double @llvm.tanh.f64 (double %a )
21102110 ret double %1
21112111}
2112+
2113+ define { double , double } @test_modf_f64 (double %a ) {
2114+ ; RV32IFD-LABEL: test_modf_f64:
2115+ ; RV32IFD: # %bb.0:
2116+ ; RV32IFD-NEXT: addi sp, sp, -16
2117+ ; RV32IFD-NEXT: .cfi_def_cfa_offset 16
2118+ ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2119+ ; RV32IFD-NEXT: .cfi_offset ra, -4
2120+ ; RV32IFD-NEXT: mv a0, sp
2121+ ; RV32IFD-NEXT: call modf
2122+ ; RV32IFD-NEXT: fld fa1, 0(sp)
2123+ ; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2124+ ; RV32IFD-NEXT: .cfi_restore ra
2125+ ; RV32IFD-NEXT: addi sp, sp, 16
2126+ ; RV32IFD-NEXT: .cfi_def_cfa_offset 0
2127+ ; RV32IFD-NEXT: ret
2128+ ;
2129+ ; RV64IFD-LABEL: test_modf_f64:
2130+ ; RV64IFD: # %bb.0:
2131+ ; RV64IFD-NEXT: addi sp, sp, -16
2132+ ; RV64IFD-NEXT: .cfi_def_cfa_offset 16
2133+ ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2134+ ; RV64IFD-NEXT: .cfi_offset ra, -8
2135+ ; RV64IFD-NEXT: mv a0, sp
2136+ ; RV64IFD-NEXT: call modf
2137+ ; RV64IFD-NEXT: fld fa1, 0(sp)
2138+ ; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2139+ ; RV64IFD-NEXT: .cfi_restore ra
2140+ ; RV64IFD-NEXT: addi sp, sp, 16
2141+ ; RV64IFD-NEXT: .cfi_def_cfa_offset 0
2142+ ; RV64IFD-NEXT: ret
2143+ ;
2144+ ; RV32IZFINXZDINX-LABEL: test_modf_f64:
2145+ ; RV32IZFINXZDINX: # %bb.0:
2146+ ; RV32IZFINXZDINX-NEXT: addi sp, sp, -16
2147+ ; RV32IZFINXZDINX-NEXT: .cfi_def_cfa_offset 16
2148+ ; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2149+ ; RV32IZFINXZDINX-NEXT: .cfi_offset ra, -4
2150+ ; RV32IZFINXZDINX-NEXT: mv a2, sp
2151+ ; RV32IZFINXZDINX-NEXT: call modf
2152+ ; RV32IZFINXZDINX-NEXT: lw a2, 0(sp)
2153+ ; RV32IZFINXZDINX-NEXT: lw a3, 4(sp)
2154+ ; RV32IZFINXZDINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2155+ ; RV32IZFINXZDINX-NEXT: .cfi_restore ra
2156+ ; RV32IZFINXZDINX-NEXT: addi sp, sp, 16
2157+ ; RV32IZFINXZDINX-NEXT: .cfi_def_cfa_offset 0
2158+ ; RV32IZFINXZDINX-NEXT: ret
2159+ ;
2160+ ; RV64IZFINXZDINX-LABEL: test_modf_f64:
2161+ ; RV64IZFINXZDINX: # %bb.0:
2162+ ; RV64IZFINXZDINX-NEXT: addi sp, sp, -16
2163+ ; RV64IZFINXZDINX-NEXT: .cfi_def_cfa_offset 16
2164+ ; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2165+ ; RV64IZFINXZDINX-NEXT: .cfi_offset ra, -8
2166+ ; RV64IZFINXZDINX-NEXT: mv a1, sp
2167+ ; RV64IZFINXZDINX-NEXT: call modf
2168+ ; RV64IZFINXZDINX-NEXT: ld a1, 0(sp)
2169+ ; RV64IZFINXZDINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2170+ ; RV64IZFINXZDINX-NEXT: .cfi_restore ra
2171+ ; RV64IZFINXZDINX-NEXT: addi sp, sp, 16
2172+ ; RV64IZFINXZDINX-NEXT: .cfi_def_cfa_offset 0
2173+ ; RV64IZFINXZDINX-NEXT: ret
2174+ ;
2175+ ; RV32I-LABEL: test_modf_f64:
2176+ ; RV32I: # %bb.0:
2177+ ; RV32I-NEXT: addi sp, sp, -16
2178+ ; RV32I-NEXT: .cfi_def_cfa_offset 16
2179+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
2180+ ; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
2181+ ; RV32I-NEXT: .cfi_offset ra, -4
2182+ ; RV32I-NEXT: .cfi_offset s0, -8
2183+ ; RV32I-NEXT: mv a3, a2
2184+ ; RV32I-NEXT: mv s0, a0
2185+ ; RV32I-NEXT: mv a2, sp
2186+ ; RV32I-NEXT: mv a0, a1
2187+ ; RV32I-NEXT: mv a1, a3
2188+ ; RV32I-NEXT: call modf
2189+ ; RV32I-NEXT: lw a2, 0(sp)
2190+ ; RV32I-NEXT: lw a3, 4(sp)
2191+ ; RV32I-NEXT: sw a0, 0(s0)
2192+ ; RV32I-NEXT: sw a1, 4(s0)
2193+ ; RV32I-NEXT: sw a2, 8(s0)
2194+ ; RV32I-NEXT: sw a3, 12(s0)
2195+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
2196+ ; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
2197+ ; RV32I-NEXT: .cfi_restore ra
2198+ ; RV32I-NEXT: .cfi_restore s0
2199+ ; RV32I-NEXT: addi sp, sp, 16
2200+ ; RV32I-NEXT: .cfi_def_cfa_offset 0
2201+ ; RV32I-NEXT: ret
2202+ ;
2203+ ; RV64I-LABEL: test_modf_f64:
2204+ ; RV64I: # %bb.0:
2205+ ; RV64I-NEXT: addi sp, sp, -16
2206+ ; RV64I-NEXT: .cfi_def_cfa_offset 16
2207+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
2208+ ; RV64I-NEXT: .cfi_offset ra, -8
2209+ ; RV64I-NEXT: mv a1, sp
2210+ ; RV64I-NEXT: call modf
2211+ ; RV64I-NEXT: ld a1, 0(sp)
2212+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
2213+ ; RV64I-NEXT: .cfi_restore ra
2214+ ; RV64I-NEXT: addi sp, sp, 16
2215+ ; RV64I-NEXT: .cfi_def_cfa_offset 0
2216+ ; RV64I-NEXT: ret
2217+ %result = call { double , double } @llvm.modf.f64 (double %a )
2218+ ret { double , double } %result
2219+ }
0 commit comments