@@ -66,6 +66,82 @@ define void @memset_and_store_2(ptr %ptr, i64 %len) {
6666 ret void
6767}
6868
69+ define void @memset_pattern_equal_size_values (ptr %ptr , i64 %len ) {
70+ ; CHECK-LABEL: @memset_pattern_equal_size_values(
71+ ; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 [[LEN:%.*]], i1 false)
72+ ; CHECK-NEXT: ret void
73+ ;
74+ call void @llvm.experimental.memset.pattern.p0.i8.i64 (ptr align 1 %ptr , i8 0 , i64 %len , i1 false )
75+ call void @llvm.experimental.memset.pattern.p0.i8.i64 (ptr align 1 %ptr , i8 0 , i64 %len , i1 false )
76+ ret void
77+ }
78+
79+ define void @memset_pattern_different_size_values_1 (ptr %ptr , i64 %len.1 , i64 %len.2 ) {
80+ ; CHECK-LABEL: @memset_pattern_different_size_values_1(
81+ ; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 [[LEN_1:%.*]], i1 false)
82+ ; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR]], i8 0, i64 [[LEN_2:%.*]], i1 false)
83+ ; CHECK-NEXT: ret void
84+ ;
85+ call void @llvm.experimental.memset.pattern.p0.i8.i64 (ptr align 1 %ptr , i8 0 , i64 %len.1 , i1 false )
86+ call void @llvm.experimental.memset.pattern.p0.i8.i64 (ptr align 1 %ptr , i8 0 , i64 %len.2 , i1 false )
87+ ret void
88+ }
89+
90+ define void @memset_pattern_different_size_values_2 (ptr %ptr , i64 %len ) {
91+ ; CHECK-LABEL: @memset_pattern_different_size_values_2(
92+ ; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 [[LEN:%.*]], i1 false)
93+ ; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR]], i8 0, i64 100, i1 false)
94+ ; CHECK-NEXT: ret void
95+ ;
96+ call void @llvm.experimental.memset.pattern.p0.i8.i64 (ptr align 1 %ptr , i8 0 , i64 %len , i1 false )
97+ call void @llvm.experimental.memset.pattern.p0.i8.i64 (ptr align 1 %ptr , i8 0 , i64 100 , i1 false )
98+ ret void
99+ }
100+
101+ define void @memset_pattern_different_size_values_3 (ptr %ptr , i64 %len ) {
102+ ; CHECK-LABEL: @memset_pattern_different_size_values_3(
103+ ; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 100, i1 false)
104+ ; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR]], i8 0, i64 [[LEN:%.*]], i1 false)
105+ ; CHECK-NEXT: ret void
106+ ;
107+ call void @llvm.experimental.memset.pattern.p0.i8.i64 (ptr align 1 %ptr , i8 0 , i64 100 , i1 false )
108+ call void @llvm.experimental.memset.pattern.p0.i8.i64 (ptr align 1 %ptr , i8 0 , i64 %len , i1 false )
109+ ret void
110+ }
111+
112+ define void @memset_pattern_and_store_1 (ptr %ptr , i64 %len ) {
113+ ; CHECK-LABEL: @memset_pattern_and_store_1(
114+ ; CHECK-NEXT: store i64 123, ptr [[PTR:%.*]], align 4
115+ ; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR]], i8 0, i64 [[LEN:%.*]], i1 false)
116+ ; CHECK-NEXT: ret void
117+ ;
118+ store i64 123 , ptr %ptr
119+ call void @llvm.experimental.memset.pattern.p0.i8.i64 (ptr align 1 %ptr , i8 0 , i64 %len , i1 false )
120+ ret void
121+ }
122+
123+ define void @memset_pattern_and_store_2 (ptr %ptr , i64 %len ) {
124+ ; CHECK-LABEL: @memset_pattern_and_store_2(
125+ ; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR:%.*]], i8 0, i64 [[LEN:%.*]], i1 false)
126+ ; CHECK-NEXT: store i64 123, ptr [[PTR]], align 4
127+ ; CHECK-NEXT: ret void
128+ ;
129+ call void @llvm.experimental.memset.pattern.p0.i8.i64 (ptr align 1 %ptr , i8 0 , i64 %len , i1 false )
130+ store i64 123 , ptr %ptr
131+ ret void
132+ }
133+
134+ define void @memset_pattern_and_store_3 (ptr %ptr ) {
135+ ; CHECK-LABEL: @memset_pattern_and_store_3(
136+ ; CHECK-NEXT: store i64 0, ptr [[PTR:%.*]], align 4
137+ ; CHECK-NEXT: call void @llvm.experimental.memset.pattern.p0.i8.i64(ptr align 1 [[PTR]], i8 0, i64 13, i1 false)
138+ ; CHECK-NEXT: ret void
139+ ;
140+ store i64 0 , ptr %ptr
141+ call void @llvm.experimental.memset.pattern.p0.i8.i64 (ptr align 1 %ptr , i8 0 , i64 13 , i1 false )
142+ ret void
143+ }
144+
69145define void @memcpy_equal_size_values (ptr noalias %src , ptr noalias %dst , i64 %len ) {
70146; CHECK-LABEL: @memcpy_equal_size_values(
71147; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN:%.*]], i1 false)
0 commit comments