[llvm] [X86][APX] Fold NDD+Load to non-NDD when NDD memory variant is not preferred (PR #189222)

via llvm-commits llvm-commits at lists.llvm.org
Sun Mar 29 04:03:00 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-x86

Author: Phoebe Wang (phoebewang)

<details>
<summary>Changes</summary>



---

Patch is 103.21 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/189222.diff


9 Files Affected:

- (modified) llvm/lib/Target/X86/X86InstrInfo.cpp (+18-4) 
- (modified) llvm/test/CodeGen/X86/apx/adc.ll (+10-8) 
- (modified) llvm/test/CodeGen/X86/apx/add.ll (+93-93) 
- (modified) llvm/test/CodeGen/X86/apx/and.ll (+72-72) 
- (modified) llvm/test/CodeGen/X86/apx/cmov.ll (+15-16) 
- (modified) llvm/test/CodeGen/X86/apx/imul.ll (+42-36) 
- (modified) llvm/test/CodeGen/X86/apx/or.ll (+72-72) 
- (modified) llvm/test/CodeGen/X86/apx/sub.ll (+73-81) 
- (modified) llvm/test/CodeGen/X86/apx/xor.ll (+78-78) 


``````````diff
diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp
index c862d902b218a..9021923ba203e 100644
--- a/llvm/lib/Target/X86/X86InstrInfo.cpp
+++ b/llvm/lib/Target/X86/X86InstrInfo.cpp
@@ -7538,13 +7538,12 @@ MachineInstr *X86InstrInfo::foldMemoryOperandImpl(
   //
   // Utilize the mapping NonNDD -> RMW for the NDD variant.
   unsigned NonNDOpc = Subtarget.hasNDD() ? X86::getNonNDVariant(Opc) : 0U;
-  // Disable memory folding for NDD instructions.
-  if (NonNDOpc && !Subtarget.hasNDDM())
-    return nullptr;
+  // Utilize the mapping NonNDD if NDD memory variant is not preferred.
+  bool NoNDDM = NonNDOpc && !Subtarget.hasNDDM();
 
   const X86FoldTableEntry *I =
       IsTwoAddr ? lookupTwoAddrFoldTable(NonNDOpc ? NonNDOpc : Opc)
-                : lookupFoldTable(Opc, OpNum);
+                : lookupFoldTable(NoNDDM ? NonNDOpc : Opc, OpNum);
 
   MachineInstr *NewMI = nullptr;
   if (I) {
@@ -7591,6 +7590,21 @@ MachineInstr *X86InstrInfo::foldMemoryOperandImpl(
       else
         NewMI->getOperand(0).setSubReg(X86::sub_32bit);
     }
+
+    if (NoNDDM) {
+      Register SrcReg = MI.getOperand(1).getReg();
+      if (MI.killsRegister(SrcReg, /*TRI=*/nullptr))
+        return NewMI;
+
+      const TargetRegisterClass &RC = *MF.getRegInfo().getRegClass(SrcReg);
+      Register SubReg = MI.getOperand(1).getSubReg();
+      Register NewSrc = MF.getRegInfo().createVirtualRegister(&RC);
+      BuildMI(*NewMI->getParent(), *NewMI, MI.getDebugLoc(),
+              get(TargetOpcode::COPY))
+          .addReg(NewSrc, RegState::Define, SubReg)
+          .addReg(SrcReg, getKillRegState(true), SubReg);
+      NewMI->getOperand(1).setReg(NewSrc);
+    }
     return NewMI;
   }
 
diff --git a/llvm/test/CodeGen/X86/apx/adc.ll b/llvm/test/CodeGen/X86/apx/adc.ll
index 5a38a3d413a0a..2495a5694c413 100644
--- a/llvm/test/CodeGen/X86/apx/adc.ll
+++ b/llvm/test/CodeGen/X86/apx/adc.ll
@@ -239,9 +239,10 @@ define i64 @adc64ri(i64 %a, i64 %x, i64 %y) nounwind {
 define i8 @adc8mr(i8 %a, ptr %ptr, i8 %x, i8 %y) nounwind {
 ; NDD-LABEL: adc8mr:
 ; NDD:       # %bb.0:
-; NDD-NEXT:    movzbl (%rsi), %eax # encoding: [0x0f,0xb6,0x06]
+; NDD-NEXT:    movl %edi, %eax # encoding: [0x89,0xf8]
 ; NDD-NEXT:    cmpb %dl, %cl # encoding: [0x38,0xd1]
-; NDD-NEXT:    adcb %dil, %al # EVEX TO LEGACY Compression encoding: [0x40,0x10,0xf8]
+; NDD-NEXT:    adcb (%rsi), %al # encoding: [0x12,0x06]
+; NDD-NEXT:    # kill: def $al killed $al killed $eax
 ; NDD-NEXT:    retq # encoding: [0xc3]
 ;
 ; MEM-LABEL: adc8mr:
@@ -260,9 +261,10 @@ define i8 @adc8mr(i8 %a, ptr %ptr, i8 %x, i8 %y) nounwind {
 define i16 @adc16mr(i16 %a, ptr %ptr, i16 %x, i16 %y) nounwind {
 ; NDD-LABEL: adc16mr:
 ; NDD:       # %bb.0:
-; NDD-NEXT:    movzwl (%rsi), %eax # encoding: [0x0f,0xb7,0x06]
+; NDD-NEXT:    movl %edi, %eax # encoding: [0x89,0xf8]
 ; NDD-NEXT:    cmpw %dx, %cx # encoding: [0x66,0x39,0xd1]
-; NDD-NEXT:    adcw %di, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x11,0xf8]
+; NDD-NEXT:    adcw (%rsi), %ax # encoding: [0x66,0x13,0x06]
+; NDD-NEXT:    # kill: def $ax killed $ax killed $eax
 ; NDD-NEXT:    retq # encoding: [0xc3]
 ;
 ; MEM-LABEL: adc16mr:
@@ -281,9 +283,9 @@ define i16 @adc16mr(i16 %a, ptr %ptr, i16 %x, i16 %y) nounwind {
 define i32 @adc32mr(i32 %a, ptr %ptr, i32 %x, i32 %y) nounwind {
 ; NDD-LABEL: adc32mr:
 ; NDD:       # %bb.0:
-; NDD-NEXT:    movl (%rsi), %eax # encoding: [0x8b,0x06]
+; NDD-NEXT:    movl %edi, %eax # encoding: [0x89,0xf8]
 ; NDD-NEXT:    cmpl %edx, %ecx # encoding: [0x39,0xd1]
-; NDD-NEXT:    adcl %edi, %eax # EVEX TO LEGACY Compression encoding: [0x11,0xf8]
+; NDD-NEXT:    adcl (%rsi), %eax # encoding: [0x13,0x06]
 ; NDD-NEXT:    retq # encoding: [0xc3]
 ;
 ; MEM-LABEL: adc32mr:
@@ -302,9 +304,9 @@ define i32 @adc32mr(i32 %a, ptr %ptr, i32 %x, i32 %y) nounwind {
 define i64 @adc64mr(i64 %a, ptr %ptr, i64 %x, i64 %y) nounwind {
 ; NDD-LABEL: adc64mr:
 ; NDD:       # %bb.0:
-; NDD-NEXT:    movq (%rsi), %rax # encoding: [0x48,0x8b,0x06]
+; NDD-NEXT:    movq %rdi, %rax # encoding: [0x48,0x89,0xf8]
 ; NDD-NEXT:    cmpq %rdx, %rcx # encoding: [0x48,0x39,0xd1]
-; NDD-NEXT:    adcq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x11,0xf8]
+; NDD-NEXT:    adcq (%rsi), %rax # encoding: [0x48,0x13,0x06]
 ; NDD-NEXT:    retq # encoding: [0xc3]
 ;
 ; MEM-LABEL: adc64mr:
diff --git a/llvm/test/CodeGen/X86/apx/add.ll b/llvm/test/CodeGen/X86/apx/add.ll
index ffb2535e9f17b..b56036c955024 100644
--- a/llvm/test/CodeGen/X86/apx/add.ll
+++ b/llvm/test/CodeGen/X86/apx/add.ll
@@ -69,14 +69,16 @@ entry:
 define i8 @add8rm(i8 noundef %a, ptr %ptr) {
 ; NDD-LABEL: add8rm:
 ; NDD:       # %bb.0: # %entry
-; NDD-NEXT:    movzbl (%rsi), %eax # encoding: [0x0f,0xb6,0x06]
-; NDD-NEXT:    addb %dil, %al # EVEX TO LEGACY Compression encoding: [0x40,0x00,0xf8]
+; NDD-NEXT:    movl %edi, %eax # encoding: [0x89,0xf8]
+; NDD-NEXT:    addb (%rsi), %al # encoding: [0x02,0x06]
+; NDD-NEXT:    # kill: def $al killed $al killed $eax
 ; NDD-NEXT:    retq # encoding: [0xc3]
 ;
 ; IMMONLY-LABEL: add8rm:
 ; IMMONLY:       # %bb.0: # %entry
-; IMMONLY-NEXT:    movzbl (%rsi), %eax # encoding: [0x0f,0xb6,0x06]
-; IMMONLY-NEXT:    addb %dil, %al # EVEX TO LEGACY Compression encoding: [0x40,0x00,0xf8]
+; IMMONLY-NEXT:    movl %edi, %eax # encoding: [0x89,0xf8]
+; IMMONLY-NEXT:    addb (%rsi), %al # encoding: [0x02,0x06]
+; IMMONLY-NEXT:    # kill: def $al killed $al killed $eax
 ; IMMONLY-NEXT:    retq # encoding: [0xc3]
 ;
 ; MEM-LABEL: add8rm:
@@ -86,8 +88,9 @@ define i8 @add8rm(i8 noundef %a, ptr %ptr) {
 ;
 ; NF-LABEL: add8rm:
 ; NF:       # %bb.0: # %entry
-; NF-NEXT:    movzbl (%rsi), %eax # encoding: [0x0f,0xb6,0x06]
-; NF-NEXT:    addb %dil, %al # EVEX TO LEGACY Compression encoding: [0x40,0x00,0xf8]
+; NF-NEXT:    movl %edi, %eax # encoding: [0x89,0xf8]
+; NF-NEXT:    addb (%rsi), %al # encoding: [0x02,0x06]
+; NF-NEXT:    # kill: def $al killed $al killed $eax
 ; NF-NEXT:    retq # encoding: [0xc3]
 entry:
     %b = load i8, ptr %ptr
@@ -98,14 +101,16 @@ entry:
 define i16 @add16rm(i16 noundef %a, ptr %ptr) {
 ; NDD-LABEL: add16rm:
 ; NDD:       # %bb.0: # %entry
-; NDD-NEXT:    movzwl (%rsi), %eax # encoding: [0x0f,0xb7,0x06]
-; NDD-NEXT:    addw %di, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x01,0xf8]
+; NDD-NEXT:    movl %edi, %eax # encoding: [0x89,0xf8]
+; NDD-NEXT:    addw (%rsi), %ax # encoding: [0x66,0x03,0x06]
+; NDD-NEXT:    # kill: def $ax killed $ax killed $eax
 ; NDD-NEXT:    retq # encoding: [0xc3]
 ;
 ; IMMONLY-LABEL: add16rm:
 ; IMMONLY:       # %bb.0: # %entry
-; IMMONLY-NEXT:    movzwl (%rsi), %eax # encoding: [0x0f,0xb7,0x06]
-; IMMONLY-NEXT:    addw %di, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x01,0xf8]
+; IMMONLY-NEXT:    movl %edi, %eax # encoding: [0x89,0xf8]
+; IMMONLY-NEXT:    addw (%rsi), %ax # encoding: [0x66,0x03,0x06]
+; IMMONLY-NEXT:    # kill: def $ax killed $ax killed $eax
 ; IMMONLY-NEXT:    retq # encoding: [0xc3]
 ;
 ; MEM-LABEL: add16rm:
@@ -115,8 +120,9 @@ define i16 @add16rm(i16 noundef %a, ptr %ptr) {
 ;
 ; NF-LABEL: add16rm:
 ; NF:       # %bb.0: # %entry
-; NF-NEXT:    movzwl (%rsi), %eax # encoding: [0x0f,0xb7,0x06]
-; NF-NEXT:    addw %di, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x01,0xf8]
+; NF-NEXT:    movl %edi, %eax # encoding: [0x89,0xf8]
+; NF-NEXT:    addw (%rsi), %ax # encoding: [0x66,0x03,0x06]
+; NF-NEXT:    # kill: def $ax killed $ax killed $eax
 ; NF-NEXT:    retq # encoding: [0xc3]
 entry:
     %b = load i16, ptr %ptr
@@ -127,14 +133,14 @@ entry:
 define i32 @add32rm(i32 noundef %a, ptr %ptr) {
 ; NDD-LABEL: add32rm:
 ; NDD:       # %bb.0: # %entry
-; NDD-NEXT:    movl (%rsi), %eax # encoding: [0x8b,0x06]
-; NDD-NEXT:    addl %edi, %eax # EVEX TO LEGACY Compression encoding: [0x01,0xf8]
+; NDD-NEXT:    movl %edi, %eax # encoding: [0x89,0xf8]
+; NDD-NEXT:    addl (%rsi), %eax # encoding: [0x03,0x06]
 ; NDD-NEXT:    retq # encoding: [0xc3]
 ;
 ; IMMONLY-LABEL: add32rm:
 ; IMMONLY:       # %bb.0: # %entry
-; IMMONLY-NEXT:    movl (%rsi), %eax # encoding: [0x8b,0x06]
-; IMMONLY-NEXT:    addl %edi, %eax # EVEX TO LEGACY Compression encoding: [0x01,0xf8]
+; IMMONLY-NEXT:    movl %edi, %eax # encoding: [0x89,0xf8]
+; IMMONLY-NEXT:    addl (%rsi), %eax # encoding: [0x03,0x06]
 ; IMMONLY-NEXT:    retq # encoding: [0xc3]
 ;
 ; MEM-LABEL: add32rm:
@@ -144,8 +150,8 @@ define i32 @add32rm(i32 noundef %a, ptr %ptr) {
 ;
 ; NF-LABEL: add32rm:
 ; NF:       # %bb.0: # %entry
-; NF-NEXT:    movl (%rsi), %eax # encoding: [0x8b,0x06]
-; NF-NEXT:    addl %edi, %eax # EVEX TO LEGACY Compression encoding: [0x01,0xf8]
+; NF-NEXT:    movl %edi, %eax # encoding: [0x89,0xf8]
+; NF-NEXT:    addl (%rsi), %eax # encoding: [0x03,0x06]
 ; NF-NEXT:    retq # encoding: [0xc3]
 entry:
     %b = load i32, ptr %ptr
@@ -156,14 +162,14 @@ entry:
 define i64 @add64rm(i64 noundef %a, ptr %ptr) {
 ; NDD-LABEL: add64rm:
 ; NDD:       # %bb.0: # %entry
-; NDD-NEXT:    movq (%rsi), %rax # encoding: [0x48,0x8b,0x06]
-; NDD-NEXT:    addq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x01,0xf8]
+; NDD-NEXT:    movq %rdi, %rax # encoding: [0x48,0x89,0xf8]
+; NDD-NEXT:    addq (%rsi), %rax # encoding: [0x48,0x03,0x06]
 ; NDD-NEXT:    retq # encoding: [0xc3]
 ;
 ; IMMONLY-LABEL: add64rm:
 ; IMMONLY:       # %bb.0: # %entry
-; IMMONLY-NEXT:    movq (%rsi), %rax # encoding: [0x48,0x8b,0x06]
-; IMMONLY-NEXT:    addq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x01,0xf8]
+; IMMONLY-NEXT:    movq %rdi, %rax # encoding: [0x48,0x89,0xf8]
+; IMMONLY-NEXT:    addq (%rsi), %rax # encoding: [0x48,0x03,0x06]
 ; IMMONLY-NEXT:    retq # encoding: [0xc3]
 ;
 ; MEM-LABEL: add64rm:
@@ -173,8 +179,8 @@ define i64 @add64rm(i64 noundef %a, ptr %ptr) {
 ;
 ; NF-LABEL: add64rm:
 ; NF:       # %bb.0: # %entry
-; NF-NEXT:    movq (%rsi), %rax # encoding: [0x48,0x8b,0x06]
-; NF-NEXT:    addq %rdi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x01,0xf8]
+; NF-NEXT:    movq %rdi, %rax # encoding: [0x48,0x89,0xf8]
+; NF-NEXT:    addq (%rsi), %rax # encoding: [0x48,0x03,0x06]
 ; NF-NEXT:    retq # encoding: [0xc3]
 entry:
     %b = load i64, ptr %ptr
@@ -292,14 +298,16 @@ entry:
 define i8 @add8mr(ptr %a, i8 noundef %b) {
 ; NDD-LABEL: add8mr:
 ; NDD:       # %bb.0: # %entry
-; NDD-NEXT:    movzbl (%rdi), %eax # encoding: [0x0f,0xb6,0x07]
-; NDD-NEXT:    addb %sil, %al # EVEX TO LEGACY Compression encoding: [0x40,0x00,0xf0]
+; NDD-NEXT:    movl %esi, %eax # encoding: [0x89,0xf0]
+; NDD-NEXT:    addb (%rdi), %al # encoding: [0x02,0x07]
+; NDD-NEXT:    # kill: def $al killed $al killed $eax
 ; NDD-NEXT:    retq # encoding: [0xc3]
 ;
 ; IMMONLY-LABEL: add8mr:
 ; IMMONLY:       # %bb.0: # %entry
-; IMMONLY-NEXT:    movzbl (%rdi), %eax # encoding: [0x0f,0xb6,0x07]
-; IMMONLY-NEXT:    addb %sil, %al # EVEX TO LEGACY Compression encoding: [0x40,0x00,0xf0]
+; IMMONLY-NEXT:    movl %esi, %eax # encoding: [0x89,0xf0]
+; IMMONLY-NEXT:    addb (%rdi), %al # encoding: [0x02,0x07]
+; IMMONLY-NEXT:    # kill: def $al killed $al killed $eax
 ; IMMONLY-NEXT:    retq # encoding: [0xc3]
 ;
 ; MEM-LABEL: add8mr:
@@ -309,8 +317,9 @@ define i8 @add8mr(ptr %a, i8 noundef %b) {
 ;
 ; NF-LABEL: add8mr:
 ; NF:       # %bb.0: # %entry
-; NF-NEXT:    movzbl (%rdi), %eax # encoding: [0x0f,0xb6,0x07]
-; NF-NEXT:    addb %sil, %al # EVEX TO LEGACY Compression encoding: [0x40,0x00,0xf0]
+; NF-NEXT:    movl %esi, %eax # encoding: [0x89,0xf0]
+; NF-NEXT:    addb (%rdi), %al # encoding: [0x02,0x07]
+; NF-NEXT:    # kill: def $al killed $al killed $eax
 ; NF-NEXT:    retq # encoding: [0xc3]
 entry:
   %t= load i8, ptr %a
@@ -321,14 +330,16 @@ entry:
 define i16 @add16mr(ptr %a, i16 noundef %b) {
 ; NDD-LABEL: add16mr:
 ; NDD:       # %bb.0: # %entry
-; NDD-NEXT:    movzwl (%rdi), %eax # encoding: [0x0f,0xb7,0x07]
-; NDD-NEXT:    addw %si, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x01,0xf0]
+; NDD-NEXT:    movl %esi, %eax # encoding: [0x89,0xf0]
+; NDD-NEXT:    addw (%rdi), %ax # encoding: [0x66,0x03,0x07]
+; NDD-NEXT:    # kill: def $ax killed $ax killed $eax
 ; NDD-NEXT:    retq # encoding: [0xc3]
 ;
 ; IMMONLY-LABEL: add16mr:
 ; IMMONLY:       # %bb.0: # %entry
-; IMMONLY-NEXT:    movzwl (%rdi), %eax # encoding: [0x0f,0xb7,0x07]
-; IMMONLY-NEXT:    addw %si, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x01,0xf0]
+; IMMONLY-NEXT:    movl %esi, %eax # encoding: [0x89,0xf0]
+; IMMONLY-NEXT:    addw (%rdi), %ax # encoding: [0x66,0x03,0x07]
+; IMMONLY-NEXT:    # kill: def $ax killed $ax killed $eax
 ; IMMONLY-NEXT:    retq # encoding: [0xc3]
 ;
 ; MEM-LABEL: add16mr:
@@ -338,8 +349,9 @@ define i16 @add16mr(ptr %a, i16 noundef %b) {
 ;
 ; NF-LABEL: add16mr:
 ; NF:       # %bb.0: # %entry
-; NF-NEXT:    movzwl (%rdi), %eax # encoding: [0x0f,0xb7,0x07]
-; NF-NEXT:    addw %si, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x01,0xf0]
+; NF-NEXT:    movl %esi, %eax # encoding: [0x89,0xf0]
+; NF-NEXT:    addw (%rdi), %ax # encoding: [0x66,0x03,0x07]
+; NF-NEXT:    # kill: def $ax killed $ax killed $eax
 ; NF-NEXT:    retq # encoding: [0xc3]
 entry:
   %t= load i16, ptr %a
@@ -350,14 +362,14 @@ entry:
 define i32 @add32mr(ptr %a, i32 noundef %b) {
 ; NDD-LABEL: add32mr:
 ; NDD:       # %bb.0: # %entry
-; NDD-NEXT:    movl (%rdi), %eax # encoding: [0x8b,0x07]
-; NDD-NEXT:    addl %esi, %eax # EVEX TO LEGACY Compression encoding: [0x01,0xf0]
+; NDD-NEXT:    movl %esi, %eax # encoding: [0x89,0xf0]
+; NDD-NEXT:    addl (%rdi), %eax # encoding: [0x03,0x07]
 ; NDD-NEXT:    retq # encoding: [0xc3]
 ;
 ; IMMONLY-LABEL: add32mr:
 ; IMMONLY:       # %bb.0: # %entry
-; IMMONLY-NEXT:    movl (%rdi), %eax # encoding: [0x8b,0x07]
-; IMMONLY-NEXT:    addl %esi, %eax # EVEX TO LEGACY Compression encoding: [0x01,0xf0]
+; IMMONLY-NEXT:    movl %esi, %eax # encoding: [0x89,0xf0]
+; IMMONLY-NEXT:    addl (%rdi), %eax # encoding: [0x03,0x07]
 ; IMMONLY-NEXT:    retq # encoding: [0xc3]
 ;
 ; MEM-LABEL: add32mr:
@@ -367,8 +379,8 @@ define i32 @add32mr(ptr %a, i32 noundef %b) {
 ;
 ; NF-LABEL: add32mr:
 ; NF:       # %bb.0: # %entry
-; NF-NEXT:    movl (%rdi), %eax # encoding: [0x8b,0x07]
-; NF-NEXT:    addl %esi, %eax # EVEX TO LEGACY Compression encoding: [0x01,0xf0]
+; NF-NEXT:    movl %esi, %eax # encoding: [0x89,0xf0]
+; NF-NEXT:    addl (%rdi), %eax # encoding: [0x03,0x07]
 ; NF-NEXT:    retq # encoding: [0xc3]
 entry:
   %t= load i32, ptr %a
@@ -379,14 +391,14 @@ entry:
 define i64 @add64mr(ptr %a, i64 noundef %b) {
 ; NDD-LABEL: add64mr:
 ; NDD:       # %bb.0: # %entry
-; NDD-NEXT:    movq (%rdi), %rax # encoding: [0x48,0x8b,0x07]
-; NDD-NEXT:    addq %rsi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x01,0xf0]
+; NDD-NEXT:    movq %rsi, %rax # encoding: [0x48,0x89,0xf0]
+; NDD-NEXT:    addq (%rdi), %rax # encoding: [0x48,0x03,0x07]
 ; NDD-NEXT:    retq # encoding: [0xc3]
 ;
 ; IMMONLY-LABEL: add64mr:
 ; IMMONLY:       # %bb.0: # %entry
-; IMMONLY-NEXT:    movq (%rdi), %rax # encoding: [0x48,0x8b,0x07]
-; IMMONLY-NEXT:    addq %rsi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x01,0xf0]
+; IMMONLY-NEXT:    movq %rsi, %rax # encoding: [0x48,0x89,0xf0]
+; IMMONLY-NEXT:    addq (%rdi), %rax # encoding: [0x48,0x03,0x07]
 ; IMMONLY-NEXT:    retq # encoding: [0xc3]
 ;
 ; MEM-LABEL: add64mr:
@@ -396,8 +408,8 @@ define i64 @add64mr(ptr %a, i64 noundef %b) {
 ;
 ; NF-LABEL: add64mr:
 ; NF:       # %bb.0: # %entry
-; NF-NEXT:    movq (%rdi), %rax # encoding: [0x48,0x8b,0x07]
-; NF-NEXT:    addq %rsi, %rax # EVEX TO LEGACY Compression encoding: [0x48,0x01,0xf0]
+; NF-NEXT:    movq %rsi, %rax # encoding: [0x48,0x89,0xf0]
+; NF-NEXT:    addq (%rdi), %rax # encoding: [0x48,0x03,0x07]
 ; NF-NEXT:    retq # encoding: [0xc3]
 entry:
   %t= load i64, ptr %a
@@ -718,9 +730,8 @@ entry:
 define i8 @addflag8rm(i8 noundef %a, ptr %b) {
 ; NDD-LABEL: addflag8rm:
 ; NDD:       # %bb.0: # %entry
-; NDD-NEXT:    movzbl (%rsi), %eax # encoding: [0x0f,0xb6,0x06]
-; NDD-NEXT:    addb %dil, %al # EVEX TO LEGACY Compression encoding: [0x40,0x00,0xf8]
-; NDD-NEXT:    movzbl %al, %eax # encoding: [0x0f,0xb6,0xc0]
+; NDD-NEXT:    addb (%rsi), %dil # encoding: [0x40,0x02,0x3e]
+; NDD-NEXT:    movzbl %dil, %eax # encoding: [0x40,0x0f,0xb6,0xc7]
 ; NDD-NEXT:    movl $255, %ecx # encoding: [0xb9,0xff,0x00,0x00,0x00]
 ; NDD-NEXT:    cmovbl %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x42,0xc1]
 ; NDD-NEXT:    # kill: def $al killed $al killed $eax
@@ -728,9 +739,8 @@ define i8 @addflag8rm(i8 noundef %a, ptr %b) {
 ;
 ; IMMONLY-LABEL: addflag8rm:
 ; IMMONLY:       # %bb.0: # %entry
-; IMMONLY-NEXT:    movzbl (%rsi), %eax # encoding: [0x0f,0xb6,0x06]
-; IMMONLY-NEXT:    addb %dil, %al # EVEX TO LEGACY Compression encoding: [0x40,0x00,0xf8]
-; IMMONLY-NEXT:    movzbl %al, %eax # encoding: [0x0f,0xb6,0xc0]
+; IMMONLY-NEXT:    addb (%rsi), %dil # encoding: [0x40,0x02,0x3e]
+; IMMONLY-NEXT:    movzbl %dil, %eax # encoding: [0x40,0x0f,0xb6,0xc7]
 ; IMMONLY-NEXT:    movl $255, %ecx # encoding: [0xb9,0xff,0x00,0x00,0x00]
 ; IMMONLY-NEXT:    cmovbl %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x42,0xc1]
 ; IMMONLY-NEXT:    # kill: def $al killed $al killed $eax
@@ -747,9 +757,8 @@ define i8 @addflag8rm(i8 noundef %a, ptr %b) {
 ;
 ; NF-LABEL: addflag8rm:
 ; NF:       # %bb.0: # %entry
-; NF-NEXT:    movzbl (%rsi), %eax # encoding: [0x0f,0xb6,0x06]
-; NF-NEXT:    addb %dil, %al # EVEX TO LEGACY Compression encoding: [0x40,0x00,0xf8]
-; NF-NEXT:    movzbl %al, %eax # encoding: [0x0f,0xb6,0xc0]
+; NF-NEXT:    addb (%rsi), %dil # encoding: [0x40,0x02,0x3e]
+; NF-NEXT:    movzbl %dil, %eax # encoding: [0x40,0x0f,0xb6,0xc7]
 ; NF-NEXT:    movl $255, %ecx # encoding: [0xb9,0xff,0x00,0x00,0x00]
 ; NF-NEXT:    cmovbl %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x42,0xc1]
 ; NF-NEXT:    # kill: def $al killed $al killed $eax
@@ -763,21 +772,19 @@ entry:
 define i16 @addflag16rm(i16 noundef %a, ptr %b) {
 ; NDD-LABEL: addflag16rm:
 ; NDD:       # %bb.0: # %entry
-; NDD-NEXT:    movzwl (%rsi), %eax # encoding: [0x0f,0xb7,0x06]
-; NDD-NEXT:    addw %di, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x01,0xf8]
-; NDD-NEXT:    movl $65535, %ecx # encoding: [0xb9,0xff,0xff,0x00,0x00]
+; NDD-NEXT:    addw (%rsi), %di # encoding: [0x66,0x03,0x3e]
+; NDD-NEXT:    movl $65535, %eax # encoding: [0xb8,0xff,0xff,0x00,0x00]
 ; NDD-NEXT:    # imm = 0xFFFF
-; NDD-NEXT:    cmovbl %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x42,0xc1]
+; NDD-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
 ; NDD-NEXT:    # kill: def $ax killed $ax killed $eax
 ; NDD-NEXT:    retq # encoding: [0xc3]
 ;
 ; IMMONLY-LABEL: addflag16rm:
 ; IMMONLY:       # %bb.0: # %entry
-; IMMONLY-NEXT:    movzwl (%rsi), %eax # encoding: [0x0f,0xb7,0x06]
-; IMMONLY-NEXT:    addw %di, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x01,0xf8]
-; IMMONLY-NEXT:    movl $65535, %ecx # encoding: [0xb9,0xff,0xff,0x00,0x00]
+; IMMONLY-NEXT:    addw (%rsi), %di # encoding: [0x66,0x03,0x3e]
+; IMMONLY-NEXT:    movl $65535, %eax # encoding: [0xb8,0xff,0xff,0x00,0x00]
 ; IMMONLY-NEXT:    # imm = 0xFFFF
-; IMMONLY-NEXT:    cmovbl %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x42,0xc1]
+; IMMONLY-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
 ; IMMONLY-NEXT:    # kill: def $ax killed $ax killed $eax
 ; IMMONLY-NEXT:    retq # encoding: [0xc3]
 ;
@@ -792,11 +799,10 @@ define i16 @addflag16rm(i16 noundef %a, ptr %b) {
 ;
 ; NF-LABEL: addflag16rm:
 ; NF:       # %bb.0: # %entry
-; NF-NEXT:    movzwl (%rsi), %eax # encoding: [0x0f,0xb7,0x06]
-; NF-NEXT:    addw %di, %ax # EVEX TO LEGACY Compression encoding: [0x66,0x01,0xf8]
-; NF-NEXT:    movl $65535, %ecx # encoding: [0xb9,0xff,0xff,0x00,0x00]
+; NF-NEXT:    addw (%rsi), %di # encoding: [0x66,0x03,0x3e]
+; NF-NEXT:    movl $65535, %eax # encoding: [0xb8,0xff,0xff,0x00,0x00]
 ; NF-NEXT:    # imm = 0xFFFF
-; NF-NEXT:    cmovbl %ecx, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x42,0xc1]
+; NF-NEXT:    cmovael %edi, %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x43,0xc7]
 ; NF-NEXT:    # kill: def $ax killed $ax killed $eax
 ; NF-NEXT:    retq # encoding: [0xc3]
 entry:
@@ -808,18 +814,16 @@ entry:
 define i32 @addflag32rm(i32 noundef %a, ptr %b) {
 ; NDD-LABEL: addflag32rm:
 ; NDD:       # %bb.0: # %entry
-; NDD-NEXT:    movl (%rsi), %eax # encoding: [0x8b,0x06]
-; NDD-NEXT:    addl %edi, %eax # EVEX TO LEGACY Compression encoding...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/189222


More information about the llvm-commits mailing list