Skip to content

Commit 3fc40b6

Browse files
committed
X86: gate all vmovsh instructions on FP16 support.
Previously the `let Predicates = ...` line only applied to the rr version, and so VMOVSH was being emitted whenever HasAVX512 (the default) applied. This is not right.
1 parent db28a45 commit 3fc40b6

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

llvm/lib/Target/X86/X86InstrAVX512.td

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4100,13 +4100,15 @@ def : Pat<(f64 (bitconvert VK64:$src)),
41004100

41014101
multiclass avx512_move_scalar<string asm, SDNode OpNode, PatFrag vzload_frag,
41024102
X86VectorVTInfo _,
4103-
list<Predicate> prd = [HasAVX512, OptForSize]> {
4104-
let Predicates = prd in
4103+
list<Predicate> prd = [HasAVX512],
4104+
list<Predicate> prdsize = [HasAVX512, OptForSize]> {
4105+
let Predicates = prdsize in
41054106
def rr : AVX512PI<0x10, MRMSrcReg, (outs _.RC:$dst),
41064107
(ins _.RC:$src1, _.RC:$src2),
41074108
!strconcat(asm, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
41084109
[(set _.RC:$dst, (_.VT (OpNode _.RC:$src1, _.RC:$src2)))],
41094110
_.ExeDomain>, EVEX_4V, Sched<[SchedWriteFShuffle.XMM]>;
4111+
let Predicates = prd in {
41104112
def rrkz : AVX512PI<0x10, MRMSrcReg, (outs _.RC:$dst),
41114113
(ins _.KRCWM:$mask, _.RC:$src1, _.RC:$src2),
41124114
!strconcat(asm, "\t{$src2, $src1, $dst {${mask}} {z}|",
@@ -4159,6 +4161,7 @@ multiclass avx512_move_scalar<string asm, SDNode OpNode, PatFrag vzload_frag,
41594161
!strconcat(asm, "\t{$src, $dst {${mask}}|$dst {${mask}}, $src}"),
41604162
[], _.ExeDomain>, EVEX, EVEX_K, Sched<[WriteFStore]>,
41614163
NotMemoryFoldable;
4164+
} // Predicates
41624165
}
41634166

41644167
defm VMOVSSZ : avx512_move_scalar<"vmovss", X86Movss, X86vzload32, f32x_info>,
@@ -4168,7 +4171,7 @@ defm VMOVSDZ : avx512_move_scalar<"vmovsd", X86Movsd, X86vzload64, f64x_info>,
41684171
VEX_LIG, XD, VEX_W, EVEX_CD8<64, CD8VT1>;
41694172

41704173
defm VMOVSHZ : avx512_move_scalar<"vmovsh", X86Movsh, X86vzload16, f16x_info,
4171-
[HasFP16]>,
4174+
[HasFP16], [HasFP16]>,
41724175
VEX_LIG, T_MAP5XS, EVEX_CD8<16, CD8VT1>;
41734176

41744177
multiclass avx512_move_scalar_lowering<string InstrStr, SDNode OpNode,

0 commit comments

Comments
 (0)