https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112598
--- Comment #9 from Li Pan <pan2.li at intel dot com> --- Before tracer ------------------------------------------------------------- ENTRY | +-------+ | B2 | +-------+ / \ a < 2 a >= 2 / \ +-----------+ +-----------+ | vec store |----->| _3 = b[1] | +-----------+ +-----------+ / \ _3 != 1 _3 == 1 / \ +--------+ +----------+ | abort | | return 0 | +--------+ +----------+ After tracer ------------------------------------------------------------- ENTRY | +-------+ | B2 | +-------+ / \ a < 2 a >= 2 / \ +-------------+ +-----------+ | vec store | | _3 = b[1] | | | +-----------+ after tracer| | / \ | | _3 != 1 _3 == 1 | _31 = b[1] | / \ +-------------+ +--------+ +----------+ |------>| abort | | return 0 |<---| | +--------+ +----------+ | | | |-----------------------------------------| After tracer, the vec store and scalar load will be in the same basic block and unfortunately referenced to the same memory address. Thus, the sch1 make the scalar load before vec store cause the failure on memory access sequeneces.