summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/LowerEmuTLS.cpp
diff options
context:
space:
mode:
authorRoger Ferrer Ibanez <roger.ferreribanez@arm.com>2017-09-11 07:38:05 +0000
committerRoger Ferrer Ibanez <roger.ferreribanez@arm.com>2017-09-11 07:38:05 +0000
commit12b20f2307a617a35401a28953b9e353321a20cb (patch)
tree783393cb6fa19d682212ed9b5944f6cd80045040 /llvm/lib/CodeGen/LowerEmuTLS.cpp
parent7af729b3d23399b5573c51d70f2b0f2bf3769050 (diff)
downloadbcm5719-llvm-12b20f2307a617a35401a28953b9e353321a20cb.tar.gz
bcm5719-llvm-12b20f2307a617a35401a28953b9e353321a20cb.zip
[ARM] Use ADDCARRY / SUBCARRY
This is a preparatory step for D34515 and also is being recommitted as its first version caused PR34045. This change: - 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::SUBCARRYinto 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 - fixes PR34045 Differential Revision: https://reviews.llvm.org/D35192 llvm-svn: 312898
Diffstat (limited to 'llvm/lib/CodeGen/LowerEmuTLS.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud