diff options
| author | Julius Alexandre <juliuswoosebert@gmail.com> | 2025-12-07 01:10:34 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-12-07 01:10:34 -0500 |
| commit | de760583f013024a0b9006db796199d021aba67a (patch) | |
| tree | d11bafcc925705d1523db7262c4fdf6e35d68d74 | |
| parent | f5bcda493e973a22b2e3ffc1d7dd7af097430590 (diff) | |
| parent | 0dff5b5824f2fb958039da7f55b501127476a7c3 (diff) | |
| download | llvm-users/wizardengineer/ct-select-core.zip llvm-users/wizardengineer/ct-select-core.tar.gz llvm-users/wizardengineer/ct-select-core.tar.bz2 | |
Merge branch 'main' into users/wizardengineer/ct-select-coreusers/wizardengineer/ct-select-core
| -rw-r--r-- | llvm/lib/Target/X86/X86CompressEVEX.cpp | 10 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/apx/compress-evex.mir | 8 | ||||
| -rw-r--r-- | llvm/test/TableGen/x86-instr-mapping.inc | 1 | ||||
| -rw-r--r-- | llvm/utils/TableGen/X86InstrMappingEmitter.cpp | 3 | ||||
| -rw-r--r-- | llvm/utils/TableGen/X86ManualInstrMapping.def | 1 |
5 files changed, 18 insertions, 5 deletions
diff --git a/llvm/lib/Target/X86/X86CompressEVEX.cpp b/llvm/lib/Target/X86/X86CompressEVEX.cpp index ddbd10d..0f55c19 100644 --- a/llvm/lib/Target/X86/X86CompressEVEX.cpp +++ b/llvm/lib/Target/X86/X86CompressEVEX.cpp @@ -15,6 +15,7 @@ // c. NDD (EVEX) -> non-NDD (legacy) // d. NF_ND (EVEX) -> NF (EVEX) // e. NonNF (EVEX) -> NF (EVEX) +// f. SETZUCCm (EVEX) -> SETCCm (legacy) // // Compression a, b and c can always reduce code size, with some exceptions // such as promoted 16-bit CRC32 which is as long as the legacy version. @@ -216,14 +217,15 @@ static bool CompressEVEXImpl(MachineInstr &MI, MachineBasicBlock &MBB, // memory form: broadcast // // APX: - // MAP4: NDD + // MAP4: NDD, ZU // // For AVX512 cases, EVEX prefix is needed in order to carry this information // thus preventing the transformation to VEX encoding. bool IsND = X86II::hasNewDataDest(TSFlags); - if (TSFlags & X86II::EVEX_B && !IsND) - return false; unsigned Opc = MI.getOpcode(); + bool IsSetZUCCm = Opc == X86::SETZUCCm; + if (TSFlags & X86II::EVEX_B && !IsND && !IsSetZUCCm) + return false; // MOVBE*rr is special because it has semantic of NDD but not set EVEX_B. bool IsNDLike = IsND || Opc == X86::MOVBE32rr || Opc == X86::MOVBE64rr; bool IsRedundantNDD = IsNDLike ? IsRedundantNewDataDest(Opc) : false; @@ -339,7 +341,7 @@ bool CompressEVEXPass::runOnMachineFunction(MachineFunction &MF) { } #endif const X86Subtarget &ST = MF.getSubtarget<X86Subtarget>(); - if (!ST.hasAVX512() && !ST.hasEGPR() && !ST.hasNDD()) + if (!ST.hasAVX512() && !ST.hasEGPR() && !ST.hasNDD() && !ST.hasZU()) return false; bool Changed = false; diff --git a/llvm/test/CodeGen/X86/apx/compress-evex.mir b/llvm/test/CodeGen/X86/apx/compress-evex.mir index c0ecfac0..e0873d3 100644 --- a/llvm/test/CodeGen/X86/apx/compress-evex.mir +++ b/llvm/test/CodeGen/X86/apx/compress-evex.mir @@ -139,3 +139,11 @@ body: | $ax = XOR16rr_ND $ax, killed $di, implicit-def dead $eflags RET64 $rax ... +--- +name: setzuccm_2_setccm +body: | + bb.0.entry: + liveins: $eflags + ; CHECK: sete 7(%rsp) # EVEX TO LEGACY Compression encoding: [0x0f,0x94,0x44,0x24,0x07] + SETZUCCm $rsp, 1, $noreg, 7, $noreg, 4, implicit killed $eflags +... diff --git a/llvm/test/TableGen/x86-instr-mapping.inc b/llvm/test/TableGen/x86-instr-mapping.inc index 6d2873e..c22dd34 100644 --- a/llvm/test/TableGen/x86-instr-mapping.inc +++ b/llvm/test/TableGen/x86-instr-mapping.inc @@ -158,6 +158,7 @@ static const X86TableEntry X86CompressEVEXTable[] = { { X86::SARX32rr_EVEX, X86::SARX32rr }, { X86::SARX64rm_EVEX, X86::SARX64rm }, { X86::SARX64rr_EVEX, X86::SARX64rr }, + { X86::SETZUCCm, X86::SETCCm }, { X86::SHLX32rm_EVEX, X86::SHLX32rm }, { X86::SHLX32rr_EVEX, X86::SHLX32rr }, { X86::SHLX64rm_EVEX, X86::SHLX64rm }, diff --git a/llvm/utils/TableGen/X86InstrMappingEmitter.cpp b/llvm/utils/TableGen/X86InstrMappingEmitter.cpp index 9abb194..3926807 100644 --- a/llvm/utils/TableGen/X86InstrMappingEmitter.cpp +++ b/llvm/utils/TableGen/X86InstrMappingEmitter.cpp @@ -189,13 +189,14 @@ void X86InstrMappingEmitter::emitCompressEVEXTable( RecognizableInstrBase RI(*Inst); bool IsND = RI.OpMap == X86Local::T_MAP4 && RI.HasEVEX_B && RI.HasVEX_4V; + bool IsSETZUCCm = Name == "SETZUCCm"; // Add VEX encoded instructions to one of CompressedInsts vectors according // to it's opcode. if (RI.Encoding == X86Local::VEX) CompressedInsts[RI.Opcode].push_back(Inst); // Add relevant EVEX encoded instructions to PreCompressionInsts else if (RI.Encoding == X86Local::EVEX && !RI.HasEVEX_K && !RI.HasEVEX_L2 && - (!RI.HasEVEX_B || IsND)) + (!RI.HasEVEX_B || IsND || IsSETZUCCm)) PreCompressionInsts.push_back(Inst); } diff --git a/llvm/utils/TableGen/X86ManualInstrMapping.def b/llvm/utils/TableGen/X86ManualInstrMapping.def index 662c13e..deff210 100644 --- a/llvm/utils/TableGen/X86ManualInstrMapping.def +++ b/llvm/utils/TableGen/X86ManualInstrMapping.def @@ -333,6 +333,7 @@ ENTRY(VBROADCASTSDZ256rm, VBROADCASTSDYrm) ENTRY(VBROADCASTSDZ256rr, VBROADCASTSDYrr) ENTRY(VPBROADCASTQZ256rm, VPBROADCASTQYrm) ENTRY(VPBROADCASTQZ256rr, VPBROADCASTQYrr) +ENTRY(SETZUCCm, SETCCm) #undef ENTRY #ifndef NOCOMP_ND |
