aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-04-27 14:32:09 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2018-04-27 14:32:09 +0000
commit4bdc2738ce61b5f380930f670709ed9e9cd7cf2a (patch)
tree2deca801fb70e9fceb92c2c0f69498c8b0935f88
parent036b5ad136407a9a399ee4dc7d33067e0d95672e (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/aarch64/aarch64.c10
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)