summaryrefslogtreecommitdiffstats
path: root/clang/lib/Format/ContinuationIndenter.cpp
diff options
context:
space:
mode:
authorTim Northover <tnorthover@apple.com>2014-04-03 11:44:58 +0000
committerTim Northover <tnorthover@apple.com>2014-04-03 11:44:58 +0000
commitc882eb0723afa9dfe626eebb9699c1871a8bbbab (patch)
tree36b06d94b6676f81db5a8fce3e8f56a754d4f0e9 /clang/lib/Format/ContinuationIndenter.cpp
parent6207a4dadcd0c050a3a3795d22e67da5efdeb82a (diff)
downloadbcm5719-llvm-c882eb0723afa9dfe626eebb9699c1871a8bbbab.tar.gz
bcm5719-llvm-c882eb0723afa9dfe626eebb9699c1871a8bbbab.zip
ARM: expand atomic ldrex/strex loops in IR
The previous situation where ATOMIC_LOAD_WHATEVER nodes were expanded at MachineInstr emission time had grown to be extremely large and involved, to account for the subtly different code needed for the various flavours (8/16/32/64 bit, cmpxchg/add/minmax). Moving this transformation into the IR clears up the code substantially, and makes future optimisations much easier: 1. an atomicrmw followed by using the *new* value can be more efficient. As an IR pass, simple CSE could handle this efficiently. 2. Making use of cmpxchg success/failure orderings only has to be done in one (simpler) place. 3. The common "cmpxchg; did we store?" idiom can be exposed to optimisation. I intend to gradually improve this situation within the ARM backend and make sure there are no hidden issues before moving the code out into CodeGen to be shared with (at least ARM64/AArch64, though I think PPC & Mips could benefit too). llvm-svn: 205525
Diffstat (limited to 'clang/lib/Format/ContinuationIndenter.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud