@@ -666,34 +666,54 @@ define void @pr70590_recipe_without_underlying_instr(i64 %n, ptr noalias %dst) {
666666; CHECK-NEXT: [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x i64> [[BROADCAST_SPLATINSERT]], <4 x i64> poison, <4 x i32> zeroinitializer
667667; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
668668; CHECK: [[VECTOR_BODY]]:
669- ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_SREM_CONTINUE6 :.*]] ]
670- ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <4 x i64> [ <i64 0, i64 1, i64 2, i64 3>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[PRED_SREM_CONTINUE6 ]] ]
669+ ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE6 :.*]] ]
670+ ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <4 x i64> [ <i64 0, i64 1, i64 2, i64 3>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[PRED_LOAD_CONTINUE6 ]] ]
671671; CHECK-NEXT: [[TMP0:%.*]] = icmp eq <4 x i64> [[VEC_IND]], [[BROADCAST_SPLAT]]
672672; CHECK-NEXT: [[TMP1:%.*]] = xor <4 x i1> [[TMP0]], splat (i1 true)
673673; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x i1> [[TMP1]], i32 0
674- ; CHECK-NEXT: br i1 [[TMP2]], label %[[PRED_SREM_IF:.*]], label %[[PRED_SREM_CONTINUE:.*]]
675- ; CHECK: [[PRED_SREM_IF]]:
676- ; CHECK-NEXT: br label %[[PRED_SREM_CONTINUE]]
677- ; CHECK: [[PRED_SREM_CONTINUE]]:
674+ ; CHECK-NEXT: br i1 [[TMP2]], label %[[PRED_LOAD_IF:.*]], label %[[PRED_LOAD_CONTINUE:.*]]
675+ ; CHECK: [[PRED_LOAD_IF]]:
676+ ; CHECK-NEXT: [[TMP3:%.*]] = add i64 [[INDEX]], 0
677+ ; CHECK-NEXT: [[TMP4:%.*]] = add i64 [[TMP3]], poison
678+ ; CHECK-NEXT: [[TMP23:%.*]] = getelementptr [5 x i8], ptr @c, i64 0, i64 [[TMP4]]
679+ ; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr [[TMP23]], align 1
680+ ; CHECK-NEXT: [[TMP24:%.*]] = insertelement <4 x i8> poison, i8 [[TMP6]], i32 0
681+ ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]]
682+ ; CHECK: [[PRED_LOAD_CONTINUE]]:
683+ ; CHECK-NEXT: [[TMP8:%.*]] = phi <4 x i8> [ poison, %[[VECTOR_BODY]] ], [ [[TMP24]], %[[PRED_LOAD_IF]] ]
678684; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x i1> [[TMP1]], i32 1
679- ; CHECK-NEXT: br i1 [[TMP5]], label %[[PRED_SREM_IF1:.*]], label %[[PRED_SREM_CONTINUE2:.*]]
680- ; CHECK: [[PRED_SREM_IF1]]:
681- ; CHECK-NEXT: br label %[[PRED_SREM_CONTINUE2]]
682- ; CHECK: [[PRED_SREM_CONTINUE2]]:
685+ ; CHECK-NEXT: br i1 [[TMP5]], label %[[PRED_LOAD_IF1:.*]], label %[[PRED_LOAD_CONTINUE2:.*]]
686+ ; CHECK: [[PRED_LOAD_IF1]]:
687+ ; CHECK-NEXT: [[TMP10:%.*]] = add i64 [[INDEX]], 1
688+ ; CHECK-NEXT: [[TMP11:%.*]] = add i64 [[TMP10]], poison
689+ ; CHECK-NEXT: [[TMP25:%.*]] = getelementptr [5 x i8], ptr @c, i64 0, i64 [[TMP11]]
690+ ; CHECK-NEXT: [[TMP26:%.*]] = load i8, ptr [[TMP25]], align 1
691+ ; CHECK-NEXT: [[TMP14:%.*]] = insertelement <4 x i8> [[TMP8]], i8 [[TMP26]], i32 1
692+ ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE2]]
693+ ; CHECK: [[PRED_LOAD_CONTINUE2]]:
694+ ; CHECK-NEXT: [[TMP29:%.*]] = phi <4 x i8> [ [[TMP8]], %[[PRED_LOAD_CONTINUE]] ], [ [[TMP14]], %[[PRED_LOAD_IF1]] ]
683695; CHECK-NEXT: [[TMP7:%.*]] = extractelement <4 x i1> [[TMP1]], i32 2
684- ; CHECK-NEXT: br i1 [[TMP7]], label %[[PRED_SREM_IF3:.*]], label %[[PRED_SREM_CONTINUE4:.*]]
685- ; CHECK: [[PRED_SREM_IF3]]:
686- ; CHECK-NEXT: br label %[[PRED_SREM_CONTINUE4]]
687- ; CHECK: [[PRED_SREM_CONTINUE4]]:
696+ ; CHECK-NEXT: br i1 [[TMP7]], label %[[PRED_LOAD_IF3:.*]], label %[[PRED_LOAD_CONTINUE4:.*]]
697+ ; CHECK: [[PRED_LOAD_IF3]]:
698+ ; CHECK-NEXT: [[TMP17:%.*]] = add i64 [[INDEX]], 2
699+ ; CHECK-NEXT: [[TMP18:%.*]] = add i64 [[TMP17]], poison
700+ ; CHECK-NEXT: [[TMP19:%.*]] = getelementptr [5 x i8], ptr @c, i64 0, i64 [[TMP18]]
701+ ; CHECK-NEXT: [[TMP20:%.*]] = load i8, ptr [[TMP19]], align 1
702+ ; CHECK-NEXT: [[TMP21:%.*]] = insertelement <4 x i8> [[TMP29]], i8 [[TMP20]], i32 2
703+ ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE4]]
704+ ; CHECK: [[PRED_LOAD_CONTINUE4]]:
705+ ; CHECK-NEXT: [[TMP22:%.*]] = phi <4 x i8> [ [[TMP29]], %[[PRED_LOAD_CONTINUE2]] ], [ [[TMP21]], %[[PRED_LOAD_IF3]] ]
688706; CHECK-NEXT: [[TMP9:%.*]] = extractelement <4 x i1> [[TMP1]], i32 3
689- ; CHECK-NEXT: br i1 [[TMP9]], label %[[PRED_SREM_IF5:.*]], label %[[PRED_SREM_CONTINUE6]]
690- ; CHECK: [[PRED_SREM_IF5]]:
691- ; CHECK-NEXT: br label %[[PRED_SREM_CONTINUE6]]
692- ; CHECK: [[PRED_SREM_CONTINUE6]]:
693- ; CHECK-NEXT: [[TMP12:%.*]] = add i64 [[INDEX]], poison
707+ ; CHECK-NEXT: br i1 [[TMP9]], label %[[PRED_LOAD_IF5:.*]], label %[[PRED_LOAD_CONTINUE6]]
708+ ; CHECK: [[PRED_LOAD_IF5]]:
709+ ; CHECK-NEXT: [[TMP30:%.*]] = add i64 [[INDEX]], 3
710+ ; CHECK-NEXT: [[TMP12:%.*]] = add i64 [[TMP30]], poison
694711; CHECK-NEXT: [[TMP13:%.*]] = getelementptr [5 x i8], ptr @c, i64 0, i64 [[TMP12]]
695- ; CHECK-NEXT: [[TMP14:%.*]] = getelementptr i8, ptr [[TMP13]], i32 0
696- ; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP14]], align 1
712+ ; CHECK-NEXT: [[TMP27:%.*]] = load i8, ptr [[TMP13]], align 1
713+ ; CHECK-NEXT: [[TMP28:%.*]] = insertelement <4 x i8> [[TMP22]], i8 [[TMP27]], i32 3
714+ ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE6]]
715+ ; CHECK: [[PRED_LOAD_CONTINUE6]]:
716+ ; CHECK-NEXT: [[WIDE_LOAD:%.*]] = phi <4 x i8> [ [[TMP22]], %[[PRED_LOAD_CONTINUE4]] ], [ [[TMP28]], %[[PRED_LOAD_IF5]] ]
697717; CHECK-NEXT: [[PREDPHI:%.*]] = select <4 x i1> [[TMP0]], <4 x i8> zeroinitializer, <4 x i8> [[WIDE_LOAD]]
698718; CHECK-NEXT: [[TMP15:%.*]] = getelementptr i8, ptr [[DST]], i64 [[INDEX]]
699719; CHECK-NEXT: [[TMP16:%.*]] = getelementptr i8, ptr [[TMP15]], i32 0
@@ -743,34 +763,54 @@ define void @recipe_without_underlying_instr_lanes_used(i64 %n, ptr noalias %dst
743763; CHECK-NEXT: [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x i64> [[BROADCAST_SPLATINSERT]], <4 x i64> poison, <4 x i32> zeroinitializer
744764; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
745765; CHECK: [[VECTOR_BODY]]:
746- ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_SREM_CONTINUE6 :.*]] ]
747- ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <4 x i64> [ <i64 0, i64 1, i64 2, i64 3>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[PRED_SREM_CONTINUE6 ]] ]
766+ ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE6 :.*]] ]
767+ ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <4 x i64> [ <i64 0, i64 1, i64 2, i64 3>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[PRED_LOAD_CONTINUE6 ]] ]
748768; CHECK-NEXT: [[TMP0:%.*]] = icmp eq <4 x i64> [[VEC_IND]], [[BROADCAST_SPLAT]]
749769; CHECK-NEXT: [[TMP1:%.*]] = xor <4 x i1> [[TMP0]], splat (i1 true)
750770; CHECK-NEXT: [[TMP2:%.*]] = extractelement <4 x i1> [[TMP1]], i32 0
751- ; CHECK-NEXT: br i1 [[TMP2]], label %[[PRED_SREM_IF:.*]], label %[[PRED_SREM_CONTINUE:.*]]
752- ; CHECK: [[PRED_SREM_IF]]:
753- ; CHECK-NEXT: br label %[[PRED_SREM_CONTINUE]]
754- ; CHECK: [[PRED_SREM_CONTINUE]]:
771+ ; CHECK-NEXT: br i1 [[TMP2]], label %[[PRED_LOAD_IF:.*]], label %[[PRED_LOAD_CONTINUE:.*]]
772+ ; CHECK: [[PRED_LOAD_IF]]:
773+ ; CHECK-NEXT: [[TMP9:%.*]] = add i64 [[INDEX]], 0
774+ ; CHECK-NEXT: [[TMP16:%.*]] = add i64 [[TMP9]], poison
775+ ; CHECK-NEXT: [[TMP23:%.*]] = getelementptr [5 x i8], ptr @c, i64 0, i64 [[TMP16]]
776+ ; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr [[TMP23]], align 1
777+ ; CHECK-NEXT: [[TMP24:%.*]] = insertelement <4 x i8> poison, i8 [[TMP6]], i32 0
778+ ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]]
779+ ; CHECK: [[PRED_LOAD_CONTINUE]]:
780+ ; CHECK-NEXT: [[TMP25:%.*]] = phi <4 x i8> [ poison, %[[VECTOR_BODY]] ], [ [[TMP24]], %[[PRED_LOAD_IF]] ]
755781; CHECK-NEXT: [[TMP3:%.*]] = extractelement <4 x i1> [[TMP1]], i32 1
756- ; CHECK-NEXT: br i1 [[TMP3]], label %[[PRED_SREM_IF1:.*]], label %[[PRED_SREM_CONTINUE2:.*]]
757- ; CHECK: [[PRED_SREM_IF1]]:
758- ; CHECK-NEXT: br label %[[PRED_SREM_CONTINUE2]]
759- ; CHECK: [[PRED_SREM_CONTINUE2]]:
782+ ; CHECK-NEXT: br i1 [[TMP3]], label %[[PRED_LOAD_IF1:.*]], label %[[PRED_LOAD_CONTINUE2:.*]]
783+ ; CHECK: [[PRED_LOAD_IF1]]:
784+ ; CHECK-NEXT: [[TMP26:%.*]] = add i64 [[INDEX]], 1
785+ ; CHECK-NEXT: [[TMP29:%.*]] = add i64 [[TMP26]], poison
786+ ; CHECK-NEXT: [[TMP30:%.*]] = getelementptr [5 x i8], ptr @c, i64 0, i64 [[TMP29]]
787+ ; CHECK-NEXT: [[TMP13:%.*]] = load i8, ptr [[TMP30]], align 1
788+ ; CHECK-NEXT: [[TMP14:%.*]] = insertelement <4 x i8> [[TMP25]], i8 [[TMP13]], i32 1
789+ ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE2]]
790+ ; CHECK: [[PRED_LOAD_CONTINUE2]]:
791+ ; CHECK-NEXT: [[TMP15:%.*]] = phi <4 x i8> [ [[TMP25]], %[[PRED_LOAD_CONTINUE]] ], [ [[TMP14]], %[[PRED_LOAD_IF1]] ]
760792; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x i1> [[TMP1]], i32 2
761- ; CHECK-NEXT: br i1 [[TMP4]], label %[[PRED_SREM_IF3:.*]], label %[[PRED_SREM_CONTINUE4:.*]]
762- ; CHECK: [[PRED_SREM_IF3]]:
763- ; CHECK-NEXT: br label %[[PRED_SREM_CONTINUE4]]
764- ; CHECK: [[PRED_SREM_CONTINUE4]]:
793+ ; CHECK-NEXT: br i1 [[TMP4]], label %[[PRED_LOAD_IF3:.*]], label %[[PRED_LOAD_CONTINUE4:.*]]
794+ ; CHECK: [[PRED_LOAD_IF3]]:
795+ ; CHECK-NEXT: [[TMP17:%.*]] = add i64 [[INDEX]], 2
796+ ; CHECK-NEXT: [[TMP18:%.*]] = add i64 [[TMP17]], poison
797+ ; CHECK-NEXT: [[TMP19:%.*]] = getelementptr [5 x i8], ptr @c, i64 0, i64 [[TMP18]]
798+ ; CHECK-NEXT: [[TMP20:%.*]] = load i8, ptr [[TMP19]], align 1
799+ ; CHECK-NEXT: [[TMP21:%.*]] = insertelement <4 x i8> [[TMP15]], i8 [[TMP20]], i32 2
800+ ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE4]]
801+ ; CHECK: [[PRED_LOAD_CONTINUE4]]:
802+ ; CHECK-NEXT: [[TMP22:%.*]] = phi <4 x i8> [ [[TMP15]], %[[PRED_LOAD_CONTINUE2]] ], [ [[TMP21]], %[[PRED_LOAD_IF3]] ]
765803; CHECK-NEXT: [[TMP5:%.*]] = extractelement <4 x i1> [[TMP1]], i32 3
766- ; CHECK-NEXT: br i1 [[TMP5]], label %[[PRED_SREM_IF5:.*]], label %[[PRED_SREM_CONTINUE6]]
767- ; CHECK: [[PRED_SREM_IF5]]:
768- ; CHECK-NEXT: br label %[[PRED_SREM_CONTINUE6]]
769- ; CHECK: [[PRED_SREM_CONTINUE6]]:
770- ; CHECK-NEXT: [[TMP7:%.*]] = add i64 [[INDEX]], poison
804+ ; CHECK-NEXT: br i1 [[TMP5]], label %[[PRED_LOAD_IF5:.*]], label %[[PRED_LOAD_CONTINUE6]]
805+ ; CHECK: [[PRED_LOAD_IF5]]:
806+ ; CHECK-NEXT: [[TMP31:%.*]] = add i64 [[INDEX]], 3
807+ ; CHECK-NEXT: [[TMP7:%.*]] = add i64 [[TMP31]], poison
771808; CHECK-NEXT: [[TMP8:%.*]] = getelementptr [5 x i8], ptr @c, i64 0, i64 [[TMP7]]
772- ; CHECK-NEXT: [[TMP9:%.*]] = getelementptr i8, ptr [[TMP8]], i32 0
773- ; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <4 x i8>, ptr [[TMP9]], align 1
809+ ; CHECK-NEXT: [[TMP27:%.*]] = load i8, ptr [[TMP8]], align 1
810+ ; CHECK-NEXT: [[TMP28:%.*]] = insertelement <4 x i8> [[TMP22]], i8 [[TMP27]], i32 3
811+ ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE6]]
812+ ; CHECK: [[PRED_LOAD_CONTINUE6]]:
813+ ; CHECK-NEXT: [[WIDE_LOAD:%.*]] = phi <4 x i8> [ [[TMP22]], %[[PRED_LOAD_CONTINUE4]] ], [ [[TMP28]], %[[PRED_LOAD_IF5]] ]
774814; CHECK-NEXT: [[PREDPHI:%.*]] = select <4 x i1> [[TMP0]], <4 x i8> zeroinitializer, <4 x i8> [[WIDE_LOAD]]
775815; CHECK-NEXT: [[PREDPHI7:%.*]] = select <4 x i1> [[TMP0]], <4 x i64> zeroinitializer, <4 x i64> poison
776816; CHECK-NEXT: [[TMP12:%.*]] = extractelement <4 x i64> [[PREDPHI7]], i32 3
0 commit comments