diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2011-07-19 12:37:03 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2011-07-19 12:37:03 +0000 |
commit | 1b14d8150ed4a7194e3d63b262454e9b9446fe95 (patch) | |
tree | 385291f03f96ddd5e27e38e3699d4190262d85a3 /gcc/tree-data-ref.c | |
parent | aaa7ad908187c88cf4eeaee10f0af1eb0b73e7f1 (diff) | |
download | gcc-1b14d8150ed4a7194e3d63b262454e9b9446fe95.zip gcc-1b14d8150ed4a7194e3d63b262454e9b9446fe95.tar.gz gcc-1b14d8150ed4a7194e3d63b262454e9b9446fe95.tar.bz2 |
re PR tree-optimization/49742 (ICE for gcc.dg/vect/O3-pr39675-2.c on ARM)
gcc/
PR tree-optimization/49742
* tree-data-ref.c (get_references_in_stmt): Treat the lhs of a call
as a potential write.
From-SVN: r176446
Diffstat (limited to 'gcc/tree-data-ref.c')
-rw-r--r-- | gcc/tree-data-ref.c | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index d58542c..97be86c 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -4158,33 +4158,37 @@ get_references_in_stmt (gimple stmt, VEC (data_ref_loc, heap) **references) ref->pos = op1; ref->is_read = true; } - - if (DECL_P (*op0) - || (REFERENCE_CLASS_P (*op0) && get_base_address (*op0))) - { - ref = VEC_safe_push (data_ref_loc, heap, *references, NULL); - ref->pos = op0; - ref->is_read = false; - } } else if (stmt_code == GIMPLE_CALL) { - unsigned i, n = gimple_call_num_args (stmt); + unsigned i, n; + op0 = gimple_call_lhs_ptr (stmt); + n = gimple_call_num_args (stmt); for (i = 0; i < n; i++) { - op0 = gimple_call_arg_ptr (stmt, i); + op1 = gimple_call_arg_ptr (stmt, i); - if (DECL_P (*op0) - || (REFERENCE_CLASS_P (*op0) && get_base_address (*op0))) + if (DECL_P (*op1) + || (REFERENCE_CLASS_P (*op1) && get_base_address (*op1))) { ref = VEC_safe_push (data_ref_loc, heap, *references, NULL); - ref->pos = op0; + ref->pos = op1; ref->is_read = true; } } } + else + return clobbers_memory; + if (*op0 + && (DECL_P (*op0) + || (REFERENCE_CLASS_P (*op0) && get_base_address (*op0)))) + { + ref = VEC_safe_push (data_ref_loc, heap, *references, NULL); + ref->pos = op0; + ref->is_read = false; + } return clobbers_memory; } |