Neil Henning 3d4579829e Fix an ordering bug in the scalarizer.
I've added a new test case that causes the scalarizer to try and use
dead-and-erased values - caused by the basic blocks not being in
domination order within the function. To fix this, instead of iterating
through the blocks in function order, I walk them in reverse post order.

Differential Revision: https://reviews.llvm.org/D52540

llvm-svn: 344128
2018-10-10 09:27:45 +00:00

25 lines
491 B
LLVM

; RUN: opt %s -scalarizer -verify -S -o - | FileCheck %s
define void @f3() local_unnamed_addr {
bb1:
br label %bb2
bb3:
; CHECK-LABEL: bb3:
; CHECK-NEXT: br label %bb4
%h.10.0.vec.insert = shufflevector <1 x i16> %h.10.1, <1 x i16> undef, <1 x i32> <i32 0>
br label %bb4
bb2:
; CHECK-LABEL: bb2:
; CHECK: phi i16
%h.10.1 = phi <1 x i16> [ undef, %bb1 ]
br label %bb3
bb4:
; CHECK-LABEL: bb4:
; CHECK: phi i16
%h.10.2 = phi <1 x i16> [ %h.10.0.vec.insert, %bb3 ]
ret void
}