Commit 916e8f7
authored
[DA] Check nsw when extracting a constant operand of SCEVMul (llvm#164408)
Given a `SCEVMulExpr` such as `5 * %m`, `gcdMIVtest` in DA assumes the
value as a multiple of 5 in a mathematical sense. However, this is not
necessarily true if `5 * %m` overflows, especially because an odd number
has an inverse modulo `2^64`. Such incorrect assumptions can lead to
invalid analysis results.
This patch stops unconditionally extracting a constant operand from
`SCEVMulExpr`. Instead, it only allows this when the `SCEVMulExpr` has
the `nsw` flag.1 parent cc1022c commit 916e8f7
File tree
5 files changed
+25
-24
lines changed- llvm
- lib/Analysis
- test/Analysis/DependenceAnalysis
5 files changed
+25
-24
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2854 | 2854 | | |
2855 | 2855 | | |
2856 | 2856 | | |
2857 | | - | |
2858 | | - | |
2859 | | - | |
| 2857 | + | |
| 2858 | + | |
| 2859 | + | |
| 2860 | + | |
| 2861 | + | |
| 2862 | + | |
2860 | 2863 | | |
2861 | 2864 | | |
2862 | 2865 | | |
2863 | 2866 | | |
2864 | | - | |
| 2867 | + | |
| 2868 | + | |
2865 | 2869 | | |
2866 | 2870 | | |
2867 | 2871 | | |
| |||
2887 | 2891 | | |
2888 | 2892 | | |
2889 | 2893 | | |
2890 | | - | |
| 2894 | + | |
2891 | 2895 | | |
2892 | 2896 | | |
2893 | 2897 | | |
| |||
2940 | 2944 | | |
2941 | 2945 | | |
2942 | 2946 | | |
2943 | | - | |
| 2947 | + | |
2944 | 2948 | | |
2945 | 2949 | | |
2946 | 2950 | | |
| |||
2958 | 2962 | | |
2959 | 2963 | | |
2960 | 2964 | | |
2961 | | - | |
| 2965 | + | |
2962 | 2966 | | |
2963 | 2967 | | |
2964 | 2968 | | |
| |||
2979 | 2983 | | |
2980 | 2984 | | |
2981 | 2985 | | |
2982 | | - | |
| 2986 | + | |
2983 | 2987 | | |
2984 | 2988 | | |
2985 | 2989 | | |
| |||
3032 | 3036 | | |
3033 | 3037 | | |
3034 | 3038 | | |
3035 | | - | |
| 3039 | + | |
3036 | 3040 | | |
3037 | 3041 | | |
3038 | 3042 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
254 | 254 | | |
255 | 255 | | |
256 | 256 | | |
257 | | - | |
| 257 | + | |
258 | 258 | | |
259 | 259 | | |
260 | 260 | | |
| |||
322 | 322 | | |
323 | 323 | | |
324 | 324 | | |
325 | | - | |
| 325 | + | |
326 | 326 | | |
327 | 327 | | |
328 | 328 | | |
| |||
390 | 390 | | |
391 | 391 | | |
392 | 392 | | |
393 | | - | |
| 393 | + | |
394 | 394 | | |
395 | 395 | | |
396 | 396 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
384 | 384 | | |
385 | 385 | | |
386 | 386 | | |
387 | | - | |
| 387 | + | |
388 | 388 | | |
389 | 389 | | |
390 | 390 | | |
| |||
440 | 440 | | |
441 | 441 | | |
442 | 442 | | |
443 | | - | |
| 443 | + | |
444 | 444 | | |
445 | 445 | | |
446 | 446 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
25 | | - | |
26 | | - | |
27 | 24 | | |
28 | 25 | | |
29 | 26 | | |
30 | 27 | | |
31 | 28 | | |
32 | | - | |
| 29 | + | |
33 | 30 | | |
34 | 31 | | |
35 | 32 | | |
36 | 33 | | |
37 | 34 | | |
38 | 35 | | |
39 | 36 | | |
40 | | - | |
| 37 | + | |
41 | 38 | | |
42 | 39 | | |
43 | 40 | | |
| |||
0 commit comments