annotate gcc/range.cc @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 /* Misc range functions.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 Copyright (C) 2017-2020 Free Software Foundation, Inc.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 Contributed by Aldy Hernandez <aldyh@redhat.com>.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 This file is part of GCC.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 GCC is free software; you can redistribute it and/or modify it under
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 the terms of the GNU General Public License as published by the Free
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 Software Foundation; either version 3, or (at your option) any later
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 version.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 for more details.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 along with GCC; see the file COPYING3. If not see
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 <http://www.gnu.org/licenses/>. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 #include "config.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 #include "system.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 #include "coretypes.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 #include "backend.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 #include "tree.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 #include "gimple.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 #include "gimple-pretty-print.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 #include "fold-const.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 #include "ssa.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 #include "range.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 value_range
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 range_zero (tree type)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 return value_range (build_zero_cst (type), build_zero_cst (type));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 value_range
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 range_nonzero (tree type)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 return value_range (build_zero_cst (type), build_zero_cst (type),
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 VR_ANTI_RANGE);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 value_range
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 range_positives (tree type)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 unsigned prec = TYPE_PRECISION (type);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 signop sign = TYPE_SIGN (type);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 return value_range (type, wi::zero (prec), wi::max_value (prec, sign));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 value_range
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 range_negatives (tree type)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 unsigned prec = TYPE_PRECISION (type);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 signop sign = TYPE_SIGN (type);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 value_range r;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 if (sign == UNSIGNED)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 r.set_undefined ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 r = value_range (type, wi::min_value (prec, sign), wi::minus_one (prec));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 return r;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 }