[llvm] [X86][APX] Reset SubReg of NewMI operand1 (PR #191765)

via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 13 00:07:07 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-x86

Author: Phoebe Wang (phoebewang)

<details>
<summary>Changes</summary>

We have made sure dst operand never has a SubReg.

---
Full diff: https://github.com/llvm/llvm-project/pull/191765.diff


2 Files Affected:

- (modified) llvm/lib/Target/X86/X86InstrInfo.cpp (+1) 
- (modified) llvm/test/CodeGen/X86/apx/add.ll (+287) 


``````````diff
diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp
index f4c3da1cd63d8..e477c27e3848c 100644
--- a/llvm/lib/Target/X86/X86InstrInfo.cpp
+++ b/llvm/lib/Target/X86/X86InstrInfo.cpp
@@ -7629,6 +7629,7 @@ MachineInstr *X86InstrInfo::foldMemoryOperandImpl(
                    .addDef(NewSrc)
                    .addReg(SrcReg, {}, SrcSub);
       NewMI->getOperand(1).setReg(NewSrc);
+      NewMI->getOperand(1).setSubReg(0);
     }
     return NewMI;
   }
diff --git a/llvm/test/CodeGen/X86/apx/add.ll b/llvm/test/CodeGen/X86/apx/add.ll
index b56036c955024..0cbbbdfbb8715 100644
--- a/llvm/test/CodeGen/X86/apx/add.ll
+++ b/llvm/test/CodeGen/X86/apx/add.ll
@@ -1248,3 +1248,290 @@ entry:
   store i64 %add, ptr %a
   ret void
 }
