re PR tree-optimization/40168 (finding common subexpressions)
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: r147659
This commit is contained in:
parent
ab7256e4ce
commit
bfa31dad8a
@ -1,3 +1,9 @@
|
||||
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-05-18 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/36947
|
||||
|
@ -4428,11 +4428,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,8 @@
|
||||
2009-05-18 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR fortran/40168
|
||||
* gfortran.dg/array_memset_2.f90: Adjust.
|
||||
|
||||
2009-05-18 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/36947
|
||||
|
@ -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
Block a user