@@ -3050,3 +3050,84 @@ define float @tanh_f32(float %a) nounwind {
3050
3050
%1 = call float @llvm.tanh.f32 (float %a )
3051
3051
ret float %1
3052
3052
}
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