+
+define i32 @two_address_no_subreg(i32 %arg0, ptr %arg1, i1 %arg2) nounwind {
+; NDD-LABEL: two_address_no_subreg:
+; NDD:       # %bb.0: # %entry
+; NDD-NEXT:    pushq %rbp # encoding: [0x55]
+; NDD-NEXT:    pushq %r15 # encoding: [0x41,0x57]
+; NDD-NEXT:    pushq %r14 # encoding: [0x41,0x56]
+; NDD-NEXT:    pushq %r13 # encoding: [0x41,0x55]
+; NDD-NEXT:    pushq %r12 # encoding: [0x41,0x54]
+; NDD-NEXT:    pushq %rbx # encoding: [0x53]
+; NDD-NEXT:    pushq %rax # encoding: [0x50]
+; NDD-NEXT:    movl %edx, %ebp # encoding: [0x89,0xd5]
+; NDD-NEXT:    movq %rsi, %r14 # encoding: [0x49,0x89,0xf6]
+; NDD-NEXT:    movl %edi, %ebx # encoding: [0x89,0xfb]
+; NDD-NEXT:    movslq %edi, %rax # encoding: [0x48,0x63,0xc7]
+; NDD-NEXT:    imulq $715827883, %rax, %r13 # encoding: [0x4c,0x69,0xe8,0xab,0xaa,0xaa,0x2a]
+; NDD-NEXT:    # imm = 0x2AAAAAAB
+; NDD-NEXT:    shrq $63, %r13, %rax # encoding: [0x62,0xd4,0xfc,0x18,0xc1,0xed,0x3f]
+; NDD-NEXT:    movq %rax, (%rsp) # 8-byte Spill
+; NDD-NEXT:    # encoding: [0x48,0x89,0x04,0x24]
+; NDD-NEXT:    shrq $32, %r13 # EVEX TO LEGACY Compression encoding: [0x49,0xc1,0xed,0x20]
+; NDD-NEXT:    xorl %r15d, %r15d # encoding: [0x45,0x31,0xff]
+; NDD-NEXT:    movq %rsi, %rdi # encoding: [0x48,0x89,0xf7]
+; NDD-NEXT:    callq *%r15 # encoding: [0x41,0xff,0xd7]
+; NDD-NEXT:    movq %r14, %rdi # encoding: [0x4c,0x89,0xf7]
+; NDD-NEXT:    callq *%r15 # encoding: [0x41,0xff,0xd7]
+; NDD-NEXT:    movl $1, %r12d # encoding: [0x41,0xbc,0x01,0x00,0x00,0x00]
+; NDD-NEXT:    testb $1, %bpl # encoding: [0x40,0xf6,0xc5,0x01]
+; NDD-NEXT:    jne .LBB50_2 # encoding: [0x75,A]
+; NDD-NEXT:    # fixup A - offset: 1, value: .LBB50_2, kind: FK_PCRel_1
+; NDD-NEXT:  # %bb.1: # %bb2
+; NDD-NEXT:    xorl %r12d, %r12d # encoding: [0x45,0x31,0xe4]
+; NDD-NEXT:  .LBB50_2: # %bb1
+; NDD-NEXT:    movl %r13d, %esi # encoding: [0x44,0x89,0xee]
+; NDD-NEXT:    addl (%rsp), %esi # 4-byte Folded Reload
+; NDD-NEXT:    # encoding: [0x03,0x34,0x24]
+; NDD-NEXT:    imull %ebx, %ebx, %r13d # encoding: [0x62,0xf4,0x14,0x18,0xaf,0xdb]
+; NDD-NEXT:    testb $1, %bpl # encoding: [0x40,0xf6,0xc5,0x01]
+; NDD-NEXT:    jne .LBB50_4 # encoding: [0x75,A]
+; NDD-NEXT:    # fixup A - offset: 1, value: .LBB50_4, kind: FK_PCRel_1
+; NDD-NEXT:  # %bb.3: # %bb4
+; NDD-NEXT:    xorl %ebp, %ebp # encoding: [0x31,0xed]
+; NDD-NEXT:    movq %r14, %rdi # encoding: [0x4c,0x89,0xf7]
+; NDD-NEXT:    movl %esi, %r14d # encoding: [0x41,0x89,0xf6]
+; NDD-NEXT:    callq *%rbp # encoding: [0xff,0xd5]
+; NDD-NEXT:    incl %r12d, %r15d # encoding: [0x62,0xd4,0x04,0x18,0xff,0xc4]
+; NDD-NEXT:    xorl %edi, %edi # encoding: [0x31,0xff]
+; NDD-NEXT:    callq *%rbp # encoding: [0xff,0xd5]
+; NDD-NEXT:    movl %r14d, %esi # encoding: [0x44,0x89,0xf6]
+; NDD-NEXT:  .LBB50_4: # %bb3
+; NDD-NEXT:    orl %r13d, %esi # EVEX TO LEGACY Compression encoding: [0x44,0x09,0xee]
+; NDD-NEXT:    orl %r15d, %esi # EVEX TO LEGACY Compression encoding: [0x44,0x09,0xfe]
+; NDD-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
+; NDD-NEXT:    movl %ebx, %edi # encoding: [0x89,0xdf]
+; NDD-NEXT:    xorl %edx, %edx # encoding: [0x31,0xd2]
+; NDD-NEXT:    xorl %ecx, %ecx # encoding: [0x31,0xc9]
+; NDD-NEXT:    callq *%rax # encoding: [0xff,0xd0]
+; NDD-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
+; NDD-NEXT:    addq $8, %rsp # encoding: [0x48,0x83,0xc4,0x08]
+; NDD-NEXT:    popq %rbx # encoding: [0x5b]
+; NDD-NEXT:    popq %r12 # encoding: [0x41,0x5c]
+; NDD-NEXT:    popq %r13 # encoding: [0x41,0x5d]
+; NDD-NEXT:    popq %r14 # encoding: [0x41,0x5e]
+; NDD-NEXT:    popq %r15 # encoding: [0x41,0x5f]
+; NDD-NEXT:    popq %rbp # encoding: [0x5d]
+; NDD-NEXT:    retq # encoding: [0xc3]
+;
+; IMMONLY-LABEL: two_address_no_subreg:
+; IMMONLY:       # %bb.0: # %entry
+; IMMONLY-NEXT:    pushq %rbp # encoding: [0x55]
+; IMMONLY-NEXT:    pushq %r15 # encoding: [0x41,0x57]
+; IMMONLY-NEXT:    pushq %r14 # encoding: [0x41,0x56]
+; IMMONLY-NEXT:    pushq %r13 # encoding: [0x41,0x55]
+; IMMONLY-NEXT:    pushq %r12 # encoding: [0x41,0x54]
+; IMMONLY-NEXT:    pushq %rbx # encoding: [0x53]
+; IMMONLY-NEXT:    pushq %rax # encoding: [0x50]
+; IMMONLY-NEXT:    movl %edx, %ebp # encoding: [0x89,0xd5]
+; IMMONLY-NEXT:    movq %rsi, %r14 # encoding: [0x49,0x89,0xf6]
+; IMMONLY-NEXT:    movl %edi, %ebx # encoding: [0x89,0xfb]
+; IMMONLY-NEXT:    movslq %edi, %rax # encoding: [0x48,0x63,0xc7]
+; IMMONLY-NEXT:    imulq $715827883, %rax, %r13 # encoding: [0x4c,0x69,0xe8,0xab,0xaa,0xaa,0x2a]
+; IMMONLY-NEXT:    # imm = 0x2AAAAAAB
+; IMMONLY-NEXT:    shrq $63, %r13, %rax # encoding: [0x62,0xd4,0xfc,0x18,0xc1,0xed,0x3f]
+; IMMONLY-NEXT:    movq %rax, (%rsp) # 8-byte Spill
+; IMMONLY-NEXT:    # encoding: [0x48,0x89,0x04,0x24]
+; IMMONLY-NEXT:    shrq $32, %r13 # EVEX TO LEGACY Compression encoding: [0x49,0xc1,0xed,0x20]
+; IMMONLY-NEXT:    xorl %r15d, %r15d # encoding: [0x45,0x31,0xff]
+; IMMONLY-NEXT:    movq %rsi, %rdi # encoding: [0x48,0x89,0xf7]
+; IMMONLY-NEXT:    callq *%r15 # encoding: [0x41,0xff,0xd7]
+; IMMONLY-NEXT:    movq %r14, %rdi # encoding: [0x4c,0x89,0xf7]
+; IMMONLY-NEXT:    callq *%r15 # encoding: [0x41,0xff,0xd7]
+; IMMONLY-NEXT:    movl $1, %r12d # encoding: [0x41,0xbc,0x01,0x00,0x00,0x00]
+; IMMONLY-NEXT:    testb $1, %bpl # encoding: [0x40,0xf6,0xc5,0x01]
+; IMMONLY-NEXT:    jne .LBB50_2 # encoding: [0x75,A]
+; IMMONLY-NEXT:    # fixup A - offset: 1, value: .LBB50_2, kind: FK_PCRel_1
+; IMMONLY-NEXT:  # %bb.1: # %bb2
+; IMMONLY-NEXT:    xorl %r12d, %r12d # encoding: [0x45,0x31,0xe4]
+; IMMONLY-NEXT:  .LBB50_2: # %bb1
+; IMMONLY-NEXT:    movl %r13d, %esi # encoding: [0x44,0x89,0xee]
+; IMMONLY-NEXT:    addl (%rsp), %esi # 4-byte Folded Reload
+; IMMONLY-NEXT:    # encoding: [0x03,0x34,0x24]
+; IMMONLY-NEXT:    imull %ebx, %ebx, %r13d # encoding: [0x62,0xf4,0x14,0x18,0xaf,0xdb]
+; IMMONLY-NEXT:    testb $1, %bpl # encoding: [0x40,0xf6,0xc5,0x01]
+; IMMONLY-NEXT:    jne .LBB50_4 # encoding: [0x75,A]
+; IMMONLY-NEXT:    # fixup A - offset: 1, value: .LBB50_4, kind: FK_PCRel_1
+; IMMONLY-NEXT:  # %bb.3: # %bb4
+; IMMONLY-NEXT:    xorl %ebp, %ebp # encoding: [0x31,0xed]
+; IMMONLY-NEXT:    movq %r14, %rdi # encoding: [0x4c,0x89,0xf7]
+; IMMONLY-NEXT:    movl %esi, %r14d # encoding: [0x41,0x89,0xf6]
+; IMMONLY-NEXT:    callq *%rbp # encoding: [0xff,0xd5]
+; IMMONLY-NEXT:    incl %r12d, %r15d # encoding: [0x62,0xd4,0x04,0x18,0xff,0xc4]
+; IMMONLY-NEXT:    xorl %edi, %edi # encoding: [0x31,0xff]
+; IMMONLY-NEXT:    callq *%rbp # encoding: [0xff,0xd5]
+; IMMONLY-NEXT:    movl %r14d, %esi # encoding: [0x44,0x89,0xf6]
+; IMMONLY-NEXT:  .LBB50_4: # %bb3
+; IMMONLY-NEXT:    orl %r13d, %esi # EVEX TO LEGACY Compression encoding: [0x44,0x09,0xee]
+; IMMONLY-NEXT:    orl %r15d, %esi # EVEX TO LEGACY Compression encoding: [0x44,0x09,0xfe]
+; IMMONLY-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
+; IMMONLY-NEXT:    movl %ebx, %edi # encoding: [0x89,0xdf]
+; IMMONLY-NEXT:    xorl %edx, %edx # encoding: [0x31,0xd2]
+; IMMONLY-NEXT:    xorl %ecx, %ecx # encoding: [0x31,0xc9]
+; IMMONLY-NEXT:    callq *%rax # encoding: [0xff,0xd0]
+; IMMONLY-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
+; IMMONLY-NEXT:    addq $8, %rsp # encoding: [0x48,0x83,0xc4,0x08]
+; IMMONLY-NEXT:    popq %rbx # encoding: [0x5b]
+; IMMONLY-NEXT:    popq %r12 # encoding: [0x41,0x5c]
+; IMMONLY-NEXT:    popq %r13 # encoding: [0x41,0x5d]
+; IMMONLY-NEXT:    popq %r14 # encoding: [0x41,0x5e]
+; IMMONLY-NEXT:    popq %r15 # encoding: [0x41,0x5f]
+; IMMONLY-NEXT:    popq %rbp # encoding: [0x5d]
+; IMMONLY-NEXT:    retq # encoding: [0xc3]
+;
+; MEM-LABEL: two_address_no_subreg:
+; MEM:       # %bb.0: # %entry
+; MEM-NEXT:    pushq %rbp # encoding: [0x55]
+; MEM-NEXT:    pushq %r15 # encoding: [0x41,0x57]
+; MEM-NEXT:    pushq %r14 # encoding: [0x41,0x56]
+; MEM-NEXT:    pushq %r13 # encoding: [0x41,0x55]
+; MEM-NEXT:    pushq %r12 # encoding: [0x41,0x54]
+; MEM-NEXT:    pushq %rbx # encoding: [0x53]
+; MEM-NEXT:    pushq %rax # encoding: [0x50]
+; MEM-NEXT:    movl %edx, %ebp # encoding: [0x89,0xd5]
+; MEM-NEXT:    movq %rsi, %r14 # encoding: [0x49,0x89,0xf6]
+; MEM-NEXT:    movl %edi, %ebx # encoding: [0x89,0xfb]
+; MEM-NEXT:    movslq %edi, %rax # encoding: [0x48,0x63,0xc7]
+; MEM-NEXT:    imulq $715827883, %rax, %r13 # encoding: [0x4c,0x69,0xe8,0xab,0xaa,0xaa,0x2a]
+; MEM-NEXT:    # imm = 0x2AAAAAAB
+; MEM-NEXT:    shrq $63, %r13, %rax # encoding: [0x62,0xd4,0xfc,0x18,0xc1,0xed,0x3f]
+; MEM-NEXT:    movq %rax, (%rsp) # 8-byte Spill
+; MEM-NEXT:    # encoding: [0x48,0x89,0x04,0x24]
+; MEM-NEXT:    shrq $32, %r13 # EVEX TO LEGACY Compression encoding: [0x49,0xc1,0xed,0x20]
+; MEM-NEXT:    xorl %r15d, %r15d # encoding: [0x45,0x31,0xff]
+; MEM-NEXT:    movq %rsi, %rdi # encoding: [0x48,0x89,0xf7]
+; MEM-NEXT:    callq *%r15 # encoding: [0x41,0xff,0xd7]
+; MEM-NEXT:    movq %r14, %rdi # encoding: [0x4c,0x89,0xf7]
+; MEM-NEXT:    callq *%r15 # encoding: [0x41,0xff,0xd7]
+; MEM-NEXT:    movl $1, %r12d # encoding: [0x41,0xbc,0x01,0x00,0x00,0x00]
+; MEM-NEXT:    testb $1, %bpl # encoding: [0x40,0xf6,0xc5,0x01]
+; MEM-NEXT:    jne .LBB50_2 # encoding: [0x75,A]
+; MEM-NEXT:    # fixup A - offset: 1, value: .LBB50_2, kind: FK_PCRel_1
+; MEM-NEXT:  # %bb.1: # %bb2
+; MEM-NEXT:    xorl %r12d, %r12d # encoding: [0x45,0x31,0xe4]
+; MEM-NEXT:  .LBB50_2: # %bb1
+; MEM-NEXT:    addl (%rsp), %r13d, %esi # 4-byte Folded Reload
+; MEM-NEXT:    # encoding: [0x62,0x74,0x4c,0x18,0x03,0x2c,0x24]
+; MEM-NEXT:    imull %ebx, %ebx, %r13d # encoding: [0x62,0xf4,0x14,0x18,0xaf,0xdb]
+; MEM-NEXT:    testb $1, %bpl # encoding: [0x40,0xf6,0xc5,0x01]
+; MEM-NEXT:    jne .LBB50_4 # encoding: [0x75,A]
+; MEM-NEXT:    # fixup A - offset: 1, value: .LBB50_4, kind: FK_PCRel_1
+; MEM-NEXT:  # %bb.3: # %bb4
+; MEM-NEXT:    xorl %ebp, %ebp # encoding: [0x31,0xed]
+; MEM-NEXT:    movq %r14, %rdi # encoding: [0x4c,0x89,0xf7]
+; MEM-NEXT:    movl %esi, %r14d # encoding: [0x41,0x89,0xf6]
+; MEM-NEXT:    callq *%rbp # encoding: [0xff,0xd5]
+; MEM-NEXT:    incl %r12d, %r15d # encoding: [0x62,0xd4,0x04,0x18,0xff,0xc4]
+; MEM-NEXT:    xorl %edi, %edi # encoding: [0x31,0xff]
+; MEM-NEXT:    callq *%rbp # encoding: [0xff,0xd5]
+; MEM-NEXT:    movl %r14d, %esi # encoding: [0x44,0x89,0xf6]
+; MEM-NEXT:  .LBB50_4: # %bb3
+; MEM-NEXT:    orl %r13d, %esi # EVEX TO LEGACY Compression encoding: [0x44,0x09,0xee]
+; MEM-NEXT:    orl %r15d, %esi # EVEX TO LEGACY Compression encoding: [0x44,0x09,0xfe]
+; MEM-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
+; MEM-NEXT:    movl %ebx, %edi # encoding: [0x89,0xdf]
+; MEM-NEXT:    xorl %edx, %edx # encoding: [0x31,0xd2]
+; MEM-NEXT:    xorl %ecx, %ecx # encoding: [0x31,0xc9]
+; MEM-NEXT:    callq *%rax # encoding: [0xff,0xd0]
+; MEM-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
+; MEM-NEXT:    addq $8, %rsp # encoding: [0x48,0x83,0xc4,0x08]
+; MEM-NEXT:    popq %rbx # encoding: [0x5b]
+; MEM-NEXT:    popq %r12 # encoding: [0x41,0x5c]
+; MEM-NEXT:    popq %r13 # encoding: [0x41,0x5d]
+; MEM-NEXT:    popq %r14 # encoding: [0x41,0x5e]
+; MEM-NEXT:    popq %r15 # encoding: [0x41,0x5f]
+; MEM-NEXT:    popq %rbp # encoding: [0x5d]
+; MEM-NEXT:    retq # encoding: [0xc3]
+;
+; NF-LABEL: two_address_no_subreg:
+; NF:       # %bb.0: # %entry
+; NF-NEXT:    pushq %rbp # encoding: [0x55]
+; NF-NEXT:    pushq %r15 # encoding: [0x41,0x57]
+; NF-NEXT:    pushq %r14 # encoding: [0x41,0x56]
+; NF-NEXT:    pushq %r13 # encoding: [0x41,0x55]
+; NF-NEXT:    pushq %r12 # encoding: [0x41,0x54]
+; NF-NEXT:    pushq %rbx # encoding: [0x53]
+; NF-NEXT:    pushq %rax # encoding: [0x50]
+; NF-NEXT:    movl %edx, %ebp # encoding: [0x89,0xd5]
+; NF-NEXT:    movq %rsi, %r14 # encoding: [0x49,0x89,0xf6]
+; NF-NEXT:    movl %edi, %ebx # encoding: [0x89,0xfb]
+; NF-NEXT:    movslq %edi, %rax # encoding: [0x48,0x63,0xc7]
+; NF-NEXT:    imulq $715827883, %rax, %r13 # encoding: [0x4c,0x69,0xe8,0xab,0xaa,0xaa,0x2a]
+; NF-NEXT:    # imm = 0x2AAAAAAB
+; NF-NEXT:    {nf} shrq $63, %r13, %rax # EVEX TO EVEX Compression encoding: [0x62,0xd4,0xfc,0x1c,0xc1,0xed,0x3f]
+; NF-NEXT:    movq %rax, (%rsp) # 8-byte Spill
+; NF-NEXT:    # encoding: [0x48,0x89,0x04,0x24]
+; NF-NEXT:    shrq $32, %r13 # EVEX TO LEGACY Compression encoding: [0x49,0xc1,0xed,0x20]
+; NF-NEXT:    xorl %r15d, %r15d # encoding: [0x45,0x31,0xff]
+; NF-NEXT:    movq %rsi, %rdi # encoding: [0x48,0x89,0xf7]
+; NF-NEXT:    callq *%r15 # encoding: [0x41,0xff,0xd7]
+; NF-NEXT:    movq %r14, %rdi # encoding: [0x4c,0x89,0xf7]
+; NF-NEXT:    callq *%r15 # encoding: [0x41,0xff,0xd7]
+; NF-NEXT:    movl $1, %r12d # encoding: [0x41,0xbc,0x01,0x00,0x00,0x00]
+; NF-NEXT:    testb $1, %bpl # encoding: [0x40,0xf6,0xc5,0x01]
+; NF-NEXT:    jne .LBB50_2 # encoding: [0x75,A]
+; NF-NEXT:    # fixup A - offset: 1, value: .LBB50_2, kind: FK_PCRel_1
+; NF-NEXT:  # %bb.1: # %bb2
+; NF-NEXT:    xorl %r12d, %r12d # encoding: [0x45,0x31,0xe4]
+; NF-NEXT:  .LBB50_2: # %bb1
+; NF-NEXT:    movl %r13d, %esi # encoding: [0x44,0x89,0xee]
+; NF-NEXT:    addl (%rsp), %esi # 4-byte Folded Reload
+; NF-NEXT:    # encoding: [0x03,0x34,0x24]
+; NF-NEXT:    {nf} imull %ebx, %ebx, %r13d # EVEX TO EVEX Compression encoding: [0x62,0xf4,0x14,0x1c,0xaf,0xdb]
+; NF-NEXT:    testb $1, %bpl # encoding: [0x40,0xf6,0xc5,0x01]
+; NF-NEXT:    jne .LBB50_4 # encoding: [0x75,A]
+; NF-NEXT:    # fixup A - offset: 1, value: .LBB50_4, kind: FK_PCRel_1
+; NF-NEXT:  # %bb.3: # %bb4
+; NF-NEXT:    xorl %ebp, %ebp # encoding: [0x31,0xed]
+; NF-NEXT:    movq %r14, %rdi # encoding: [0x4c,0x89,0xf7]
+; NF-NEXT:    movl %esi, %r14d # encoding: [0x41,0x89,0xf6]
+; NF-NEXT:    callq *%rbp # encoding: [0xff,0xd5]
+; NF-NEXT:    {nf} incl %r12d, %r15d # EVEX TO EVEX Compression encoding: [0x62,0xd4,0x04,0x1c,0xff,0xc4]
+; NF-NEXT:    xorl %edi, %edi # encoding: [0x31,0xff]
+; NF-NEXT:    callq *%rbp # encoding: [0xff,0xd5]
+; NF-NEXT:    movl %r14d, %esi # encoding: [0x44,0x89,0xf6]
+; NF-NEXT:  .LBB50_4: # %bb3
+; NF-NEXT:    orl %r13d, %esi # EVEX TO LEGACY Compression encoding: [0x44,0x09,0xee]
+; NF-NEXT:    orl %r15d, %esi # EVEX TO LEGACY Compression encoding: [0x44,0x09,0xfe]
+; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
+; NF-NEXT:    movl %ebx, %edi # encoding: [0x89,0xdf]
+; NF-NEXT:    xorl %edx, %edx # encoding: [0x31,0xd2]
+; NF-NEXT:    xorl %ecx, %ecx # encoding: [0x31,0xc9]
+; NF-NEXT:    callq *%rax # encoding: [0xff,0xd0]
+; NF-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]
+; NF-NEXT:    addq $8, %rsp # encoding: [0x48,0x83,0xc4,0x08]
+; NF-NEXT:    popq %rbx # encoding: [0x5b]
+; NF-NEXT:    popq %r12 # encoding: [0x41,0x5c]
+; NF-NEXT:    popq %r13 # encoding: [0x41,0x5d]
+; NF-NEXT:    popq %r14 # encoding: [0x41,0x5e]
+; NF-NEXT:    popq %r15 # encoding: [0x41,0x5f]
+; NF-NEXT:    popq %rbp # encoding: [0x5d]
+; NF-NEXT:    retq # encoding: [0xc3]
+entry:
+  %v0 = sdiv i32 %arg0, 6
+  %v1 = tail call i32 null(ptr %arg1)
+  %v2 = tail call i32 null(ptr %arg1)
+  br i1 %arg2, label %bb1, label %bb2
+
+bb2:                                              ; preds = %entry
+  br label %bb1
+
+bb1:                                              ; preds = %bb2, %entry
+  %v3 = phi i32 [ 0, %bb2 ], [ 1, %entry ]
+  %v4 = mul i32 %arg0, %arg0
+  br i1 %arg2, label %bb3, label %bb4
+
+bb4:                                              ; preds = %bb1
+  %v5 = tail call i32 null(ptr %arg1)
+  %v6 = add i32 %v3, 1
+  %v7 = tail call i32 null(ptr null)
+  br label %bb3
+
+bb3:                                              ; preds = %bb4, %bb1
+  %v8 = phi i32 [ %v6, %bb4 ], [ 0, %bb1 ]
+  %v9 = or i32 %v0, %v4
+  %v10 = or i32 %v9, %v8
+  tail call void null(i32 %arg0, i32 %v10, i32 0, i32 0)
+  ret i32 0
+}

``````````

</details>


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


More information about the llvm-commits mailing list