8000 [missed optimization] Missed removing loop of setting zero when dereference pointer (memset) · Issue #139810 · llvm/llvm-project · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
< 8000 react-app app-name="issues-react" initial-path="/llvm/llvm-project/issues/139810" style="display: block; min-height: calc(100vh - 64px);" data-attempted-ssr="true" data-ssr="true" data-lazy="false" data-alternate="false" data-data-router-enabled="false" >
[missed optimization] Missed removing loop of setting zero when dereference pointer (memset) #139810
Closed as not planned
@BreadTom

Description

@BreadTom

Godbolt and GCC Bug

void f0(unsigned char *ptr, unsigned long len){
    for(unsigned long i = 0; i < len; ++i){
        ptr[i] = 0;
    }
}

void f1(unsigned char *ptr, unsigned long len){
    for(unsigned long i = 0; i < len; ++i){
        while(ptr[i])
            ptr[i]--;
    }
}

void f2(unsigned char *ptr){
    while(ptr[0])
        ptr[0]--;
}

When flags are -O3,
f1() compares if ptr[i] is zero before setting it to zero and f0() memset it to zero.

When flags are -O3 and -march=icelake-client, f1() doesn't call memset like f0().

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0