backport: re PR tree-optimization/40168 (finding common subexpressions)
2009-06-14 Richard Guenther <rguenther@suse.de> Backport from mainline 2009-05-18 Richard Guenther <rguenther@suse.de> PR fortran/40168 * trans-expr.c (gfc_trans_zero_assign): For local array destinations use an assignment from an empty constructor. * gfortran.dg/array_memset_2.f90: Adjust. From-SVN: r148469
This commit is contained in:
parent
462ee08d96
commit
98b7f9857d
|
@ -1,3 +1,12 @@
|
|||
2009-06-14 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
Backport from mainline
|
||||
2009-05-18 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR fortran/40168
|
||||
* trans-expr.c (gfc_trans_zero_assign): For local array
|
||||
destinations use an assignment from an empty constructor.
|
||||
|
||||
2009-06-04 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
|
||||
PR fortran/39893
|
||||
|
|
|
@ -4399,11 +4399,14 @@ gfc_trans_zero_assign (gfc_expr * expr)
|
|||
len = fold_build2 (MULT_EXPR, gfc_array_index_type, len,
|
||||
fold_convert (gfc_array_index_type, tmp));
|
||||
|
||||
/* Convert arguments to the correct types. */
|
||||
/* If we are zeroing a local array avoid taking its address by emitting
|
||||
a = {} instead. */
|
||||
if (!POINTER_TYPE_P (TREE_TYPE (dest)))
|
||||
dest = gfc_build_addr_expr (pvoid_type_node, dest);
|
||||
else
|
||||
dest = fold_convert (pvoid_type_node, dest);
|
||||
return build2 (MODIFY_EXPR, void_type_node,
|
||||
dest, build_constructor (TREE_TYPE (dest), NULL));
|
||||
|
||||
/* Convert arguments to the correct types. */
|
||||
dest = fold_convert (pvoid_type_node, dest);
|
||||
len = fold_convert (size_type_node, len);
|
||||
|
||||
/* Construct call to __builtin_memset. */
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
2009-06-14 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
Backport from mainline
|
||||
2009-05-18 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR fortran/40168
|
||||
* gfortran.dg/array_memset_2.f90: Adjust.
|
||||
|
||||
2009-06-09 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* g++.dg/cpp0x/defaulted10.C: New.
|
||||
|
|
|
@ -20,8 +20,8 @@ program test
|
|||
data c /2*1.0/
|
||||
|
||||
a(1,:) = 0. ! This can't be optimized to a memset.
|
||||
b(1,:) = 0. ! This is optimized to memset.
|
||||
c = 0. ! This is optimized to memset.
|
||||
b(1,:) = 0. ! This is optimized to = {}.
|
||||
c = 0. ! This is optimized to = {}.
|
||||
d(:,1) = 0. ! This can't be otimized to a memset.
|
||||
call bar(e)
|
||||
|
||||
|
@ -33,6 +33,6 @@ program test
|
|||
|
||||
end program
|
||||
|
||||
! { dg-final { scan-tree-dump-times "memset" 2 "original" } }
|
||||
! { dg-final { scan-tree-dump-times "= {}" 2 "original" } }
|
||||
! { dg-final { cleanup-tree-dump "original" } }
|
||||
! { dg-final { cleanup-modules "foo" } }
|
||||
|
|
Loading…
Reference in New Issue