Andrea Di Biagio
fd503e5af3
[DAGcombiner] Fix incorrect sinking of a truncate into the operand of a shift.
...
This fixes a regression introduced by revision 268094.
Revision 268094 added the following dag combine rule:
// trunc (shl x, K) -> shl (trunc x), K => K < vt.size / 2
That rule converts a truncate of a shift-by-constant into a shift of a truncated
value. We do this only if the shift count is less than half the size in bits of
the truncated value (K < vt.size / 2).
The problem is that the constraint on the shift count is incorrect, so the rule
doesn't work well in some cases involving vector types. The combine rule should
have been written instead like this:
// trunc (shl x, K) -> shl (trunc x), K => K < vt.getScalarSizeInBits()
Basically, if K is smaller than the "scalar size in bits" of the truncated value
then we know that by "sinking" the truncate into the operand of the shift we
would never accidentally make the shift undefined.
This patch fixes the check on the shift count, and adds test cases to make sure
that we don't regress the behavior.
Differential Revision: https://reviews.llvm.org/D24154
llvm-svn: 280482
2016-09-02 11:29:09 +00:00
..
2016-06-15 16:37:46 +00:00
2016-06-22 15:16:06 +00:00
2016-07-07 22:50:23 +00:00
2016-07-07 22:50:23 +00:00
2016-08-12 03:33:22 +00:00
2016-09-01 17:59:24 +00:00
2016-07-21 14:54:17 +00:00
2016-06-28 08:08:15 +00:00
2016-06-28 08:08:15 +00:00
2016-06-29 14:51:10 +00:00
2016-08-12 16:08:30 +00:00
2016-07-14 05:48:25 +00:00
2016-07-09 00:19:07 +00:00
2016-06-15 16:37:46 +00:00
2016-06-15 16:37:46 +00:00
2016-07-09 00:19:07 +00:00
2016-08-25 17:17:46 +00:00
2016-07-15 09:49:12 +00:00
2016-09-01 13:58:53 +00:00
2016-07-22 13:58:44 +00:00
2016-06-16 18:44:20 +00:00
2016-07-18 06:14:34 +00:00
2016-08-24 12:42:31 +00:00
2016-08-22 16:47:55 +00:00
2016-07-15 09:49:12 +00:00
2016-09-02 05:29:13 +00:00
2016-06-15 07:30:38 +00:00
2016-08-01 07:55:33 +00:00
2016-07-22 05:00:52 +00:00
2016-08-03 19:08:24 +00:00
2016-08-01 07:55:33 +00:00
2016-08-07 13:05:58 +00:00
2016-08-29 08:52:52 +00:00
2016-08-11 07:32:08 +00:00
2016-08-25 22:48:11 +00:00
2016-08-01 07:55:33 +00:00
2016-08-11 22:07:33 +00:00
2016-08-11 22:07:33 +00:00
2016-07-31 20:20:01 +00:00
2016-08-29 08:52:52 +00:00
2016-08-29 08:52:52 +00:00
2016-07-31 20:19:53 +00:00
2016-07-05 10:15:14 +00:00
2016-08-07 13:05:58 +00:00
2016-08-25 22:48:11 +00:00
2016-09-02 05:29:09 +00:00
2016-08-25 22:48:11 +00:00
2016-07-18 06:14:39 +00:00
2016-08-01 07:55:33 +00:00
2016-08-28 06:06:28 +00:00
2016-08-14 05:25:07 +00:00
2016-07-22 05:46:44 +00:00
2016-07-11 06:08:06 +00:00
2016-07-22 05:00:52 +00:00
2016-08-22 16:47:55 +00:00
2016-07-31 20:20:01 +00:00
2016-08-11 12:13:46 +00:00
2016-07-05 13:16:05 +00:00
2016-07-03 15:00:51 +00:00
2016-07-22 05:00:52 +00:00
2016-07-09 00:19:07 +00:00
2016-06-15 07:30:38 +00:00
2016-07-05 13:16:05 +00:00
2016-08-07 13:05:58 +00:00
2016-08-11 22:07:33 +00:00
2016-06-15 07:30:38 +00:00
2016-06-15 07:30:38 +00:00
2016-08-25 22:48:11 +00:00
2016-08-07 13:05:58 +00:00
2016-09-02 06:11:31 +00:00
2016-09-02 06:11:31 +00:00
2016-07-21 14:36:41 +00:00
2016-07-18 06:14:34 +00:00
2016-08-07 13:05:58 +00:00
2016-08-07 13:05:58 +00:00
2016-07-05 10:15:14 +00:00
2016-08-07 13:05:58 +00:00
2016-08-07 13:05:58 +00:00
2016-08-31 05:37:52 +00:00
2016-08-01 07:55:33 +00:00
2016-07-18 06:14:39 +00:00
2016-06-15 07:30:38 +00:00
2016-08-29 04:49:31 +00:00
2016-07-09 00:19:07 +00:00
2016-08-10 10:50:53 +00:00
2016-07-22 13:58:44 +00:00
2016-07-22 13:58:44 +00:00
2016-06-28 08:08:15 +00:00
2016-06-28 13:24:05 +00:00
2016-08-22 16:47:55 +00:00
2016-07-14 23:05:09 +00:00
2016-07-22 16:46:25 +00:00
2016-07-29 18:09:28 +00:00
2016-06-12 09:56:05 +00:00
2016-06-12 09:56:05 +00:00
2016-07-09 00:19:07 +00:00
2016-06-24 18:16:36 +00:00
2016-08-11 07:32:08 +00:00
2016-07-19 07:14:21 +00:00
2016-08-05 17:36:14 +00:00
2016-08-20 21:35:45 +00:00
2016-08-03 19:08:24 +00:00
2016-08-12 03:33:22 +00:00
2016-07-29 15:09:54 +00:00
2016-07-07 22:50:23 +00:00
2016-07-07 22:50:23 +00:00
2016-07-07 22:50:23 +00:00
2016-07-03 19:37:12 +00:00
2016-06-14 03:12:54 +00:00
2016-06-10 15:17:54 +00:00
2016-08-11 07:32:08 +00:00
2016-08-09 03:06:33 +00:00
2016-06-10 01:57:48 +00:00
2016-07-07 22:50:23 +00:00
2016-07-30 14:06:59 +00:00
2016-07-15 15:30:18 +00:00
2016-08-20 23:09:57 +00:00
2016-06-15 05:35:14 +00:00
2016-08-25 01:27:13 +00:00
2016-07-13 20:36:03 +00:00
2016-07-21 14:54:17 +00:00
2016-07-09 00:19:07 +00:00
2016-08-24 11:56:15 +00:00
2016-08-24 11:56:15 +00:00
2016-07-14 15:40:22 +00:00
2016-08-27 05:22:12 +00:00
2016-06-07 15:12:47 +00:00
2016-08-25 22:48:11 +00:00
2016-06-07 13:08:45 +00:00
2016-07-15 20:18:37 +00:00
2016-07-14 13:54:26 +00:00
2016-07-09 00:19:07 +00:00
2016-08-25 01:27:13 +00:00
2016-08-29 04:49:31 +00:00
2016-08-29 04:49:31 +00:00
2016-07-28 15:28:56 +00:00
2016-09-01 13:58:53 +00:00
2016-07-29 06:06:04 +00:00
2016-07-29 06:06:04 +00:00
2016-08-09 03:06:33 +00:00
2016-07-07 22:50:23 +00:00
2016-07-18 17:20:09 +00:00
2016-08-20 21:56:33 +00:00
2016-08-09 03:06:33 +00:00
2016-08-20 21:56:33 +00:00
2016-07-01 17:35:13 +00:00
2016-06-24 18:48:36 +00:00
2016-06-24 18:04:39 +00:00
2016-08-17 07:52:15 +00:00
2016-06-14 15:09:30 +00:00
2016-07-09 00:19:07 +00:00
2016-08-22 12:56:54 +00:00
2016-08-22 12:56:54 +00:00
2016-08-12 03:33:22 +00:00
2016-08-24 01:52:46 +00:00
2016-07-11 21:03:03 +00:00
2016-07-11 21:03:03 +00:00
2016-06-23 18:17:25 +00:00
2016-06-23 21:40:35 +00:00
2016-08-16 16:57:15 +00:00
2016-06-29 14:51:10 +00:00
2016-08-16 21:35:16 +00:00
2016-08-25 01:27:13 +00:00
2016-08-12 11:24:34 +00:00
2016-08-24 18:07:53 +00:00
2016-06-10 16:19:46 +00:00
2016-07-14 01:31:20 +00:00
2016-07-21 03:50:39 +00:00
2016-07-11 18:45:49 +00:00
2016-06-10 19:14:01 +00:00
2016-07-31 19:50:45 +00:00
2016-07-25 21:14:22 +00:00
2016-06-23 21:38:49 +00:00
2016-08-29 13:15:35 +00:00
2016-08-16 19:50:33 +00:00
2016-07-21 14:54:17 +00:00
2016-08-10 15:13:49 +00:00
2016-08-15 07:53:03 +00:00
2016-07-13 20:36:03 +00:00
2016-08-25 01:27:13 +00:00
2016-08-12 03:33:22 +00:00
2016-06-15 16:37:46 +00:00
2016-08-12 03:33:22 +00:00
2016-08-29 09:12:31 +00:00
2016-08-29 08:52:52 +00:00
2016-07-09 00:19:07 +00:00
2016-07-07 22:50:23 +00:00
2016-09-01 17:59:24 +00:00
2016-06-17 20:24:07 +00:00
2016-07-29 18:23:18 +00:00
2016-06-29 14:51:10 +00:00
2016-08-18 13:41:26 +00:00
2016-08-16 13:33:33 +00:00
2016-08-01 07:55:33 +00:00
2016-06-29 14:51:10 +00:00
2016-07-09 00:19:07 +00:00
2016-06-22 15:16:06 +00:00
2016-07-21 22:24:08 +00:00
2016-06-28 20:31:56 +00:00
2016-08-22 12:56:54 +00:00
2016-08-11 06:04:00 +00:00
2016-07-30 16:01:30 +00:00
2016-09-01 21:32:09 +00:00
2016-07-09 00:19:07 +00:00
2016-07-13 16:37:29 +00:00
2016-07-26 18:20:00 +00:00
2016-09-01 18:50:02 +00:00
2016-06-16 18:21:11 +00:00
2016-06-28 16:04:46 +00:00
2016-07-22 05:46:44 +00:00
2016-07-17 16:04:19 +00:00
2016-08-29 04:49:31 +00:00
2016-06-15 16:37:46 +00:00
2016-08-22 12:56:54 +00:00
2016-08-25 22:48:11 +00:00
2016-08-25 01:27:13 +00:00
2016-08-25 22:48:11 +00:00
2016-07-08 21:25:33 +00:00
2016-07-08 21:25:33 +00:00
2016-07-11 20:40:44 +00:00
2016-08-01 19:39:49 +00:00
2016-07-13 23:23:40 +00:00
2016-07-15 22:31:14 +00:00
2016-08-11 17:38:33 +00:00
2016-08-17 19:07:40 +00:00
2016-09-01 23:02:32 +00:00
2016-07-09 00:19:07 +00:00
2016-06-28 08:08:15 +00:00
2016-09-02 11:29:09 +00:00
2016-07-07 22:50:23 +00:00
2016-07-29 21:45:51 +00:00
2016-07-22 05:00:52 +00:00
2016-08-10 19:00:11 +00:00
2016-07-29 10:23:10 +00:00
2016-07-07 22:50:23 +00:00
2016-07-07 22:50:23 +00:00
2016-06-10 15:30:52 +00:00
2016-07-31 19:50:45 +00:00
2016-08-01 12:11:43 +00:00
2016-08-09 17:39:11 +00:00
2016-07-13 16:04:07 +00:00
2016-07-18 06:14:54 +00:00
2016-06-29 14:51:10 +00:00
2016-06-29 14:51:10 +00:00
2016-06-21 12:29:03 +00:00
2016-07-24 08:26:38 +00:00
2016-08-04 12:47:28 +00:00
2016-06-16 16:58:54 +00:00
2016-08-10 12:26:40 +00:00
2016-07-19 15:07:43 +00:00
2016-08-22 12:56:54 +00:00
2016-07-19 15:07:43 +00:00
2016-08-31 15:09:34 +00:00
2016-08-06 18:40:28 +00:00
2016-08-22 12:56:54 +00:00
2016-07-10 05:55:53 +00:00
2016-06-28 08:08:15 +00:00
2016-06-17 14:27:38 +00:00
2016-06-18 02:38:26 +00:00
2016-08-26 09:55:41 +00:00
2016-07-07 22:50:23 +00:00
2016-06-16 15:48:30 +00:00
2016-07-07 22:50:23 +00:00
2016-07-07 22:50:23 +00:00
2016-07-07 22:50:23 +00:00
2016-07-07 22:50:23 +00:00
2016-08-22 12:56:54 +00:00
2016-08-09 03:06:33 +00:00
2016-08-11 07:32:08 +00:00
2016-07-19 15:07:43 +00:00
2016-07-19 15:07:43 +00:00
2016-07-07 22:50:23 +00:00
2016-07-29 06:05:58 +00:00
2016-08-09 09:32:34 +00:00
2016-08-28 06:06:28 +00:00
2016-08-28 06:06:28 +00:00
2016-08-09 09:32:34 +00:00
2016-06-07 20:15:35 +00:00
2016-06-07 20:15:35 +00:00
2016-06-30 18:49:04 +00:00
2016-06-09 17:06:01 +00:00
2016-07-13 20:36:03 +00:00
2016-08-31 15:12:17 +00:00
2016-08-25 12:50:13 +00:00
2016-08-16 06:41:00 +00:00
2016-08-16 06:41:00 +00:00
2016-08-16 20:06:25 +00:00
2016-06-24 18:16:36 +00:00
2016-08-18 02:21:54 +00:00
2016-06-18 17:20:52 +00:00
2016-07-09 00:19:07 +00:00
2016-06-27 20:19:14 +00:00
2016-07-21 14:54:17 +00:00
2016-08-09 01:47:26 +00:00
2016-08-12 03:33:22 +00:00
2016-07-18 06:14:39 +00:00
2016-07-08 03:32:49 +00:00
2016-07-13 20:36:03 +00:00
2016-07-09 00:19:07 +00:00
2016-07-09 00:19:07 +00:00
2016-08-09 03:06:26 +00:00
2016-08-29 13:32:41 +00:00
2016-08-04 10:14:39 +00:00
2016-08-22 12:56:54 +00:00
2016-09-02 05:29:13 +00:00
2016-08-23 15:10:39 +00:00
2016-08-31 10:35:13 +00:00
2016-06-15 00:19:09 +00:00
2016-08-06 18:40:28 +00:00
2016-07-09 00:19:07 +00:00
2016-08-12 03:33:22 +00:00
2016-07-09 20:55:20 +00:00
2016-07-09 20:55:20 +00:00
2016-07-09 20:55:20 +00:00
2016-07-09 20:55:20 +00:00
2016-07-09 20:55:20 +00:00
2016-07-09 20:55:20 +00:00
2016-07-09 20:55:20 +00:00
2016-08-26 07:08:00 +00:00
2016-08-09 03:06:26 +00:00
2016-08-28 06:06:28 +00:00
2016-06-15 20:26:58 +00:00
2016-08-11 12:13:46 +00:00
2016-08-28 17:27:14 +00:00
2016-07-09 00:19:07 +00:00
2016-08-20 17:07:38 +00:00
2016-08-04 10:14:39 +00:00
2016-08-04 10:14:39 +00:00
2016-07-22 05:46:44 +00:00
2016-07-13 16:04:07 +00:00
2016-08-22 12:56:54 +00:00
2016-06-11 20:39:21 +00:00
2016-08-07 12:41:36 +00:00
2016-07-21 14:54:17 +00:00
2016-07-21 14:54:17 +00:00
2016-08-16 11:05:47 +00:00
2016-07-21 14:54:17 +00:00
2016-07-21 14:54:17 +00:00
2016-08-16 11:05:47 +00:00
2016-07-21 14:54:17 +00:00
2016-07-21 14:54:17 +00:00
2016-08-16 11:05:47 +00:00
2016-08-06 18:40:28 +00:00
2016-08-06 18:40:28 +00:00
2016-08-24 18:07:53 +00:00
2016-06-28 08:08:15 +00:00
2016-08-16 10:03:23 +00:00
2016-07-15 09:49:12 +00:00
2016-08-24 18:07:53 +00:00
2016-08-12 11:24:34 +00:00
2016-08-13 05:33:12 +00:00
2016-08-13 05:33:12 +00:00
2016-08-13 05:33:12 +00:00
2016-08-13 05:43:20 +00:00
2016-08-19 17:02:00 +00:00
2016-08-02 05:11:15 +00:00
2016-07-14 12:58:04 +00:00
2016-08-19 17:02:00 +00:00
2016-08-09 12:56:15 +00:00
2016-08-24 18:07:53 +00:00
2016-08-06 13:46:09 +00:00
2016-08-26 09:55:41 +00:00
2016-06-29 16:56:09 +00:00
2016-08-14 05:25:07 +00:00
2016-07-09 00:19:07 +00:00
2016-08-24 18:07:53 +00:00
2016-07-22 05:46:44 +00:00
2016-07-22 05:46:44 +00:00
2016-08-04 10:14:39 +00:00
2016-08-01 07:55:33 +00:00
2016-08-12 11:24:34 +00:00
2016-08-28 22:20:51 +00:00
2016-07-13 20:36:03 +00:00
2016-07-30 20:28:02 +00:00
2016-07-30 20:28:02 +00:00
2016-07-30 20:28:02 +00:00
2016-07-30 20:28:02 +00:00
2016-07-30 20:28:02 +00:00
2016-07-30 20:28:02 +00:00
2016-06-14 21:01:22 +00:00
2016-07-09 00:19:07 +00:00
2016-07-21 14:54:17 +00:00
2016-08-22 12:56:54 +00:00
2016-08-22 12:56:54 +00:00
2016-08-20 22:00:53 +00:00
2016-07-21 14:54:17 +00:00
2016-08-09 03:06:26 +00:00
2016-07-23 21:24:02 +00:00
2016-07-14 15:40:22 +00:00
2016-06-21 15:58:55 +00:00
2016-07-15 20:18:37 +00:00
2016-07-27 17:55:33 +00:00
2016-07-18 06:14:54 +00:00
2016-07-24 16:00:53 +00:00
2016-08-09 17:55:12 +00:00
2016-07-24 15:25:36 +00:00
2016-07-09 00:19:07 +00:00
2016-06-15 18:18:05 +00:00
2016-07-14 11:05:43 +00:00
2016-07-14 11:05:43 +00:00
2016-08-25 22:48:11 +00:00
2016-06-18 21:07:31 +00:00
2016-08-20 21:07:41 +00:00
2016-08-31 05:20:08 +00:00
2016-08-31 21:24:02 +00:00
2016-08-09 10:42:11 +00:00
2016-07-14 04:06:33 +00:00
2016-07-14 04:06:33 +00:00
2016-09-01 01:29:13 +00:00