From ad93e1e5fc407f460278990626b7b5577f1262bd Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Mon, 9 Mar 2009 23:47:02 +0000 Subject: [PATCH] Add a note about EFLAGS optimization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66508 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/README.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/Target/X86/README.txt b/lib/Target/X86/README.txt index 5f28579095f..77133162974 100644 --- a/lib/Target/X86/README.txt +++ b/lib/Target/X86/README.txt @@ -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: