@@ -66,6 +66,71 @@ define void @memset_and_store_2(ptr %ptr, i64 %len) {
66
66
ret void
67
67
}
68
68
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
+
69
134
define void @memcpy_equal_size_values (ptr noalias %src , ptr noalias %dst , i64 %len ) {
70
135
; CHECK-LABEL: @memcpy_equal_size_values(
71
136
; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr [[DST:%.*]], ptr [[SRC:%.*]], i64 [[LEN:%.*]], i1 false)
0 commit comments