aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-09-26 06:29:31 +0000
committerChris Lattner <sabre@nondot.org>2007-09-26 06:29:31 +0000
commita487bf7cc0290572a6f18cb6d15e1a88e82c9029 (patch)
tree0a49748139de030435cf42a5b3d6160b727baf09
parentb3d91cfa10387517c305f75a8220d192f7d133cb (diff)
downloadexternal_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.txt31
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
+
+//===---------------------------------------------------------------------===//
+