@@ -35,10 +35,10 @@ define void @pr58722_load_interleave_group(ptr %src, ptr %dst) {
35
35
; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i32, ptr [[TMP5]], i64 1
36
36
; CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds i32, ptr [[TMP6]], i64 1
37
37
; 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]]
42
42
; CHECK-NEXT: [[TMP17:%.*]] = insertelement <4 x i24> poison, i24 [[TMP13]], i32 0
43
43
; CHECK-NEXT: [[TMP18:%.*]] = insertelement <4 x i24> [[TMP17]], i24 [[TMP14]], i32 1
44
44
; 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) {
47
47
; CHECK-NEXT: [[TMP22:%.*]] = add <4 x i32> [[STRIDED_VEC]], [[TMP21]]
48
48
; CHECK-NEXT: [[TMP23:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 [[TMP0]]
49
49
; 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]]
51
51
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
52
52
; CHECK-NEXT: [[TMP25:%.*]] = icmp eq i64 [[INDEX_NEXT]], 10000
53
53
; CHECK-NEXT: br i1 [[TMP25]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP5:![0-9]+]]
@@ -96,17 +96,42 @@ exit:
96
96
define void @pr58722_store_interleave_group (ptr %src , ptr %dst ) {
97
97
; CHECK-LABEL: @pr58722_store_interleave_group(
98
98
; 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:%.*]] ]
99
124
; CHECK-NEXT: br label [[LOOP:%.*]]
100
125
; 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]]
103
128
; CHECK-NEXT: store i32 [[IV]], ptr [[GEP_IV]], align 4
104
129
; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i64, ptr [[GEP_IV]], i64 1
105
130
; CHECK-NEXT: [[TRUNC_IV:%.*]] = trunc i32 [[IV]] to i24
106
131
; CHECK-NEXT: store i24 [[TRUNC_IV]], ptr [[GEP]], align 4
107
132
; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 2
108
133
; 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]+ ]]
110
135
; CHECK: exit:
111
136
; CHECK-NEXT: ret void
112
137
;
0 commit comments