mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-07 16:42:07 +00:00
add a note
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131455 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
71753050b1
commit
5d4718b1c7
@ -2040,3 +2040,29 @@ _clamp2: ## @clamp2
|
||||
The move of 0 could be scheduled above the test to make it is xor reg,reg.
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
GCC PR48986. We currently compile this:
|
||||
|
||||
void bar(void);
|
||||
void yyy(int* p) {
|
||||
if (__sync_fetch_and_add(p, -1) == 1)
|
||||
bar();
|
||||
}
|
||||
|
||||
into:
|
||||
movl $-1, %eax
|
||||
lock
|
||||
xaddl %eax, (%rdi)
|
||||
cmpl $1, %eax
|
||||
je LBB0_2
|
||||
|
||||
Instead we could generate:
|
||||
|
||||
lock
|
||||
dec %rdi
|
||||
je LBB0_2
|
||||
|
||||
The trick is to match "fetch_and_add(X, -C) == C".
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user