@@ -35,10 +35,10 @@ define void @pr58722_load_interleave_group(ptr %src, ptr %dst) {
3535; CHECK-NEXT:    [[TMP10:%.*]] = getelementptr inbounds i32, ptr [[TMP5]], i64 1 
3636; CHECK-NEXT:    [[TMP11:%.*]] = getelementptr inbounds i32, ptr [[TMP6]], i64 1 
3737; CHECK-NEXT:    [[TMP12:%.*]] = getelementptr inbounds i32, ptr [[TMP7]], i64 1 
38- ; CHECK-NEXT:    [[TMP13:%.*]] = load i24, ptr [[TMP9]], align 4, !alias.scope !0  
39- ; CHECK-NEXT:    [[TMP14:%.*]] = load i24, ptr [[TMP10]], align 4, !alias.scope !0  
40- ; CHECK-NEXT:    [[TMP15:%.*]] = load i24, ptr [[TMP11]], align 4, !alias.scope !0  
41- ; CHECK-NEXT:    [[TMP16:%.*]] = load i24, ptr [[TMP12]], align 4, !alias.scope !0  
38+ ; CHECK-NEXT:    [[TMP13:%.*]] = load i24, ptr [[TMP9]], align 4, !alias.scope [[META0:![0-9]+]]  
39+ ; CHECK-NEXT:    [[TMP14:%.*]] = load i24, ptr [[TMP10]], align 4, !alias.scope [[META0]]  
40+ ; CHECK-NEXT:    [[TMP15:%.*]] = load i24, ptr [[TMP11]], align 4, !alias.scope [[META0]]  
41+ ; CHECK-NEXT:    [[TMP16:%.*]] = load i24, ptr [[TMP12]], align 4, !alias.scope [[META0]]  
4242; CHECK-NEXT:    [[TMP17:%.*]] = insertelement <4 x i24> poison, i24 [[TMP13]], i32 0 
4343; CHECK-NEXT:    [[TMP18:%.*]] = insertelement <4 x i24> [[TMP17]], i24 [[TMP14]], i32 1 
4444; CHECK-NEXT:    [[TMP19:%.*]] = insertelement <4 x i24> [[TMP18]], i24 [[TMP15]], i32 2 
@@ -47,7 +47,7 @@ define void @pr58722_load_interleave_group(ptr %src, ptr %dst) {
4747; CHECK-NEXT:    [[TMP22:%.*]] = add <4 x i32> [[STRIDED_VEC]], [[TMP21]] 
4848; CHECK-NEXT:    [[TMP23:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 [[TMP0]] 
4949; CHECK-NEXT:    [[TMP24:%.*]] = getelementptr inbounds i32, ptr [[TMP23]], i32 0 
50- ; CHECK-NEXT:    store <4 x i32> [[TMP22]], ptr [[TMP24]], align 4, !alias.scope !3 , !noalias !0  
50+ ; CHECK-NEXT:    store <4 x i32> [[TMP22]], ptr [[TMP24]], align 4, !alias.scope [[META3:![0-9]+]] , !noalias [[META0]]  
5151; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4 
5252; CHECK-NEXT:    [[TMP25:%.*]] = icmp eq i64 [[INDEX_NEXT]], 10000 
5353; CHECK-NEXT:    br i1 [[TMP25]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]] 
@@ -96,17 +96,42 @@ exit:
9696define  void  @pr58722_store_interleave_group (ptr  %src , ptr  %dst ) {
9797; CHECK-LABEL: @pr58722_store_interleave_group( 
9898; CHECK-NEXT:  entry: 
99+ ; CHECK-NEXT:    br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]] 
100+ ; CHECK:       vector.ph: 
101+ ; CHECK-NEXT:    br label [[VECTOR_BODY:%.*]] 
102+ ; CHECK:       vector.body: 
103+ ; CHECK-NEXT:    [[INDEX:%.*]] = phi i32 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ] 
104+ ; CHECK-NEXT:    [[OFFSET_IDX:%.*]] = mul i32 [[INDEX]], 2 
105+ ; CHECK-NEXT:    [[TMP0:%.*]] = add i32 [[OFFSET_IDX]], 0 
106+ ; CHECK-NEXT:    [[TMP1:%.*]] = add i32 [[OFFSET_IDX]], 2 
107+ ; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i64, ptr [[SRC:%.*]], i32 [[TMP0]] 
108+ ; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr inbounds i64, ptr [[SRC]], i32 [[TMP1]] 
109+ ; CHECK-NEXT:    store i32 [[TMP0]], ptr [[TMP2]], align 4 
110+ ; CHECK-NEXT:    store i32 [[TMP1]], ptr [[TMP3]], align 4 
111+ ; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr inbounds i64, ptr [[TMP2]], i64 1 
112+ ; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds i64, ptr [[TMP3]], i64 1 
113+ ; CHECK-NEXT:    [[TMP6:%.*]] = trunc i32 [[TMP0]] to i24 
114+ ; CHECK-NEXT:    [[TMP7:%.*]] = trunc i32 [[TMP1]] to i24 
115+ ; CHECK-NEXT:    store i24 [[TMP6]], ptr [[TMP4]], align 4 
116+ ; CHECK-NEXT:    store i24 [[TMP7]], ptr [[TMP5]], align 4 
117+ ; CHECK-NEXT:    [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 2 
118+ ; CHECK-NEXT:    [[TMP8:%.*]] = icmp eq i32 [[INDEX_NEXT]], 5000 
119+ ; CHECK-NEXT:    br i1 [[TMP8]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP9:![0-9]+]] 
120+ ; CHECK:       middle.block: 
121+ ; CHECK-NEXT:    br i1 false, label [[EXIT:%.*]], label [[SCALAR_PH]] 
122+ ; CHECK:       scalar.ph: 
123+ ; CHECK-NEXT:    [[BC_RESUME_VAL:%.*]] = phi i32 [ 10000, [[MIDDLE_BLOCK]] ], [ 0, [[ENTRY:%.*]] ] 
99124; CHECK-NEXT:    br label [[LOOP:%.*]] 
100125; CHECK:       loop: 
101- ; CHECK-NEXT:    [[IV:%.*]] = phi i32 [ 0 , [[ENTRY:%.* ]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] 
102- ; CHECK-NEXT:    [[GEP_IV:%.*]] = getelementptr inbounds i64, ptr [[SRC:%.* ]], i32 [[IV]] 
126+ ; CHECK-NEXT:    [[IV:%.*]] = phi i32 [ [[BC_RESUME_VAL]] , [[SCALAR_PH ]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ] 
127+ ; CHECK-NEXT:    [[GEP_IV:%.*]] = getelementptr inbounds i64, ptr [[SRC]], i32 [[IV]] 
103128; CHECK-NEXT:    store i32 [[IV]], ptr [[GEP_IV]], align 4 
104129; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds i64, ptr [[GEP_IV]], i64 1 
105130; CHECK-NEXT:    [[TRUNC_IV:%.*]] = trunc i32 [[IV]] to i24 
106131; CHECK-NEXT:    store i24 [[TRUNC_IV]], ptr [[GEP]], align 4 
107132; CHECK-NEXT:    [[IV_NEXT]] = add i32 [[IV]], 2 
108133; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[IV]], 10000 
109- ; CHECK-NEXT:    br i1 [[CMP]], label [[EXIT:%.* ]], label [[LOOP]] 
134+ ; CHECK-NEXT:    br i1 [[CMP]], label [[EXIT]], label [[LOOP]], !llvm.loop [[LOOP10:![0-9]+ ]] 
110135; CHECK:       exit: 
111136; CHECK-NEXT:    ret void 
112137; 
0 commit comments