]>
Commit | Line | Data |
---|---|---|
caa60c12 AH |
1 | /* Unit tests for GIMPLE range related routines. |
2 | Copyright (C) 2021 Free Software Foundation, Inc. | |
3 | ||
4 | This file is part of GCC. | |
5 | ||
6 | GCC is free software; you can redistribute it and/or modify | |
7 | it under the terms of the GNU General Public License as published by | |
8 | the Free Software Foundation; either version 3, or (at your option) | |
9 | any later version. | |
10 | ||
11 | GCC is distributed in the hope that it will be useful, | |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | GNU General Public License for more details. | |
15 | ||
16 | You should have received a copy of the GNU General Public License | |
17 | along with GCC; see the file COPYING3. If not see | |
18 | <http://www.gnu.org/licenses/>. */ | |
19 | ||
20 | #if CHECKING_P | |
21 | ||
22 | #include "selftest.h" | |
23 | ||
24 | namespace selftest { | |
25 | ||
26 | // Test ranges of tree expressions. | |
27 | class test_expr_eval : public gimple_ranger | |
28 | { | |
29 | public: | |
30 | test_expr_eval () | |
31 | { | |
32 | type = integer_type_node; | |
33 | op0 = make_ssa_name (type); | |
34 | op1 = make_ssa_name (type); | |
35 | ||
36 | // [5,10] + [15,20] => [20, 30] | |
37 | tree expr = fold_build2 (PLUS_EXPR, type, op0, op1); | |
38 | int_range<2> expect (build_int_cst (type, 20), build_int_cst (type, 30)); | |
39 | int_range_max r; | |
40 | ||
41 | ASSERT_TRUE (range_of_expr (r, expr)); | |
42 | ASSERT_TRUE (r == expect); | |
43 | } | |
44 | ||
45 | virtual bool range_of_expr (irange &r, tree expr, gimple * = NULL) OVERRIDE | |
46 | { | |
47 | if (expr == op0) | |
48 | { | |
49 | r.set (build_int_cst (type, 5), build_int_cst (type, 10)); | |
50 | return true; | |
51 | } | |
52 | if (expr == op1) | |
53 | { | |
54 | r.set (build_int_cst (type, 15), build_int_cst (type, 20)); | |
55 | return true; | |
56 | } | |
57 | return gimple_ranger::range_of_expr (r, expr); | |
58 | } | |
59 | ||
60 | private: | |
61 | tree op0, op1, type; | |
62 | }; | |
63 | ||
64 | void | |
65 | gimple_range_tests () | |
66 | { | |
67 | test_expr_eval e; | |
68 | } | |
69 | ||
70 | } // namespace selftest | |
71 | ||
72 | #endif // CHECKING_P |