[llvm] [PreISelIntrinsicLowering] Lower bounded memcpy/memmove to masked load/store (PR #212710)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 13 06:34:34 PDT 2026
Harishankar14 wrote:
```
.att_syntax
.file "test.cpp"
.section .rodata,"a", at progbits
.p2align 6, 0x0 # -- Begin function _Z8memcpy64PvPKvm
.LCPI0_0:
.quad 0 # 0x0
.quad 1 # 0x1
.quad 2 # 0x2
.quad 3 # 0x3
.quad 4 # 0x4
.quad 5 # 0x5
.quad 6 # 0x6
.quad 7 # 0x7
.LCPI0_1:
.quad 8 # 0x8
.quad 9 # 0x9
.quad 10 # 0xa
.quad 11 # 0xb
.quad 12 # 0xc
.quad 13 # 0xd
.quad 14 # 0xe
.quad 15 # 0xf
.LCPI0_2:
.quad 16 # 0x10
.quad 17 # 0x11
.quad 18 # 0x12
.quad 19 # 0x13
.quad 20 # 0x14
.quad 21 # 0x15
.quad 22 # 0x16
.quad 23 # 0x17
.LCPI0_3:
.quad 24 # 0x18
.quad 25 # 0x19
.quad 26 # 0x1a
.quad 27 # 0x1b
.quad 28 # 0x1c
.quad 29 # 0x1d
.quad 30 # 0x1e
.quad 31 # 0x1f
.LCPI0_4:
.quad 32 # 0x20
.quad 33 # 0x21
.quad 34 # 0x22
.quad 35 # 0x23
.quad 36 # 0x24
.quad 37 # 0x25
.quad 38 # 0x26
.quad 39 # 0x27
.LCPI0_5:
.quad 40 # 0x28
.quad 41 # 0x29
.quad 42 # 0x2a
.quad 43 # 0x2b
.quad 44 # 0x2c
.quad 45 # 0x2d
.quad 46 # 0x2e
.quad 47 # 0x2f
.LCPI0_6:
.quad 48 # 0x30
.quad 49 # 0x31
.quad 50 # 0x32
.quad 51 # 0x33
.quad 52 # 0x34
.quad 53 # 0x35
.quad 54 # 0x36
.quad 55 # 0x37
.LCPI0_7:
.quad 56 # 0x38
.quad 57 # 0x39
.quad 58 # 0x3a
.quad 59 # 0x3b
.quad 60 # 0x3c
.quad 61 # 0x3d
.quad 62 # 0x3e
.quad 63 # 0x3f
.text
.globl _Z8memcpy64PvPKvm
.prefalign 4, .Lfunc_end0, nop
.type _Z8memcpy64PvPKvm, at function
_Z8memcpy64PvPKvm: # @_Z8memcpy64PvPKvm
.cfi_startproc
# %bb.0: # %entry
testq %rdx, %rdx
je .LBB0_2
# %bb.1: # %if.end
vpbroadcastq %rdx, %zmm0
vpcmpnleuq .LCPI0_0(%rip), %zmm0, %k0
vpcmpnleuq .LCPI0_1(%rip), %zmm0, %k1
vpcmpnleuq .LCPI0_3(%rip), %zmm0, %k2
vpcmpnleuq .LCPI0_7(%rip), %zmm0, %k3
kunpckbw %k0, %k1, %k0
vpcmpnleuq .LCPI0_2(%rip), %zmm0, %k1
kunpckbw %k1, %k2, %k1
vpcmpnleuq .LCPI0_5(%rip), %zmm0, %k2
kunpckwd %k0, %k1, %k0
vpcmpnleuq .LCPI0_4(%rip), %zmm0, %k1
kunpckbw %k1, %k2, %k1
vpcmpnleuq .LCPI0_6(%rip), %zmm0, %k2
kunpckbw %k2, %k3, %k2
kunpckwd %k1, %k2, %k1
kunpckdq %k0, %k1, %k1
vmovdqu8 (%rsi), %zmm0 {%k1} {z}
vmovdqu8 %zmm0, (%rdi) {%k1}
.LBB0_2: # %return
vzeroupper
retq
.Lfunc_end0:
.size _Z8memcpy64PvPKvm, .Lfunc_end0-_Z8memcpy64PvPKvm
.cfi_endproc
# -- End function
.section .rodata,"a", at progbits
.p2align 6, 0x0 # -- Begin function _Z9memmove64PvPKvm
.LCPI1_0:
.quad 0 # 0x0
.quad 1 # 0x1
.quad 2 # 0x2
.quad 3 # 0x3
.quad 4 # 0x4
.quad 5 # 0x5
.quad 6 # 0x6
.quad 7 # 0x7
.LCPI1_1:
.quad 8 # 0x8
.quad 9 # 0x9
.quad 10 # 0xa
.quad 11 # 0xb
.quad 12 # 0xc
.quad 13 # 0xd
.quad 14 # 0xe
.quad 15 # 0xf
.LCPI1_2:
.quad 16 # 0x10
.quad 17 # 0x11
.quad 18 # 0x12
.quad 19 # 0x13
.quad 20 # 0x14
.quad 21 # 0x15
.quad 22 # 0x16
.quad 23 # 0x17
.LCPI1_3:
.quad 24 # 0x18
.quad 25 # 0x19
.quad 26 # 0x1a
.quad 27 # 0x1b
.quad 28 # 0x1c
.quad 29 # 0x1d
.quad 30 # 0x1e
.quad 31 # 0x1f
.LCPI1_4:
.quad 32 # 0x20
.quad 33 # 0x21
.quad 34 # 0x22
.quad 35 # 0x23
.quad 36 # 0x24
.quad 37 # 0x25
.quad 38 # 0x26
.quad 39 # 0x27
.LCPI1_5:
.quad 40 # 0x28
.quad 41 # 0x29
.quad 42 # 0x2a
.quad 43 # 0x2b
.quad 44 # 0x2c
.quad 45 # 0x2d
.quad 46 # 0x2e
.quad 47 # 0x2f
.LCPI1_6:
.quad 48 # 0x30
.quad 49 # 0x31
.quad 50 # 0x32
.quad 51 # 0x33
.quad 52 # 0x34
.quad 53 # 0x35
.quad 54 # 0x36
.quad 55 # 0x37
.LCPI1_7:
.quad 56 # 0x38
.quad 57 # 0x39
.quad 58 # 0x3a
.quad 59 # 0x3b
.quad 60 # 0x3c
.quad 61 # 0x3d
.quad 62 # 0x3e
.quad 63 # 0x3f
.text
.globl _Z9memmove64PvPKvm
.prefalign 4, .Lfunc_end1, nop
.type _Z9memmove64PvPKvm, at function
_Z9memmove64PvPKvm: # @_Z9memmove64PvPKvm
.cfi_startproc
# %bb.0: # %entry
testq %rdx, %rdx
je .LBB1_2
# %bb.1: # %if.end
vpbroadcastq %rdx, %zmm0
vpcmpnleuq .LCPI1_0(%rip), %zmm0, %k0
vpcmpnleuq .LCPI1_1(%rip), %zmm0, %k1
vpcmpnleuq .LCPI1_3(%rip), %zmm0, %k2
vpcmpnleuq .LCPI1_7(%rip), %zmm0, %k3
kunpckbw %k0, %k1, %k0
vpcmpnleuq .LCPI1_2(%rip), %zmm0, %k1
kunpckbw %k1, %k2, %k1
vpcmpnleuq .LCPI1_5(%rip), %zmm0, %k2
kunpckwd %k0, %k1, %k0
vpcmpnleuq .LCPI1_4(%rip), %zmm0, %k1
kunpckbw %k1, %k2, %k1
vpcmpnleuq .LCPI1_6(%rip), %zmm0, %k2
kunpckbw %k2, %k3, %k2
kunpckwd %k1, %k2, %k1
kunpckdq %k0, %k1, %k1
vmovdqu8 (%rsi), %zmm0 {%k1} {z}
vmovdqu8 %zmm0, (%rdi) {%k1}
.LBB1_2: # %return
vzeroupper
retq
.Lfunc_end1:
.size _Z9memmove64PvPKvm, .Lfunc_end1-_Z9memmove64PvPKvm
.cfi_endproc
# -- End function
.globl _Z15memcpy64_avx512PvPKvm # -- Begin function _Z15memcpy64_avx512PvPKvm
.prefalign 4, .Lfunc_end2, nop
.type _Z15memcpy64_avx512PvPKvm, at function
_Z15memcpy64_avx512PvPKvm: # @_Z15memcpy64_avx512PvPKvm
.cfi_startproc
# %bb.0: # %entry
testq %rdx, %rdx
je .LBB2_2
# %bb.1: # %if.end
movq $-1, %rax
bzhiq %rdx, %rax, %rax
kmovq %rax, %k1
vmovdqu8 (%rsi), %zmm0 {%k1} {z}
vmovdqu8 %zmm0, (%rdi) {%k1}
.LBB2_2: # %return
vzeroupper
retq
.Lfunc_end2:
.size _Z15memcpy64_avx512PvPKvm, .Lfunc_end2-_Z15memcpy64_avx512PvPKvm
.cfi_endproc
# -- End function
.ident "clang version 24.0.0git (https://github.com/Harishankar14/llvm-project.git 3fb7712079cd4c812a67e6bfc85fb973483a25e4)"
.section ".note.GNU-stack","", at progbits
.addrsig
```
@arsenm @RKSimon Looks ugly, but solving #222659 can ease things, and make it better
https://github.com/llvm/llvm-project/pull/212710
More information about the llvm-commits
mailing list