@@ -6689,31 +6689,31 @@ let Predicates = [HasCRC32, HasEGPR, In64BitMode], OpMap = T_MAP4, OpEnc = EncEV
6689
6689
6690
6690
// FIXME: Is there a better scheduler class for SHA than WriteVecIMul?
6691
6691
multiclass SHAI_binop<bits<8> Opc, string OpcodeStr, Intrinsic IntId,
6692
- X86FoldableSchedWrite sched, string Suffix = "", bit UsesXMM0 = 0> {
6693
- def rr#Suffix : I<Opc, MRMSrcReg, (outs VR128:$dst),
6694
- (ins VR128:$src1, VR128:$src2),
6695
- !if(UsesXMM0,
6696
- !strconcat(OpcodeStr, "\t{%xmm0, $src2, $dst|$dst, $src2, xmm0}"),
6697
- !strconcat(OpcodeStr, "\t{$src2, $dst|$dst, $src2}")),
6698
- [!if(UsesXMM0,
6699
- (set VR128:$dst, (IntId VR128:$src1, VR128:$src2, XMM0)),
6700
- (set VR128:$dst, (IntId VR128:$src1, VR128:$src2)))]>,
6701
- T8, Sched<[sched]>;
6702
-
6703
- def rm#Suffix : I<Opc, MRMSrcMem, (outs VR128:$dst),
6704
- (ins VR128:$src1, i128mem:$src2),
6705
- !if(UsesXMM0,
6706
- !strconcat(OpcodeStr, "\t{%xmm0, $src2, $dst|$dst, $src2, xmm0}"),
6707
- !strconcat(OpcodeStr, "\t{$src2, $dst|$dst, $src2}")),
6708
- [!if(UsesXMM0,
6709
- (set VR128:$dst, (IntId VR128:$src1,
6710
- (memop addr:$src2), XMM0)),
6711
- (set VR128:$dst, (IntId VR128:$src1,
6712
- (memop addr:$src2))))]>, T8,
6713
- Sched<[sched.Folded, sched.ReadAfterFold]>;
6692
+ X86FoldableSchedWrite sched, bit UsesXMM0 = 0> {
6693
+ def rr : I<Opc, MRMSrcReg, (outs VR128:$dst),
6694
+ (ins VR128:$src1, VR128:$src2),
6695
+ !if(UsesXMM0,
6696
+ !strconcat(OpcodeStr, "\t{%xmm0, $src2, $dst|$dst, $src2, xmm0}"),
6697
+ !strconcat(OpcodeStr, "\t{$src2, $dst|$dst, $src2}")),
6698
+ [!if(UsesXMM0,
6699
+ (set VR128:$dst, (IntId VR128:$src1, VR128:$src2, XMM0)),
6700
+ (set VR128:$dst, (IntId VR128:$src1, VR128:$src2)))]>,
6701
+ T8, Sched<[sched]>;
6702
+
6703
+ def rm : I<Opc, MRMSrcMem, (outs VR128:$dst),
6704
+ (ins VR128:$src1, i128mem:$src2),
6705
+ !if(UsesXMM0,
6706
+ !strconcat(OpcodeStr, "\t{%xmm0, $src2, $dst|$dst, $src2, xmm0}"),
6707
+ !strconcat(OpcodeStr, "\t{$src2, $dst|$dst, $src2}")),
6708
+ [!if(UsesXMM0,
6709
+ (set VR128:$dst, (IntId VR128:$src1,
6710
+ (memop addr:$src2), XMM0)),
6711
+ (set VR128:$dst, (IntId VR128:$src1,
6712
+ (memop addr:$src2))))]>, T8,
6713
+ Sched<[sched.Folded, sched.ReadAfterFold]>;
6714
6714
}
6715
6715
6716
- let Constraints = "$src1 = $dst", Predicates = [HasSHA, NoEGPR ] in {
6716
+ let Constraints = "$src1 = $dst", Predicates = [HasSHA] in {
6717
6717
def SHA1RNDS4rri : Ii8<0xCC, MRMSrcReg, (outs VR128:$dst),
6718
6718
(ins VR128:$src1, VR128:$src2, u8imm:$src3),
6719
6719
"sha1rnds4\t{$src3, $src2, $dst|$dst, $src2, $src3}",
@@ -6740,55 +6740,19 @@ let Constraints = "$src1 = $dst", Predicates = [HasSHA, NoEGPR] in {
6740
6740
6741
6741
let Uses=[XMM0] in
6742
6742
defm SHA256RNDS2 : SHAI_binop<0xCB, "sha256rnds2", int_x86_sha256rnds2,
6743
- SchedWriteVecIMul.XMM, "", 1>;
6743
+ SchedWriteVecIMul.XMM, 1>;
6744
6744
6745
6745
defm SHA256MSG1 : SHAI_binop<0xCC, "sha256msg1", int_x86_sha256msg1,
6746
6746
SchedWriteVecIMul.XMM>;
6747
6747
defm SHA256MSG2 : SHAI_binop<0xCD, "sha256msg2", int_x86_sha256msg2,
6748
6748
SchedWriteVecIMul.XMM>;
6749
6749
}
6750
6750
6751
- let Constraints = "$src1 = $dst", Predicates = [HasSHA, HasEGPR, In64BitMode] in {
6752
- def SHA1RNDS4rri_EVEX: Ii8<0xD4, MRMSrcReg, (outs VR128:$dst),
6753
- (ins VR128:$src1, VR128:$src2, u8imm:$src3),
6754
- "sha1rnds4\t{$src3, $src2, $dst|$dst, $src2, $src3}",
6755
- [(set VR128:$dst,
6756
- (int_x86_sha1rnds4 VR128:$src1, VR128:$src2,
6757
- (i8 timm:$src3)))]>,
6758
- EVEX, NoCD8, T_MAP4, Sched<[SchedWriteVecIMul.XMM]>;
6759
- def SHA1RNDS4rmi_EVEX: Ii8<0xD4, MRMSrcMem, (outs VR128:$dst),
6760
- (ins VR128:$src1, i128mem:$src2, u8imm:$src3),
6761
- "sha1rnds4\t{$src3, $src2, $dst|$dst, $src2, $src3}",
6762
- [(set VR128:$dst,
6763
- (int_x86_sha1rnds4 VR128:$src1,
6764
- (memop addr:$src2),
6765
- (i8 timm:$src3)))]>,
6766
- EVEX, NoCD8, T_MAP4,
6767
- Sched<[SchedWriteVecIMul.XMM.Folded,
6768
- SchedWriteVecIMul.XMM.ReadAfterFold]>;
6769
-
6770
- defm SHA1NEXTE : SHAI_binop<0xD8, "sha1nexte", int_x86_sha1nexte,
6771
- SchedWriteVecIMul.XMM, "_EVEX">,
6772
- EVEX, NoCD8, T_MAP4;
6773
- defm SHA1MSG1 : SHAI_binop<0xD9, "sha1msg1", int_x86_sha1msg1,
6774
- SchedWriteVecIMul.XMM, "_EVEX">,
6775
- EVEX, NoCD8, T_MAP4;
6776
- defm SHA1MSG2 : SHAI_binop<0xDA, "sha1msg2", int_x86_sha1msg2,
6777
- SchedWriteVecIMul.XMM, "_EVEX">,
6778
- EVEX, NoCD8, T_MAP4;
6779
-
6780
- let Uses=[XMM0] in
6781
- defm SHA256RNDS2 : SHAI_binop<0xDB, "sha256rnds2", int_x86_sha256rnds2,
6782
- SchedWriteVecIMul.XMM, "_EVEX", 1>,
6783
- EVEX, NoCD8, T_MAP4;
6784
-
6785
- defm SHA256MSG1 : SHAI_binop<0xDC, "sha256msg1", int_x86_sha256msg1,
6786
- SchedWriteVecIMul.XMM, "_EVEX">,
6787
- EVEX, NoCD8, T_MAP4;
6788
- defm SHA256MSG2 : SHAI_binop<0xDD, "sha256msg2", int_x86_sha256msg2,
6789
- SchedWriteVecIMul.XMM, "_EVEX">,
6790
- EVEX, NoCD8, T_MAP4;
6791
- }
6751
+ // Aliases with explicit %xmm0
6752
+ def : InstAlias<"sha256rnds2\t{$src2, $dst|$dst, $src2}",
6753
+ (SHA256RNDS2rr VR128:$dst, VR128:$src2), 0>;
6754
+ def : InstAlias<"sha256rnds2\t{$src2, $dst|$dst, $src2}",
6755
+ (SHA256RNDS2rm VR128:$dst, i128mem:$src2), 0>;
6792
6756
6793
6757
//===----------------------------------------------------------------------===//
6794
6758
// AES-NI Instructions
0 commit comments