diff options
author | Chris Lattner <sabre@nondot.org> | 2007-09-10 21:43:18 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-09-10 21:43:18 +0000 |
commit | bf8ae84a21011a7263c2a4183fdfd8e5755765a1 (patch) | |
tree | c3afb5a8cee68d395e2cc00a629c71b27cc65a7f /lib/Target/PowerPC/README.txt | |
parent | 61c5ff460b18b970aa651115c4ac78dfc0d602d7 (diff) | |
download | llvm-bf8ae84a21011a7263c2a4183fdfd8e5755765a1.tar.gz llvm-bf8ae84a21011a7263c2a4183fdfd8e5755765a1.tar.bz2 llvm-bf8ae84a21011a7263c2a4183fdfd8e5755765a1.tar.xz |
Add some notes about better flag handling.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41808 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/PowerPC/README.txt')
-rw-r--r-- | lib/Target/PowerPC/README.txt | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/lib/Target/PowerPC/README.txt b/lib/Target/PowerPC/README.txt index 10ee323954..077bc2555d 100644 --- a/lib/Target/PowerPC/README.txt +++ b/lib/Target/PowerPC/README.txt @@ -677,5 +677,33 @@ LBB1_1: ;bb cmplwi cr0, r6, 33920 bne cr0, LBB1_1 -===-------------------------------------------------------------------------=== +//===---------------------------------------------------------------------===// + +This: + #include <algorithm> + inline std::pair<unsigned, bool> full_add(unsigned a, unsigned b) + { return std::make_pair(a + b, a + b < a); } + bool no_overflow(unsigned a, unsigned b) + { return !full_add(a, b).second; } + +Should compile to: + +__Z11no_overflowjj: + add r4,r3,r4 + subfc r3,r3,r4 + li r3,0 + adde r3,r3,r3 + blr + +(or better) not: + +__Z11no_overflowjj: + add r2, r4, r3 + cmplw cr7, r2, r3 + mfcr r2 + rlwinm r2, r2, 29, 31, 31 + xori r3, r2, 1 + blr + +//===---------------------------------------------------------------------===// |