You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: llvm/test/CodeGen/RISCV/rvv/vl-opt-instrs.ll
+168Lines changed: 168 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -3025,3 +3025,171 @@ define <vscale x 4 x float> @vfrsub_vx(<vscale x 4 x float> %a, float %b, iXLen
3025
3025
%2 = call <vscale x 4 x float> @llvm.riscv.vfadd.nxv4f32.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x float> %1, <vscale x 4 x float> %a, iXLen 7, iXLen %vl)
3026
3026
ret <vscale x 4 x float> %2
3027
3027
}
3028
+
3029
+
define <vscale x 4 x double> @vfwadd_vv(<vscale x 4 x float> %a, <vscale x 4 x float> %b, iXLen %vl) {
3030
+
; NOVLOPT-LABEL: vfwadd_vv:
3031
+
; NOVLOPT: # %bb.0:
3032
+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
3033
+
; NOVLOPT-NEXT: vfwadd.vv v12, v8, v10
3034
+
; NOVLOPT-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3035
+
; NOVLOPT-NEXT: vfadd.vv v8, v12, v12
3036
+
; NOVLOPT-NEXT: ret
3037
+
;
3038
+
; VLOPT-LABEL: vfwadd_vv:
3039
+
; VLOPT: # %bb.0:
3040
+
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3041
+
; VLOPT-NEXT: vfwadd.vv v12, v8, v10
3042
+
; VLOPT-NEXT: vsetvli zero, zero, e64, m4, ta, ma
3043
+
; VLOPT-NEXT: vfadd.vv v8, v12, v12
3044
+
; VLOPT-NEXT: ret
3045
+
%1 = call <vscale x 4 x double> @llvm.riscv.vfwadd.nxv4f64.nxv4f32.nxv4f32(<vscale x 4 x double> poison, <vscale x 4 x float> %a, <vscale x 4 x float> %b, iXLen 7, iXLen -1)
3046
+
%2 = call <vscale x 4 x double> @llvm.riscv.vfadd.nxv4f64.nxv4f64(<vscale x 4 x double> poison, <vscale x 4 x double> %1, <vscale x 4 x double> %1, iXLen 7, iXLen %vl)
3047
+
ret <vscale x 4 x double> %2
3048
+
}
3049
+
3050
+
define <vscale x 4 x double> @vfwadd_vf(<vscale x 4 x float> %a, float%b, iXLen %vl) {
3051
+
; NOVLOPT-LABEL: vfwadd_vf:
3052
+
; NOVLOPT: # %bb.0:
3053
+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
3054
+
; NOVLOPT-NEXT: vfwadd.vf v12, v8, fa0
3055
+
; NOVLOPT-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3056
+
; NOVLOPT-NEXT: vfadd.vv v8, v12, v12
3057
+
; NOVLOPT-NEXT: ret
3058
+
;
3059
+
; VLOPT-LABEL: vfwadd_vf:
3060
+
; VLOPT: # %bb.0:
3061
+
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3062
+
; VLOPT-NEXT: vfwadd.vf v12, v8, fa0
3063
+
; VLOPT-NEXT: vsetvli zero, zero, e64, m4, ta, ma
3064
+
; VLOPT-NEXT: vfadd.vv v8, v12, v12
3065
+
; VLOPT-NEXT: ret
3066
+
%1 = call <vscale x 4 x double> @llvm.riscv.vfwadd.nxv4f64.nxv4f32.f32(<vscale x 4 x double> poison, <vscale x 4 x float> %a, float%b, iXLen 7, iXLen -1)
3067
+
%2 = call <vscale x 4 x double> @llvm.riscv.vfadd.nxv4f64.nxv4f64(<vscale x 4 x double> poison, <vscale x 4 x double> %1, <vscale x 4 x double> %1, iXLen 7, iXLen %vl)
3068
+
ret <vscale x 4 x double> %2
3069
+
}
3070
+
3071
+
define <vscale x 4 x double> @vfwsub_vv(<vscale x 4 x float> %a, <vscale x 4 x float> %b, iXLen %vl) {
3072
+
; NOVLOPT-LABEL: vfwsub_vv:
3073
+
; NOVLOPT: # %bb.0:
3074
+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
3075
+
; NOVLOPT-NEXT: vfwsub.vv v12, v8, v10
3076
+
; NOVLOPT-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3077
+
; NOVLOPT-NEXT: vfadd.vv v8, v12, v12
3078
+
; NOVLOPT-NEXT: ret
3079
+
;
3080
+
; VLOPT-LABEL: vfwsub_vv:
3081
+
; VLOPT: # %bb.0:
3082
+
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3083
+
; VLOPT-NEXT: vfwsub.vv v12, v8, v10
3084
+
; VLOPT-NEXT: vsetvli zero, zero, e64, m4, ta, ma
3085
+
; VLOPT-NEXT: vfadd.vv v8, v12, v12
3086
+
; VLOPT-NEXT: ret
3087
+
%1 = call <vscale x 4 x double> @llvm.riscv.vfwsub.nxv4f64.nxv4f32.nxv4f32(<vscale x 4 x double> poison, <vscale x 4 x float> %a, <vscale x 4 x float> %b, iXLen 7, iXLen -1)
3088
+
%2 = call <vscale x 4 x double> @llvm.riscv.vfadd.nxv4f64.nxv4f64(<vscale x 4 x double> poison, <vscale x 4 x double> %1, <vscale x 4 x double> %1, iXLen 7, iXLen %vl)
3089
+
ret <vscale x 4 x double> %2
3090
+
}
3091
+
3092
+
define <vscale x 4 x double> @vfwsub_vx(<vscale x 4 x float> %a, float%b, iXLen %vl) {
3093
+
; NOVLOPT-LABEL: vfwsub_vx:
3094
+
; NOVLOPT: # %bb.0:
3095
+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
3096
+
; NOVLOPT-NEXT: vfwsub.vf v12, v8, fa0
3097
+
; NOVLOPT-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3098
+
; NOVLOPT-NEXT: vfadd.vv v8, v12, v12
3099
+
; NOVLOPT-NEXT: ret
3100
+
;
3101
+
; VLOPT-LABEL: vfwsub_vx:
3102
+
; VLOPT: # %bb.0:
3103
+
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3104
+
; VLOPT-NEXT: vfwsub.vf v12, v8, fa0
3105
+
; VLOPT-NEXT: vsetvli zero, zero, e64, m4, ta, ma
3106
+
; VLOPT-NEXT: vfadd.vv v8, v12, v12
3107
+
; VLOPT-NEXT: ret
3108
+
%1 = call <vscale x 4 x double> @llvm.riscv.vfwsub.nxv4f64.nxv4f32.f32(<vscale x 4 x double> poison, <vscale x 4 x float> %a, float%b, iXLen 7, iXLen -1)
3109
+
%2 = call <vscale x 4 x double> @llvm.riscv.vfadd.nxv4f64.nxv4f64(<vscale x 4 x double> poison, <vscale x 4 x double> %1, <vscale x 4 x double> %1, iXLen 7, iXLen %vl)
3110
+
ret <vscale x 4 x double> %2
3111
+
}
3112
+
3113
+
define <vscale x 4 x double> @vfwadd_wv(<vscale x 4 x double> %a, <vscale x 4 x float> %b, iXLen %vl) {
3114
+
; NOVLOPT-LABEL: vfwadd_wv:
3115
+
; NOVLOPT: # %bb.0:
3116
+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
3117
+
; NOVLOPT-NEXT: vfwadd.wv v8, v8, v12
3118
+
; NOVLOPT-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3119
+
; NOVLOPT-NEXT: vfadd.vv v8, v8, v8
3120
+
; NOVLOPT-NEXT: ret
3121
+
;
3122
+
; VLOPT-LABEL: vfwadd_wv:
3123
+
; VLOPT: # %bb.0:
3124
+
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3125
+
; VLOPT-NEXT: vfwadd.wv v8, v8, v12
3126
+
; VLOPT-NEXT: vsetvli zero, zero, e64, m4, ta, ma
3127
+
; VLOPT-NEXT: vfadd.vv v8, v8, v8
3128
+
; VLOPT-NEXT: ret
3129
+
%1 = call <vscale x 4 x double> @llvm.riscv.vfwadd.w.nxv4f64.nxv4f32.nxv4f32(<vscale x 4 x double> poison, <vscale x 4 x double> %a, <vscale x 4 x float> %b, iXLen 7, iXLen -1)
3130
+
%2 = call <vscale x 4 x double> @llvm.riscv.vfadd.nxv4f64.nxv4f64(<vscale x 4 x double> poison, <vscale x 4 x double> %1, <vscale x 4 x double> %1, iXLen 7, iXLen %vl)
3131
+
ret <vscale x 4 x double> %2
3132
+
}
3133
+
3134
+
define <vscale x 4 x double> @vfwadd_wf(<vscale x 4 x double> %a, float%b, iXLen %vl) {
3135
+
; NOVLOPT-LABEL: vfwadd_wf:
3136
+
; NOVLOPT: # %bb.0:
3137
+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
3138
+
; NOVLOPT-NEXT: vfwadd.wf v8, v8, fa0
3139
+
; NOVLOPT-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3140
+
; NOVLOPT-NEXT: vfadd.vv v8, v8, v8
3141
+
; NOVLOPT-NEXT: ret
3142
+
;
3143
+
; VLOPT-LABEL: vfwadd_wf:
3144
+
; VLOPT: # %bb.0:
3145
+
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3146
+
; VLOPT-NEXT: vfwadd.wf v8, v8, fa0
3147
+
; VLOPT-NEXT: vsetvli zero, zero, e64, m4, ta, ma
3148
+
; VLOPT-NEXT: vfadd.vv v8, v8, v8
3149
+
; VLOPT-NEXT: ret
3150
+
%1 = call <vscale x 4 x double> @llvm.riscv.vfwadd.w.nxv4f64.nxv4f32.f32(<vscale x 4 x double> poison, <vscale x 4 x double> %a, float%b, iXLen 7, iXLen -1)
3151
+
%2 = call <vscale x 4 x double> @llvm.riscv.vfadd.nxv4f64.nxv4f64(<vscale x 4 x double> poison, <vscale x 4 x double> %1, <vscale x 4 x double> %1, iXLen 7, iXLen %vl)
3152
+
ret <vscale x 4 x double> %2
3153
+
}
3154
+
3155
+
define <vscale x 4 x double> @vfwsub_wv(<vscale x 4 x double> %a, <vscale x 4 x float> %b, iXLen %vl) {
3156
+
; NOVLOPT-LABEL: vfwsub_wv:
3157
+
; NOVLOPT: # %bb.0:
3158
+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
3159
+
; NOVLOPT-NEXT: vfwsub.wv v8, v8, v12
3160
+
; NOVLOPT-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3161
+
; NOVLOPT-NEXT: vfadd.vv v8, v8, v8
3162
+
; NOVLOPT-NEXT: ret
3163
+
;
3164
+
; VLOPT-LABEL: vfwsub_wv:
3165
+
; VLOPT: # %bb.0:
3166
+
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3167
+
; VLOPT-NEXT: vfwsub.wv v8, v8, v12
3168
+
; VLOPT-NEXT: vsetvli zero, zero, e64, m4, ta, ma
3169
+
; VLOPT-NEXT: vfadd.vv v8, v8, v8
3170
+
; VLOPT-NEXT: ret
3171
+
%1 = call <vscale x 4 x double> @llvm.riscv.vfwsub.w.nxv4f64.nxv4f32.nxv4f32(<vscale x 4 x double> poison, <vscale x 4 x double> %a, <vscale x 4 x float> %b, iXLen 7, iXLen -1)
3172
+
%2 = call <vscale x 4 x double> @llvm.riscv.vfadd.nxv4f64.nxv4f64(<vscale x 4 x double> poison, <vscale x 4 x double> %1, <vscale x 4 x double> %1, iXLen 7, iXLen %vl)
3173
+
ret <vscale x 4 x double> %2
3174
+
}
3175
+
3176
+
define <vscale x 4 x double> @vfwsub_wf(<vscale x 4 x double> %a, float%b, iXLen %vl) {
3177
+
; NOVLOPT-LABEL: vfwsub_wf:
3178
+
; NOVLOPT: # %bb.0:
3179
+
; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
3180
+
; NOVLOPT-NEXT: vfwsub.wf v8, v8, fa0
3181
+
; NOVLOPT-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3182
+
; NOVLOPT-NEXT: vfadd.vv v8, v8, v8
3183
+
; NOVLOPT-NEXT: ret
3184
+
;
3185
+
; VLOPT-LABEL: vfwsub_wf:
3186
+
; VLOPT: # %bb.0:
3187
+
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3188
+
; VLOPT-NEXT: vfwsub.wf v8, v8, fa0
3189
+
; VLOPT-NEXT: vsetvli zero, zero, e64, m4, ta, ma
3190
+
; VLOPT-NEXT: vfadd.vv v8, v8, v8
3191
+
; VLOPT-NEXT: ret
3192
+
%1 = call <vscale x 4 x double> @llvm.riscv.vfwsub.w.nxv4f64.nxv4f32.f32(<vscale x 4 x double> poison, <vscale x 4 x double> %a, float%b, iXLen 7, iXLen -1)
3193
+
%2 = call <vscale x 4 x double> @llvm.riscv.vfadd.nxv4f64.nxv4f64(<vscale x 4 x double> poison, <vscale x 4 x double> %1, <vscale x 4 x double> %1, iXLen 7, iXLen %vl)
0 commit comments