@@ -3050,3 +3050,84 @@ define float @tanh_f32(float %a) nounwind {
30503050 %1 = call float @llvm.tanh.f32 (float %a )
30513051 ret float %1
30523052}
3053+
3054+ define { float , float } @test_modf_f32 (float %a ) nounwind {
3055+ ; RV32IF-LABEL: test_modf_f32:
3056+ ; RV32IF: # %bb.0:
3057+ ; RV32IF-NEXT: addi sp, sp, -16
3058+ ; RV32IF-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
3059+ ; RV32IF-NEXT: addi a0, sp, 8
3060+ ; RV32IF-NEXT: call modff
3061+ ; RV32IF-NEXT: flw fa1, 8(sp)
3062+ ; RV32IF-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
3063+ ; RV32IF-NEXT: addi sp, sp, 16
3064+ ; RV32IF-NEXT: ret
3065+ ;
3066+ ; RV32IZFINX-LABEL: test_modf_f32:
3067+ ; RV32IZFINX: # %bb.0:
3068+ ; RV32IZFINX-NEXT: addi sp, sp, -16
3069+ ; RV32IZFINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
3070+ ; RV32IZFINX-NEXT: addi a1, sp, 8
3071+ ; RV32IZFINX-NEXT: call modff
3072+ ; RV32IZFINX-NEXT: lw a1, 8(sp)
3073+ ; RV32IZFINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
3074+ ; RV32IZFINX-NEXT: addi sp, sp, 16
3075+ ; RV32IZFINX-NEXT: ret
3076+ ;
3077+ ; RV64IF-LABEL: test_modf_f32:
3078+ ; RV64IF: # %bb.0:
3079+ ; RV64IF-NEXT: addi sp, sp, -16
3080+ ; RV64IF-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
3081+ ; RV64IF-NEXT: addi a0, sp, 4
3082+ ; RV64IF-NEXT: call modff
3083+ ; RV64IF-NEXT: flw fa1, 4(sp)
3084+ ; RV64IF-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
3085+ ; RV64IF-NEXT: addi sp, sp, 16
3086+ ; RV64IF-NEXT: ret
3087+ ;
3088+ ; RV64IZFINX-LABEL: test_modf_f32:
3089+ ; RV64IZFINX: # %bb.0:
3090+ ; RV64IZFINX-NEXT: addi sp, sp, -16
3091+ ; RV64IZFINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
3092+ ; RV64IZFINX-NEXT: addi a1, sp, 4
3093+ ; RV64IZFINX-NEXT: call modff
3094+ ; RV64IZFINX-NEXT: lw a1, 4(sp)
3095+ ; RV64IZFINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
3096+ ; RV64IZFINX-NEXT: addi sp, sp, 16
3097+ ; RV64IZFINX-NEXT: ret
3098+ ;
3099+ ; RV64IFD-LABEL: test_modf_f32:
3100+ ; RV64IFD: # %bb.0:
3101+ ; RV64IFD-NEXT: addi sp, sp, -16
3102+ ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
3103+ ; RV64IFD-NEXT: addi a0, sp, 4
3104+ ; RV64IFD-NEXT: call modff
3105+ ; RV64IFD-NEXT: flw fa1, 4(sp)
3106+ ; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
3107+ ; RV64IFD-NEXT: addi sp, sp, 16
3108+ ; RV64IFD-NEXT: ret
3109+ ;
3110+ ; RV32I-LABEL: test_modf_f32:
3111+ ; RV32I: # %bb.0:
3112+ ; RV32I-NEXT: addi sp, sp, -16
3113+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
3114+ ; RV32I-NEXT: addi a1, sp, 8
3115+ ; RV32I-NEXT: call modff
3116+ ; RV32I-NEXT: lw a1, 8(sp)
3117+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
3118+ ; RV32I-NEXT: addi sp, sp, 16
3119+ ; RV32I-NEXT: ret
3120+ ;
3121+ ; RV64I-LABEL: test_modf_f32:
3122+ ; RV64I: # %bb.0:
3123+ ; RV64I-NEXT: addi sp, sp, -16
3124+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
3125+ ; RV64I-NEXT: addi a1, sp, 4
3126+ ; RV64I-NEXT: call modff
3127+ ; RV64I-NEXT: lw a1, 4(sp)
3128+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
3129+ ; RV64I-NEXT: addi sp, sp, 16
3130+ ; RV64I-NEXT: ret
3131+ %result = call { float , float } @llvm.modf.f32 (float %a )
3132+ ret { float , float } %result
3133+ }
0 commit comments