@@ -27,11 +27,9 @@ entry:
27
27
define void @medium_memset_to_rep_stos (ptr %ptr ) minsize nounwind {
28
28
; CHECK-LABEL: medium_memset_to_rep_stos:
29
29
; CHECK: # %bb.0: # %entry
30
- ; CHECK-NEXT: pushq %rax
31
- ; CHECK-NEXT: movl $512, %edx # imm = 0x200
32
- ; CHECK-NEXT: xorl %esi, %esi
33
- ; CHECK-NEXT: callq memset@PLT
34
- ; CHECK-NEXT: popq %rax
30
+ ; CHECK-NEXT: movl $128, %ecx
31
+ ; CHECK-NEXT: xorl %eax, %eax
32
+ ; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)
35
33
; CHECK-NEXT: retq
36
34
entry:
37
35
call void @llvm.memset.p0.i32 (ptr align 4 %ptr , i8 0 , i32 512 , i1 false )
@@ -41,11 +39,9 @@ entry:
41
39
define void @large_memset_to_rep_stos (ptr %ptr ) minsize nounwind {
42
40
; CHECK-LABEL: large_memset_to_rep_stos:
43
41
; CHECK: # %bb.0: # %entry
44
- ; CHECK-NEXT: pushq %rax
45
- ; CHECK-NEXT: movl $4096, %edx # imm = 0x1000
46
- ; CHECK-NEXT: xorl %esi, %esi
47
- ; CHECK-NEXT: callq memset@PLT
48
- ; CHECK-NEXT: popq %rax
42
+ ; CHECK-NEXT: movl $1024, %ecx # imm = 0x400
43
+ ; CHECK-NEXT: xorl %eax, %eax
44
+ ; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)
49
45
; CHECK-NEXT: retq
50
46
entry:
51
47
call void @llvm.memset.p0.i32 (ptr align 4 %ptr , i8 0 , i32 4096 , i1 false )
@@ -55,11 +51,9 @@ entry:
55
51
define void @huge_memset_to_rep_stos (ptr %ptr ) minsize nounwind {
56
52
; CHECK-LABEL: huge_memset_to_rep_stos:
57
53
; CHECK: # %bb.0: # %entry
58
- ; CHECK-NEXT: pushq %rax
59
- ; CHECK-NEXT: movl $8192, %edx # imm = 0x2000
60
- ; CHECK-NEXT: xorl %esi, %esi
61
- ; CHECK-NEXT: callq memset@PLT
62
- ; CHECK-NEXT: popq %rax
54
+ ; CHECK-NEXT: movl $2048, %ecx # imm = 0x800
55
+ ; CHECK-NEXT: xorl %eax, %eax
56
+ ; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)
63
57
; CHECK-NEXT: retq
64
58
entry:
65
59
call void @llvm.memset.p0.i32 (ptr align 4 %ptr , i8 0 , i32 8192 , i1 false )
@@ -69,11 +63,9 @@ entry:
69
63
define void @odd_length_memset_to_rep_stos (ptr %ptr ) minsize nounwind {
70
64
; CHECK-LABEL: odd_length_memset_to_rep_stos:
71
65
; CHECK: # %bb.0: # %entry
72
- ; CHECK-NEXT: pushq %rax
73
- ; CHECK-NEXT: movl $255, %edx
74
- ; CHECK-NEXT: xorl %esi, %esi
75
- ; CHECK-NEXT: callq memset@PLT
76
- ; CHECK-NEXT: popq %rax
66
+ ; CHECK-NEXT: movl $255, %ecx
67
+ ; CHECK-NEXT: xorl %eax, %eax
68
+ ; CHECK-NEXT: rep;stosb %al, %es:(%rdi)
77
69
; CHECK-NEXT: retq
78
70
entry:
79
71
call void @llvm.memset.p0.i32 (ptr align 4 %ptr , i8 0 , i32 255 , i1 false )
@@ -83,11 +75,10 @@ entry:
83
75
define void @align_1_memset_to_rep_stos (ptr %ptr ) minsize nounwind {
84
76
; CHECK-LABEL: align_1_memset_to_rep_stos:
85
77
; CHECK: # %bb.0: # %entry
86
- ; CHECK-NEXT: pushq %rax
87
- ; CHECK-NEXT: movl $256, %edx # imm = 0x100
88
- ; CHECK-NEXT: xorl %esi, %esi
89
- ; CHECK-NEXT: callq memset@PLT
90
- ; CHECK-NEXT: popq %rax
78
+ ; CHECK-NEXT: pushq $64
79
+ ; CHECK-NEXT: popq %rcx
80
+ ; CHECK-NEXT: xorl %eax, %eax
81
+ ; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)
91
82
; CHECK-NEXT: retq
92
83
entry:
93
84
call void @llvm.memset.p0.i32 (ptr align 1 %ptr , i8 0 , i32 256 , i1 false )
@@ -97,11 +88,10 @@ entry:
97
88
define void @align_2_memset_to_rep_stos (ptr %ptr ) minsize nounwind {
98
89
; CHECK-LABEL: align_2_memset_to_rep_stos:
99
90
; CHECK: # %bb.0: # %entry
100
- ; CHECK-NEXT: pushq %rax
101
- ; CHECK-NEXT: movl $256, %edx # imm = 0x100
102
- ; CHECK-NEXT: xorl %esi, %esi
103
- ; CHECK-NEXT: callq memset@PLT
104
- ; CHECK-NEXT: popq %rax
91
+ ; CHECK-NEXT: pushq $64
92
+ ; CHECK-NEXT: popq %rcx
93
+ ; CHECK-NEXT: xorl %eax, %eax
94
+ ; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)
105
95
; CHECK-NEXT: retq
106
96
entry:
107
97
call void @llvm.memset.p0.i32 (ptr align 2 %ptr , i8 0 , i32 256 , i1 false )
@@ -111,11 +101,10 @@ entry:
111
101
define void @align_4_memset_to_rep_stos (ptr %ptr ) minsize nounwind {
112
102
; CHECK-LABEL: align_4_memset_to_rep_stos:
113
103
; CHECK: # %bb.0: # %entry
114
- ; CHECK-NEXT: pushq %rax
115
- ; CHECK-NEXT: movl $256, %edx # imm = 0x100
116
- ; CHECK-NEXT: xorl %esi, %esi
117
- ; CHECK-NEXT: callq memset@PLT
118
- ; CHECK-NEXT: popq %rax
104
+ ; CHECK-NEXT: pushq $64
105
+ ; CHECK-NEXT: popq %rcx
106
+ ; CHECK-NEXT: xorl %eax, %eax
107
+ ; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)
119
108
; CHECK-NEXT: retq
120
109
entry:
121
110
call void @llvm.memset.p0.i32 (ptr align 4 %ptr , i8 0 , i32 256 , i1 false )
@@ -125,11 +114,10 @@ entry:
125
114
define void @align_8_memset_to_rep_stos (ptr %ptr ) minsize nounwind {
126
115
; CHECK-LABEL: align_8_memset_to_rep_stos:
127
116
; CHECK: # %bb.0: # %entry
128
- ; CHECK-NEXT: pushq %rax
129
- ; CHECK-NEXT: movl $256, %edx # imm = 0x100
130
- ; CHECK-NEXT: xorl %esi, %esi
131
- ; CHECK-NEXT: callq memset@PLT
132
- ; CHECK-NEXT: popq %rax
117
+ ; CHECK-NEXT: pushq $64
118
+ ; CHECK-NEXT: popq %rcx
119
+ ; CHECK-NEXT: xorl %eax, %eax
120
+ ; CHECK-NEXT: rep;stosl %eax, %es:(%rdi)
133
121
; CHECK-NEXT: retq
134
122
entry:
135
123
call void @llvm.memset.p0.i32 (ptr align 8 %ptr , i8 0 , i32 256 , i1 false )
@@ -139,10 +127,10 @@ entry:
139
127
define void @small_memset_to_rep_stos_64 (ptr %ptr ) minsize nounwind {
140
128
; CHECK-LABEL: small_memset_to_rep_stos_64:
141
129
; CHECK: # %bb.0: # %entry
142
- ; CHECK-NEXT: pushq $16
130
+ ; CHECK-NEXT: pushq $32
143
131
; CHECK-NEXT: popq %rcx
144
132
; CHECK-NEXT: xorl %eax, %eax
145
- ; CHECK-NEXT: rep;stosq %rax , %es:(%rdi)
133
+ ; CHECK-NEXT: rep;stosl %eax , %es:(%rdi)
146
134
; CHECK-NEXT: retq
147
135
entry:
148
136
call void @llvm.memset.p0.i64 (ptr align 8 %ptr , i8 0 , i64 128 , i1 false )
0 commit comments