Skip to content

(Constant <OP> a) & b & ~c should compile to (Constant <OP> a) & (b & ~c) #161630

@Validark

Description

@Validark

This code: (C Godbolt Zig Godbolt, LLVM Godbolt)

const C: u64 = 1234; fn foo(a: u64, b: u64, c: u64) u64 { return (C ^ a) & b & ~c; }

Compiles to:

foo:  xor rdi, 1234  and rdi, rsi  andn rax, rdx, rdi  ret

Should be:

foo:  xor rdi, 1234  andn rax, rdx, rsi ; Can be done in parallel to xor!  and rax, rdi  ret

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions