target triple = "amd64" @a = external dso_local local_unnamed_addr global i16, align 1 @c = external dso_local global i16, align 1 define void @h() { entry: %.pr = load i16, i16* @a, align 1 %c.promoted = load i16, i16* @c, align 1 %0 = insertelement <4 x i16> , i16 %c.promoted, i32 0 %.splatinsert = insertelement <4 x i16> poison, i16 %.pr, i32 0 %.splat = shufflevector <4 x i16> %.splatinsert, <4 x i16> poison, <4 x i32> zeroinitializer %induction = add <4 x i16> %.splat, %1 = ashr <4 x i16> %induction, select (i1 icmp sgt (i16 ptrtoint (i16* @c to i16), i16 1), <4 x i16> zeroinitializer, <4 x i16> ) %2 = icmp eq <4 x i16> %1, zeroinitializer %3 = zext <4 x i1> %2 to <4 x i16> %4 = sub nsw <4 x i16> zeroinitializer, %3 %5 = and <4 x i16> %0, %4 %bin.rdx = and <4 x i16> %5, undef %bin.rdx6 = and <4 x i16> %bin.rdx, undef %6 = extractelement <4 x i16> %bin.rdx6, i32 0 store i16 %6, i16* @c, align 1 ret void }