diff options
author | Richard Biener <rguenther@suse.de> | 2018-04-27 14:32:09 +0000 |
---|---|---|
committer | Kyrylo Tkachov <ktkachov@gcc.gnu.org> | 2018-04-27 14:32:09 +0000 |
commit | 4bdc2738ce61b5f380930f670709ed9e9cd7cf2a (patch) | |
tree | 2deca801fb70e9fceb92c2c0f69498c8b0935f88 /gcc | |
parent | 036b5ad136407a9a399ee4dc7d33067e0d95672e (diff) | |
download | gcc-4bdc2738ce61b5f380930f670709ed9e9cd7cf2a.zip gcc-4bdc2738ce61b5f380930f670709ed9e9cd7cf2a.tar.gz gcc-4bdc2738ce61b5f380930f670709ed9e9cd7cf2a.tar.bz2 |
Fix aarch64 ILP32 ICE with vaarg gimplified code
2018-04-27 Richard Biener <rguenther@suse.de>
* config/aarch64/aarch64.c: Simplify ap.__stack advance and
fix for ILP32.
From-SVN: r259711
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 10 |
2 files changed, 7 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3ed17c1..4db67b8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2018-04-27 Richard Biener <rguenther@suse.de> + * config/aarch64/aarch64.c: Simplify ap.__stack advance and + fix for ILP32. + +2018-04-27 Richard Biener <rguenther@suse.de> + * tree-cfg.c (verify_expr): Make dead code hit gcc_unreachable. 2018-04-27 Uros Bizjak <ubizjak@gmail.com> diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 4b5183b..8aad9f7 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -12267,23 +12267,17 @@ aarch64_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, if (align > 8) { /* if (alignof(type) > 8) (arg = arg + 15) & -16; */ - t = fold_convert (intDI_type_node, arg); - t = build2 (PLUS_EXPR, TREE_TYPE (t), t, - build_int_cst (TREE_TYPE (t), 15)); + t = fold_build_pointer_plus_hwi (arg, 15); t = build2 (BIT_AND_EXPR, TREE_TYPE (t), t, build_int_cst (TREE_TYPE (t), -16)); - t = fold_convert (TREE_TYPE (arg), t); roundup = build2 (MODIFY_EXPR, TREE_TYPE (arg), arg, t); } else roundup = NULL; /* Advance ap.__stack */ - t = fold_convert (intDI_type_node, arg); - t = build2 (PLUS_EXPR, TREE_TYPE (t), t, - build_int_cst (TREE_TYPE (t), size + 7)); + t = fold_build_pointer_plus_hwi (arg, size + 7); t = build2 (BIT_AND_EXPR, TREE_TYPE (t), t, build_int_cst (TREE_TYPE (t), -8)); - t = fold_convert (TREE_TYPE (arg), t); t = build2 (MODIFY_EXPR, TREE_TYPE (stack), unshare_expr (stack), t); /* String up roundup and advance. */ if (roundup) |