-
Notifications
You must be signed in to change notification settings - Fork 15.4k
Closed
Labels
backend:AArch64backend:X86clang:codegenIR generation bugs: mangling, exceptions, etc.IR generation bugs: mangling, exceptions, etc.missed-optimizationquestionA question, not bug report. Check out https://llvm.org/docs/GettingInvolved.html instead!A question, not bug report. Check out https://llvm.org/docs/GettingInvolved.html instead!
Description
https://godbolt.org/z/TYrzds3dT
#include <atomic>
std::atomic<uint64_t> x;
uint64_t y;
void atomic() {
uint64_t unused = x.load(std::memory_order_relaxed);
}
void nonatomic() {
uint64_t unused = y;
}For atomic(), the load is generated as load atomic i64, ptr @x monotonic whereas for nonatomic() it is already optimised out. The load here has no ordering constraints, so for aarch64 (and other targets) this results in an unnecessary load operation:
atomic():
adrp x8, x
ldr xzr, [x8, :lo12:x]
ret
nonatomic():
retMetadata
Metadata
Assignees
Labels
backend:AArch64backend:X86clang:codegenIR generation bugs: mangling, exceptions, etc.IR generation bugs: mangling, exceptions, etc.missed-optimizationquestionA question, not bug report. Check out https://llvm.org/docs/GettingInvolved.html instead!A question, not bug report. Check out https://llvm.org/docs/GettingInvolved.html instead!