diff options
author | Chris Lattner <sabre@nondot.org> | 2007-09-26 06:29:31 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-09-26 06:29:31 +0000 |
commit | a487bf7cc0290572a6f18cb6d15e1a88e82c9029 (patch) | |
tree | 0a49748139de030435cf42a5b3d6160b727baf09 | |
parent | b3d91cfa10387517c305f75a8220d192f7d133cb (diff) | |
download | external_llvm-a487bf7cc0290572a6f18cb6d15e1a88e82c9029.zip external_llvm-a487bf7cc0290572a6f18cb6d15e1a88e82c9029.tar.gz external_llvm-a487bf7cc0290572a6f18cb6d15e1a88e82c9029.tar.bz2 |
move PR1160 here.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42347 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/README.txt | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/Target/X86/README.txt b/lib/Target/X86/README.txt index 40cbd86..aee90a2 100644 --- a/lib/Target/X86/README.txt +++ b/lib/Target/X86/README.txt @@ -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 + +//===---------------------------------------------------------------------===// + |