@@ -3166,49 +3166,33 @@ def : GCNPat <
3166
3166
(v2f16 (V_AND_B32_e64 (i32 (V_MOV_B32_e32 (i32 0xffff))), VGPR_32:$src1))
3167
3167
>;
3168
3168
3169
- def : GCNPat <
3170
- (v2i16 (UniformBinFrag<build_vector> (i16 SReg_32:$src0), (i16 undef))),
3171
- (COPY_TO_REGCLASS SReg_32:$src0, SReg_32)
3172
- >;
3173
-
3174
- def : GCNPat <
3175
- (v2i16 (DivergentBinFrag<build_vector> (i16 VGPR_32:$src0), (i16 undef))),
3176
- (COPY_TO_REGCLASS VGPR_32:$src0, VGPR_32)
3177
- >;
3169
+ foreach vecTy = [v2i16, v2f16] in {
3178
3170
3179
- def : GCNPat <
3180
- (v2f16 (build_vector f16:$src0, (f16 undef))),
3181
- (COPY $src0)
3182
- >;
3171
+ defvar Ty = vecTy.ElementType;
3183
3172
3184
3173
def : GCNPat <
3185
- (v2i16 (UniformBinFrag<build_vector> (i16 undef ), (i16 SReg_32:$src1 ))),
3186
- (S_LSHL_B32 SReg_32:$src1, (i32 16) )
3174
+ (vecTy (UniformBinFrag<build_vector> (Ty SReg_32:$src0 ), (Ty undef ))),
3175
+ (COPY_TO_REGCLASS SReg_32:$src0, SReg_32 )
3187
3176
>;
3188
3177
3189
3178
def : GCNPat <
3190
- (v2i16 (DivergentBinFrag<build_vector> (i16 undef ), (i16 VGPR_32:$src1 ))),
3191
- (v2i16 (V_LSHLREV_B32_e64 (i32 16), VGPR_32:$src1) )
3179
+ (vecTy (DivergentBinFrag<build_vector> (Ty VGPR_32:$src0 ), (Ty undef ))),
3180
+ (COPY_TO_REGCLASS VGPR_32:$src0, VGPR_32 )
3192
3181
>;
3193
3182
3194
-
3195
3183
def : GCNPat <
3196
- (v2f16 (UniformBinFrag<build_vector> (f16 undef), (f16 SReg_32:$src1))),
3184
+ (vecTy (UniformBinFrag<build_vector> (Ty undef), (Ty SReg_32:$src1))),
3197
3185
(S_LSHL_B32 SReg_32:$src1, (i32 16))
3198
3186
>;
3199
3187
3200
3188
def : GCNPat <
3201
- (v2f16 (DivergentBinFrag<build_vector> (f16 undef), (f16 VGPR_32:$src1))),
3202
- (v2f16 (V_LSHLREV_B32_e64 (i32 16), VGPR_32:$src1))
3189
+ (vecTy (DivergentBinFrag<build_vector> (Ty undef), (Ty VGPR_32:$src1))),
3190
+ (vecTy (V_LSHLREV_B32_e64 (i32 16), VGPR_32:$src1))
3203
3191
>;
3192
+ } // End foreach Ty = ...
3204
3193
}
3205
3194
3206
3195
let SubtargetPredicate = HasVOP3PInsts in {
3207
- def : GCNPat <
3208
- (v2i16 (UniformBinFrag<build_vector> (i16 SReg_32:$src0), (i16 SReg_32:$src1))),
3209
- (S_PACK_LL_B32_B16 SReg_32:$src0, SReg_32:$src1)
3210
- >;
3211
-
3212
3196
def : GCNPat <
3213
3197
(v2i16 (DivergentBinFrag<build_vector> (i16 VGPR_32:$src0), (i16 VGPR_32:$src1))),
3214
3198
(v2i16 (V_LSHL_OR_B32_e64 $src1, (i32 16), (i32 (V_AND_B32_e64 (i32 (V_MOV_B32_e32 (i32 0xffff))), $src0))))
@@ -3227,18 +3211,17 @@ def : GCNPat <
3227
3211
(S_PACK_HH_B32_B16 SReg_32:$src0, SReg_32:$src1)
3228
3212
>;
3229
3213
3230
- def : GCNPat <
3231
- (v2f16 (UniformBinFrag<build_vector> (f16 SReg_32:$src0), (f16 SReg_32:$src1))),
3232
- (S_PACK_LL_B32_B16 SReg_32:$src0, SReg_32:$src1)
3233
- >;
3234
3214
3215
+ foreach vecTy = [v2i16, v2f16] in {
3235
3216
3236
-
3237
- foreach Ty = [i16, f16] in {
3238
-
3239
- defvar vecTy = !if(!eq(Ty, i16), v2i16, v2f16);
3217
+ defvar Ty = vecTy.ElementType;
3240
3218
defvar immzeroTy = !if(!eq(Ty, i16), immzero, fpimmzero);
3241
3219
3220
+ def : GCNPat <
3221
+ (vecTy (UniformBinFrag<build_vector> (Ty SReg_32:$src0), (Ty SReg_32:$src1))),
3222
+ (S_PACK_LL_B32_B16 SReg_32:$src0, SReg_32:$src1)
3223
+ >;
3224
+
3242
3225
// Take the lower 16 bits from each VGPR_32 and concat them
3243
3226
def : GCNPat <
3244
3227
(vecTy (DivergentBinFrag<build_vector> (Ty VGPR_32:$a), (Ty VGPR_32:$b))),
0 commit comments