[llvm] 9c4bae7 - [X86][CodeGen] Disable NDD2NonNDD compression for CFCMOV
Shengchen Kan via llvm-commits
llvm-commits at lists.llvm.org
Wed May 29 04:50:54 PDT 2024
Author: Shengchen Kan
Date: 2024-05-29T19:50:08+08:00
New Revision: 9c4bae7c7c5be754f98bc495d51dd122609cd649
URL: https://github.com/llvm/llvm-project/commit/9c4bae7c7c5be754f98bc495d51dd122609cd649
DIFF: https://github.com/llvm/llvm-project/commit/9c4bae7c7c5be754f98bc495d51dd122609cd649.diff
LOG: [X86][CodeGen] Disable NDD2NonNDD compression for CFCMOV
Added:
Modified:
llvm/lib/Target/X86/X86CompressEVEX.cpp
llvm/test/CodeGen/X86/apx/compress-evex.mir
llvm/utils/TableGen/X86ManualCompressEVEXTables.def
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86CompressEVEX.cpp b/llvm/lib/Target/X86/X86CompressEVEX.cpp
index cadfda93d4b19..11b2155e3f985 100644
--- a/llvm/lib/Target/X86/X86CompressEVEX.cpp
+++ b/llvm/lib/Target/X86/X86CompressEVEX.cpp
@@ -181,7 +181,8 @@ static bool isRedundantNewDataDest(MachineInstr &MI, const X86Subtarget &ST) {
const MCInstrDesc &Desc = MI.getDesc();
Register Reg0 = MI.getOperand(0).getReg();
const MachineOperand &Op1 = MI.getOperand(1);
- if (!Op1.isReg() || X86::getFirstAddrOperandIdx(MI) == 1)
+ if (!Op1.isReg() || X86::getFirstAddrOperandIdx(MI) == 1 ||
+ X86::isCFCMOVCC(MI.getOpcode()))
return false;
Register Reg1 = Op1.getReg();
if (Reg1 == Reg0)
diff --git a/llvm/test/CodeGen/X86/apx/compress-evex.mir b/llvm/test/CodeGen/X86/apx/compress-evex.mir
index 626904a7a692c..5a59ab0f8a9d0 100644
--- a/llvm/test/CodeGen/X86/apx/compress-evex.mir
+++ b/llvm/test/CodeGen/X86/apx/compress-evex.mir
@@ -108,3 +108,22 @@ body: |
$rax = ADC64rr_ND $r16, $rdi, implicit-def dead $eflags, implicit $eflags
RET64 $rax
...
+---
+name: cfcmov_no_convert
+body: |
+ bb.0.entry:
+ liveins: $eflags, $rax, $rbx
+ ; CHECK: cfcmovew %bx, %ax, %ax # encoding: [0x62,0xf4,0x7d,0x1c,0x44,0xc3]
+ ; CHECK: cfcmovsw 24(%rax), %bx, %bx # encoding: [0x62,0xf4,0x65,0x1c,0x48,0x58,0x18]
+ ; CHECK: cfcmovel %ebx, %eax, %eax # encoding: [0x62,0xf4,0x7c,0x1c,0x44,0xc3]
+ ; CHECK: cfcmovsl 24(%rax), %ebx, %ebx # encoding: [0x62,0xf4,0x64,0x1c,0x48,0x58,0x18]
+ ; CHECK: cfcmoveq %rbx, %rax, %rax # encoding: [0x62,0xf4,0xfc,0x1c,0x44,0xc3]
+ ; CHECK: cfcmovsq 24(%rax), %rbx, %rbx # encoding: [0x62,0xf4,0xe4,0x1c,0x48,0x58,0x18]
+ $ax = CFCMOV16rr_ND $ax, $bx, 4, implicit $eflags
+ $bx = CFCMOV16rm_ND $bx, $rax, 1, $noreg, 24, $noreg, 8, implicit $eflags
+ $eax = CFCMOV32rr_ND $eax, $ebx, 4, implicit $eflags
+ $ebx = CFCMOV32rm_ND $ebx, $rax, 1, $noreg, 24, $noreg, 8, implicit $eflags
+ $rax = CFCMOV64rr_ND $rax, $rbx, 4, implicit $eflags
+ $rbx = CFCMOV64rm_ND $rbx, $rax, 1, $noreg, 24, $noreg, 8, implicit $eflags
+ RET64 $rax
+...
diff --git a/llvm/utils/TableGen/X86ManualCompressEVEXTables.def b/llvm/utils/TableGen/X86ManualCompressEVEXTables.def
index 665a394f57a6a..cab601bf8131f 100644
--- a/llvm/utils/TableGen/X86ManualCompressEVEXTables.def
+++ b/llvm/utils/TableGen/X86ManualCompressEVEXTables.def
@@ -48,6 +48,14 @@ NOCOMP(VPSRAQZ256ri)
NOCOMP(VPSRAQZ256rm)
NOCOMP(VPSRAQZ256rr)
NOCOMP(VSCALEFPSZ256rm)
+// When condition evaluates to false, the destination register is zeroed for
+// nonNDD CFCMOV but not for NDD CFCMOV.
+NOCOMP(CFCMOV16rm_ND)
+NOCOMP(CFCMOV16rr_ND)
+NOCOMP(CFCMOV32rm_ND)
+NOCOMP(CFCMOV32rr_ND)
+NOCOMP(CFCMOV64rm_ND)
+NOCOMP(CFCMOV64rr_ND)
#undef NOCOMP
#ifndef ENTRY
More information about the llvm-commits
mailing list