Add a note about EFLAGS optimization.
authorDan Gohman <gohman@apple.com>
Mon, 9 Mar 2009 23:47:02 +0000 (23:47 +0000)
committerDan Gohman <gohman@apple.com>
Mon, 9 Mar 2009 23:47:02 +0000 (23:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66508 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/README.txt

index 5f28579095f10713dd182acd3e90c18399643ac7..771331629741dc69a54709a130fc1dc8c1b87bb5 100644 (file)
@@ -1819,6 +1819,21 @@ LBB1_1:  ## bb1
 
 //===---------------------------------------------------------------------===//
 
+Test instructions can be eliminated by using EFLAGS values from arithmetic
+instructions. This is currently not done for and, or, xor, neg, shl, sra,
+srl, shld, shrd, atomic ops, and others. It is also currently not done for
+read-modify-write instructions.
+
+The shift operators have the complication that when the shift count is
+zero, EFLAGS is not set, so they can only subsume a test instruction if
+the shift count is known to be non-zero.
+
+In read-modify-write instructions, the root node in the isel match is
+the store, and isel has no way for the use of the EFLAGS result of the
+arithmetic to be remapped to the new node.
+
+//===---------------------------------------------------------------------===//
+
 test/CodeGen/X86/2009-03-07-FPConstSelect.ll compiles to:
 
 _f: