Files
archived-llvm/test/CodeGen/ARM
Roger Ferrer Ibanez 081fd494d0 [ARM] Use ADDCARRY / SUBCARRY
This is a preparatory step for D34515.

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
 - fixes PR34564

Differential Revision: https://reviews.llvm.org/D35192



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313618 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-19 09:05:39 +00:00
..
2017-02-21 20:17:34 +00:00
2016-01-26 00:03:25 +00:00
2017-08-01 22:20:49 +00:00
2014-04-03 17:35:22 +00:00
2017-08-28 20:20:47 +00:00
2017-04-07 22:01:23 +00:00
2017-04-07 22:01:23 +00:00
2016-06-16 16:09:53 +00:00
2016-01-28 18:59:04 +00:00
2017-08-01 22:20:49 +00:00
2017-08-01 22:20:49 +00:00
2017-08-09 22:22:05 +00:00
2014-08-26 12:47:26 +00:00
2017-08-28 20:20:47 +00:00
2017-07-21 22:48:47 +00:00
2014-01-29 11:50:56 +00:00
2014-01-29 11:50:56 +00:00
2016-06-16 16:09:53 +00:00
2015-10-26 20:49:49 +00:00
2016-06-20 17:45:33 +00:00
2016-12-27 18:35:19 +00:00
2016-01-26 00:03:25 +00:00
2016-04-08 18:15:37 +00:00
2014-04-25 17:51:25 +00:00
2014-11-17 14:08:57 +00:00
2014-04-03 17:35:22 +00:00
2016-10-19 16:58:59 +00:00
2014-12-04 19:34:50 +00:00
2016-06-16 16:09:53 +00:00
2016-03-31 19:42:04 +00:00
2015-12-17 01:29:08 +00:00
2017-09-19 09:05:39 +00:00
2017-09-19 09:05:39 +00:00
2014-04-03 17:35:22 +00:00
2014-04-03 17:35:22 +00:00
2015-01-19 15:16:06 +00:00
2017-08-28 20:20:47 +00:00
2017-08-28 20:20:47 +00:00
2014-04-23 01:09:29 +00:00
2017-08-23 03:17:59 +00:00
2017-08-01 22:20:49 +00:00
2017-08-01 22:20:49 +00:00
2016-12-27 18:35:19 +00:00
2016-12-27 18:35:19 +00:00
2017-09-07 14:52:26 +00:00
2015-08-13 17:28:16 +00:00