mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
move PR1160 here.
llvm-svn: 42347
This commit is contained in:
parent
5f9e291240
commit
86e73ac224
@ -1208,3 +1208,34 @@ __Z11no_overflowjj:
|
||||
|
||||
Re-materialize MOV32r0 etc. with xor instead of changing them to moves if the
|
||||
condition register is dead. xor reg reg is shorter than mov reg, #0.
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
We aren't matching RMW instructions aggressively
|
||||
enough. Here's a reduced testcase (more in PR1160):
|
||||
|
||||
define void @test(i32* %huge_ptr, i32* %target_ptr) {
|
||||
%A = load i32* %huge_ptr ; <i32> [#uses=1]
|
||||
%B = load i32* %target_ptr ; <i32> [#uses=1]
|
||||
%C = or i32 %A, %B ; <i32> [#uses=1]
|
||||
store i32 %C, i32* %target_ptr
|
||||
ret void
|
||||
}
|
||||
|
||||
$ llvm-as < t.ll | llc -march=x86-64
|
||||
|
||||
_test:
|
||||
movl (%rdi), %eax
|
||||
orl (%rsi), %eax
|
||||
movl %eax, (%rsi)
|
||||
ret
|
||||
|
||||
That should be something like:
|
||||
|
||||
_test:
|
||||
movl (%rdi), %eax
|
||||
orl %eax, (%rsi)
|
||||
ret
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user