------- Comment #2 from eyal at geomage dot com 2008-02-07 10:36 ------- Yes the loop is vectorized. What do you mean by memory bound? dont you think that vectorization can help here? I see around 20% performance gain in the real application.
Bellow is the compiler output: Eyal.cpp:34: note: dependence distance = 0. Eyal.cpp:34: note: accesses have the same alignment. Eyal.cpp:34: note: dependence distance modulo vf == 0 between *D.22353_81 and *D.22353_81 Eyal.cpp:34: note: versioning for alias required: can't determine dependence between *D.22353_81 and *D.22365_101 Eyal.cpp:34: note: mark for run-time aliasing test between *D.22353_81 and *D.22365_101 Eyal.cpp:34: note: versioning for alias required: can't determine dependence between *D.22355_85 and *D.22353_81 Eyal.cpp:34: note: mark for run-time aliasing test between *D.22355_85 and *D.22353_81 Eyal.cpp:34: note: versioning for alias required: can't determine dependence between *D.22355_85 and *D.22365_101 Eyal.cpp:34: note: mark for run-time aliasing test between *D.22355_85 and *D.22365_101 Eyal.cpp:34: note: versioning for alias required: can't determine dependence between *D.22361_92 and *D.22353_81 Eyal.cpp:34: note: mark for run-time aliasing test between *D.22361_92 and *D.22353_81 Eyal.cpp:34: note: versioning for alias required: can't determine dependence between *D.22361_92 and *D.22365_101 Eyal.cpp:34: note: mark for run-time aliasing test between *D.22361_92 and *D.22365_101 Eyal.cpp:34: note: versioning for alias required: can't determine dependence between *D.22353_81 and *D.22365_101 Eyal.cpp:34: note: mark for run-time aliasing test between *D.22353_81 and *D.22365_101 Eyal.cpp:34: note: versioning for alias required: can't determine dependence between *D.22353_81 and *D.22367_105 Eyal.cpp:34: note: mark for run-time aliasing test between *D.22353_81 and *D.22367_105 Eyal.cpp:34: note: versioning for alias required: can't determine dependence between *D.22353_81 and *D.22371_112 Eyal.cpp:34: note: mark for run-time aliasing test between *D.22353_81 and *D.22371_112 Eyal.cpp:34: note: versioning for alias required: can't determine dependence between *D.22353_81 and *D.22365_101 Eyal.cpp:34: note: mark for run-time aliasing test between *D.22353_81 and *D.22365_101 Eyal.cpp:34: note: dependence distance = 0. Eyal.cpp:34: note: accesses have the same alignment. Eyal.cpp:34: note: dependence distance modulo vf == 0 between *D.22365_101 and *D.22365_101 Eyal.cpp:34: note: versioning for alias required: can't determine dependence between *D.22367_105 and *D.22365_101 Eyal.cpp:34: note: mark for run-time aliasing test between *D.22367_105 and *D.22365_101 Eyal.cpp:34: note: versioning for alias required: can't determine dependence between *D.22371_112 and *D.22365_101 Eyal.cpp:34: note: mark for run-time aliasing test between *D.22371_112 and *D.22365_101 Eyal.cpp:34: note: found equal ranges *D.22353_81, *D.22365_101 and *D.22353_81, *D.22365_101 Eyal.cpp:34: note: found equal ranges *D.22353_81, *D.22365_101 and *D.22353_81, *D.22365_101 Eyal.cpp:34: note: === vect_analyze_slp === Eyal.cpp:34: note: === vect_make_slp_decision === Eyal.cpp:34: note: === vect_detect_hybrid_slp === Eyal.cpp:34: note: Alignment of access forced using versioning. Eyal.cpp:34: note: Alignment of access forced using versioning. Eyal.cpp:34: note: Vectorizing an unaligned access. Eyal.cpp:34: note: Vectorizing an unaligned access. Eyal.cpp:34: note: Vectorizing an unaligned access. Eyal.cpp:34: note: Vectorizing an unaligned access. Eyal.cpp:34: note: Vectorizing an unaligned access. Eyal.cpp:34: note: Vectorizing an unaligned access. Eyal.cpp:34: note: === vect_update_slp_costs_according_to_vf ===(analyze_scalar_evolution Eyal.cpp:34: note: create runtime check for data references *D.22353_81 and *D.22365_101 Eyal.cpp:34: note: create runtime check for data references *D.22355_85 and *D.22353_81 Eyal.cpp:34: note: create runtime check for data references *D.22355_85 and *D.22365_101 Eyal.cpp:34: note: create runtime check for data references *D.22361_92 and *D.22353_81 Eyal.cpp:34: note: create runtime check for data references *D.22361_92 and *D.22365_101 Eyal.cpp:34: note: create runtime check for data references *D.22353_81 and *D.22367_105 Eyal.cpp:34: note: create runtime check for data references *D.22353_81 and *D.22371_112 Eyal.cpp:34: note: create runtime check for data references *D.22367_105 and *D.22365_101 Eyal.cpp:34: note: create runtime check for data references *D.22371_112 and *D.22365_101 Eyal.cpp:34: note: created 9 versioning for alias checks. Eyal.cpp:34: note: LOOP VECTORIZED.(get_loop_exit_condition -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35117