@@ -326,43 +326,46 @@ define void @single_fmul_used_by_each_member(ptr noalias %A, ptr noalias %B, ptr
326326; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
327327; CHECK: [[VECTOR_BODY]]:
328328; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
329- ; CHECK-NEXT: [[TMP21:%.*]] = add i64 [[INDEX]], 1
330329; CHECK-NEXT: [[TMP20:%.*]] = add i64 [[INDEX]], 2
331- ; CHECK-NEXT: [[TMP22:%.*]] = add i64 [[INDEX]], 3
330+ ; CHECK-NEXT: [[TMP21:%.*]] = add i64 [[INDEX]], 4
331+ ; CHECK-NEXT: [[TMP22:%.*]] = add i64 [[INDEX]], 6
332332; CHECK-NEXT: [[TMP23:%.*]] = getelementptr double, ptr [[A]], i64 [[INDEX]]
333- ; CHECK-NEXT: [[TMP24:%.*]] = load double, ptr [[TMP23]], align 8
334- ; CHECK-NEXT: [[BROADCAST_SPLATINSERT1:%.*]] = insertelement <2 x double> poison, double [[TMP24]], i64 0
335- ; CHECK-NEXT: [[WIDE_LOAD:%.*]] = shufflevector <2 x double> [[BROADCAST_SPLATINSERT1]], <2 x double> poison, <2 x i32> zeroinitializer
336- ; CHECK-NEXT: [[TMP25:%.*]] = load double, ptr [[TMP23]], align 8
337- ; CHECK-NEXT: [[BROADCAST_SPLATINSERT12:%.*]] = insertelement <2 x double> poison, double [[TMP25]], i64 0
338- ; CHECK-NEXT: [[WIDE_LOAD12:%.*]] = shufflevector <2 x double> [[BROADCAST_SPLATINSERT12]], <2 x double> poison, <2 x i32> zeroinitializer
339- ; CHECK-NEXT: [[TMP26:%.*]] = load double, ptr [[TMP23]], align 8
340- ; CHECK-NEXT: [[BROADCAST_SPLATINSERT14:%.*]] = insertelement <2 x double> poison, double [[TMP26]], i64 0
341- ; CHECK-NEXT: [[WIDE_LOAD13:%.*]] = shufflevector <2 x double> [[BROADCAST_SPLATINSERT14]], <2 x double> poison, <2 x i32> zeroinitializer
342- ; CHECK-NEXT: [[TMP27:%.*]] = load double, ptr [[TMP23]], align 8
343- ; CHECK-NEXT: [[BROADCAST_SPLATINSERT16:%.*]] = insertelement <2 x double> poison, double [[TMP27]], i64 0
344- ; CHECK-NEXT: [[WIDE_LOAD14:%.*]] = shufflevector <2 x double> [[BROADCAST_SPLATINSERT16]], <2 x double> poison, <2 x i32> zeroinitializer
333+ ; CHECK-NEXT: [[TMP25:%.*]] = getelementptr double, ptr [[TMP23]], i32 2
334+ ; CHECK-NEXT: [[TMP26:%.*]] = getelementptr double, ptr [[TMP23]], i32 4
335+ ; CHECK-NEXT: [[TMP27:%.*]] = getelementptr double, ptr [[TMP23]], i32 6
336+ ; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x double>, ptr [[TMP23]], align 8
337+ ; CHECK-NEXT: [[WIDE_LOAD12:%.*]] = load <2 x double>, ptr [[TMP25]], align 8
338+ ; CHECK-NEXT: [[WIDE_LOAD13:%.*]] = load <2 x double>, ptr [[TMP26]], align 8
339+ ; CHECK-NEXT: [[WIDE_LOAD14:%.*]] = load <2 x double>, ptr [[TMP27]], align 8
345340; CHECK-NEXT: [[TMP28:%.*]] = fmul <2 x double> [[WIDE_LOAD]], splat (double 5.000000e+00)
346341; CHECK-NEXT: [[TMP29:%.*]] = fmul <2 x double> [[WIDE_LOAD12]], splat (double 5.000000e+00)
347342; CHECK-NEXT: [[TMP30:%.*]] = fmul <2 x double> [[WIDE_LOAD13]], splat (double 5.000000e+00)
348343; CHECK-NEXT: [[TMP31:%.*]] = fmul <2 x double> [[WIDE_LOAD14]], splat (double 5.000000e+00)
349344; CHECK-NEXT: [[TMP32:%.*]] = getelementptr { double, double }, ptr [[B]], i64 [[INDEX]]
345+ ; CHECK-NEXT: [[TMP33:%.*]] = getelementptr { double, double }, ptr [[B]], i64 [[TMP20]]
350346; CHECK-NEXT: [[TMP34:%.*]] = getelementptr { double, double }, ptr [[B]], i64 [[TMP21]]
351- ; CHECK-NEXT: [[TMP36:%.*]] = getelementptr { double, double }, ptr [[B]], i64 [[TMP20]]
352347; CHECK-NEXT: [[TMP35:%.*]] = getelementptr { double, double }, ptr [[B]], i64 [[TMP22]]
353- ; CHECK-NEXT: store <2 x double> [[TMP28]], ptr [[TMP32]], align 8
354- ; CHECK-NEXT: store <2 x double> [[TMP29]], ptr [[TMP34]], align 8
355- ; CHECK-NEXT: store <2 x double> [[TMP30]], ptr [[TMP36]], align 8
356- ; CHECK-NEXT: store <2 x double> [[TMP31]], ptr [[TMP35]], align 8
348+ ; CHECK-NEXT: [[TMP36:%.*]] = shufflevector <2 x double> [[TMP28]], <2 x double> [[TMP28]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
349+ ; CHECK-NEXT: [[INTERLEAVED_VEC:%.*]] = shufflevector <4 x double> [[TMP36]], <4 x double> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
350+ ; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC]], ptr [[TMP32]], align 8
351+ ; CHECK-NEXT: [[TMP37:%.*]] = shufflevector <2 x double> [[TMP29]], <2 x double> [[TMP29]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
352+ ; CHECK-NEXT: [[INTERLEAVED_VEC15:%.*]] = shufflevector <4 x double> [[TMP37]], <4 x double> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
353+ ; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC15]], ptr [[TMP33]], align 8
354+ ; CHECK-NEXT: [[TMP38:%.*]] = shufflevector <2 x double> [[TMP30]], <2 x double> [[TMP30]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
355+ ; CHECK-NEXT: [[INTERLEAVED_VEC16:%.*]] = shufflevector <4 x double> [[TMP38]], <4 x double> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
356+ ; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC16]], ptr [[TMP34]], align 8
357+ ; CHECK-NEXT: [[TMP39:%.*]] = shufflevector <2 x double> [[TMP31]], <2 x double> [[TMP31]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
358+ ; CHECK-NEXT: [[INTERLEAVED_VEC17:%.*]] = shufflevector <4 x double> [[TMP39]], <4 x double> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
359+ ; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC17]], ptr [[TMP35]], align 8
357360; CHECK-NEXT: [[TMP40:%.*]] = getelementptr { double, double }, ptr [[C]], i64 [[INDEX]]
361+ ; CHECK-NEXT: [[TMP41:%.*]] = getelementptr { double, double }, ptr [[C]], i64 [[TMP20]]
358362; CHECK-NEXT: [[TMP42:%.*]] = getelementptr { double, double }, ptr [[C]], i64 [[TMP21]]
359- ; CHECK-NEXT: [[TMP38:%.*]] = getelementptr { double, double }, ptr [[C]], i64 [[TMP20]]
360363; CHECK-NEXT: [[TMP43:%.*]] = getelementptr { double, double }, ptr [[C]], i64 [[TMP22]]
361- ; CHECK-NEXT: store <2 x double> [[TMP28 ]], ptr [[TMP40]], align 8
362- ; CHECK-NEXT: store <2 x double> [[TMP29 ]], ptr [[TMP42 ]], align 8
363- ; CHECK-NEXT: store <2 x double> [[TMP30 ]], ptr [[TMP38 ]], align 8
364- ; CHECK-NEXT: store <2 x double> [[TMP31 ]], ptr [[TMP43]], align 8
365- ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
364+ ; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC ]], ptr [[TMP40]], align 8
365+ ; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC15 ]], ptr [[TMP41 ]], align 8
366+ ; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC16 ]], ptr [[TMP42 ]], align 8
367+ ; CHECK-NEXT: store <4 x double> [[INTERLEAVED_VEC17 ]], ptr [[TMP43]], align 8
368+ ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 8
366369; CHECK-NEXT: [[TMP44:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
367370; CHECK-NEXT: br i1 [[TMP44]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]]
368371; CHECK: [[MIDDLE_BLOCK]]:
0 commit comments