summaryrefslogtreecommitdiffstats
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorRoger Ferrer Ibanez <roger.ferreribanez@arm.com>2017-08-03 07:45:10 +0000
committerRoger Ferrer Ibanez <roger.ferreribanez@arm.com>2017-08-03 07:45:10 +0000
commit854980341b5fecd5b19b39dc802a20edb23a67dc (patch)
tree3e12b6e708dcf15a3a4d19371d3dbff141682b1c /clang/lib/Frontend/CompilerInvocation.cpp
parent314ed201f3942a52b8b45a6f146e9b44c407d606 (diff)
downloadbcm5719-llvm-854980341b5fecd5b19b39dc802a20edb23a67dc.tar.gz
bcm5719-llvm-854980341b5fecd5b19b39dc802a20edb23a67dc.zip
[ARM] Use ADDCARRY / SUBCARRY
This patch: - makes nodes ISD::ADDCARRY and ISD::SUBCARRY legal for i32 - lowering is done by first converting the boolean value into the carry flag using (_, C) <- (ARMISD::ADDC R, -1) and converted back to an integer value using (R, _) <- (ARMISD::ADDE 0, 0, C). An ARMISD::ADDE between the two operations does the actual addition. - for subtraction, given that ISD::SUBCARRY second result is actually a borrow, we need to invert the value of the second operand and result before and after using ARMISD::SUBE. We need to invert the carry result of ARMISD::SUBE to preserve the semantics. - given that the generic combiner may lower ISD::ADDCARRY and ISD::SUBCARRY into ISD::UADDO and ISD::USUBO we need to update their lowering as well otherwise i64 operations now would require branches. This implies updating the corresponding test for unsigned. - add new combiner to remove the redundant conversions from/to carry flags to/from boolean values (ARMISD::ADDC (ARMISD::ADDE 0, 0, C), -1) -> C Differential Revision: https://reviews.llvm.org/D35192 llvm-svn: 309923
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud