-
Notifications
You must be signed in to change notification settings - Fork 8k
Commit 2c5ed50
* zend_compile: Rename `string_placeholder_count` to `placeholder_count` in `zend_compile_func_sprintf()`
This is intended to make the diff of a follow-up commit smaller.
* zend_compile: Add support for `%d` to `sprintf()` optimization
This extends the existing `sprintf()` optimization by support for the `%d`
placeholder, which effectively equivalent to an `(int)` cast followed by a
`(string)` cast.
For a synthetic test using:
<?php
$a = 'foo';
$b = 42;
for ($i = 0; $i < 100_000_000; $i++) {
sprintf("%s-%d", $a, $b);
}
This optimization yields a ×ばつ performance improvement:
$ hyperfine 'sapi/cli/php -d zend_extension=php-src/modules/opcache.so -d opcache.enable_cli=1 test.php' \
'/tmp/unoptimized -d zend_extension=php-src/modules/opcache.so -d opcache.enable_cli=1 test.php'
Benchmark 1: sapi/cli/php -d zend_extension=php-src/modules/opcache.so -d opcache.enable_cli=1 test.php
Time (mean ± σ): 3.296 s ± 0.094 s [User: 3.287 s, System: 0.005 s]
Range (min ... max): 3.213 s ... 3.527 s 10 runs
Benchmark 2: /tmp/unoptimized -d zend_extension=php-src/modules/opcache.so -d opcache.enable_cli=1 test.php
Time (mean ± σ): 4.300 s ± 0.025 s [User: 4.290 s, System: 0.007 s]
Range (min ... max): 4.266 s ... 4.334 s 10 runs
Summary
sapi/cli/php -d zend_extension=php-src/modules/opcache.so -d opcache.enable_cli=1 test.php ran
1.30 ± 0.04 times faster than /tmp/unoptimized -d zend_extension=php-src/modules/opcache.so -d opcache.enable_cli=1 test.php
* Fix sprintf_rope_optimization_003.phpt test expecation for 32-bit integers
* zend_compile: Indent switch-case labels in zend_compile_func_sprintf()
* Add GMP test to sprintf() rope optimization
* Add `%s` test case to sprintf() GMP test
1 parent 9d3907f commit 2c5ed50
File tree
4 files changed
+198
-30
lines changed- Zend
- ext/standard/tests/strings
4 files changed
+198
-30
lines changedOriginal file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
4739 | 4739 |
| |
4740 | 4740 |
| |
4741 | 4741 |
| |
4742 | - | ||
4742 | + | ||
4743 | 4743 |
| |
4744 | - | ||
4744 | + | ||
4745 | 4745 |
| |
4746 | 4746 |
| |
4747 | 4747 |
| |
| |||
4757 | 4757 |
| |
4758 | 4758 |
| |
4759 | 4759 |
| |
4760 | - | ||
4761 | - | ||
4762 | - | ||
4763 | - | ||
4764 | - | ||
4765 | - | ||
4766 | - | ||
4760 | + | ||
4761 | + | ||
4762 | + | ||
4763 | + | ||
4764 | + | ||
4765 | + | ||
4766 | + | ||
4767 | + | ||
4767 | 4768 |
| |
4768 | 4769 |
| |
4769 | 4770 |
| |
4770 | 4771 |
| |
4771 | 4772 |
| |
4772 | 4773 |
| |
4773 | 4774 |
| |
4774 | - | ||
4775 | + | ||
4775 | 4776 |
| |
4776 | 4777 |
| |
4777 | 4778 |
| |
| |||
4785 | 4786 |
| |
4786 | 4787 |
| |
4787 | 4788 |
| |
4788 | - | ||
4789 | - | ||
4789 | + | ||
4790 | + | ||
4790 | 4791 |
| |
4791 | 4792 |
| |
4792 | 4793 |
| |
4793 | 4794 |
| |
4794 | 4795 |
| |
4795 | - | ||
4796 | + | ||
4796 | 4797 |
| |
4797 | - | ||
4798 | - | ||
4799 | - | ||
4800 | - | ||
4801 | - | ||
4802 | 4798 |
| |
4803 | 4799 |
| |
4804 | 4800 |
| |
4805 | 4801 |
| |
4806 | 4802 |
| |
4807 | 4803 |
| |
4808 | - | ||
4804 | + | ||
4809 | 4805 |
| |
4810 | 4806 |
| |
4811 | 4807 |
| |
| |||
4817 | 4813 |
| |
4818 | 4814 |
| |
4819 | 4815 |
| |
4820 | - | ||
4816 | + | ||
4821 | 4817 |
| |
4822 | 4818 |
| |
4823 | 4819 |
| |
| |||
4837 | 4833 |
| |
4838 | 4834 |
| |
4839 | 4835 |
| |
4840 | - | ||
4841 | - | ||
4842 | - | ||
4843 | - | ||
4844 | - | ||
4845 | - | ||
4846 | - | ||
4847 | - | ||
4836 | + | ||
4837 | + | ||
4838 | + | ||
4839 | + | ||
4840 | + | ||
4841 | + | ||
4842 | + | ||
4843 | + | ||
4844 | + | ||
4845 | + | ||
4846 | + | ||
4847 | + | ||
4848 | + | ||
4849 | + | ||
4850 | + | ||
4851 | + | ||
4852 | + | ||
4853 | + | ||
4848 | 4854 |
| |
4855 | + | ||
4849 | 4856 |
| |
4850 | 4857 |
| |
4851 | 4858 |
| |
4852 | - | ||
4859 | + | ||
4853 | 4860 |
| |
4854 | - | ||
4861 | + | ||
4855 | 4862 |
| |
4856 | 4863 |
| |
4857 | 4864 |
| |
|
Lines changed: 6 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
100 | 100 |
| |
101 | 101 |
| |
102 | 102 |
| |
103 | + | ||
104 | + | ||
105 | + | ||
106 | + | ||
103 | 107 |
| |
104 | 108 |
| |
105 | 109 |
| |
| |||
173 | 177 |
| |
174 | 178 |
| |
175 | 179 |
| |
180 | + | ||
181 | + | ||
176 | 182 |
|
Lines changed: 134 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1 | + | ||
2 | + | ||
3 | + | ||
4 | + | ||
5 | + | ||
6 | + | ||
7 | + | ||
8 | + | ||
9 | + | ||
10 | + | ||
11 | + | ||
12 | + | ||
13 | + | ||
14 | + | ||
15 | + | ||
16 | + | ||
17 | + | ||
18 | + | ||
19 | + | ||
20 | + | ||
21 | + | ||
22 | + | ||
23 | + | ||
24 | + | ||
25 | + | ||
26 | + | ||
27 | + | ||
28 | + | ||
29 | + | ||
30 | + | ||
31 | + | ||
32 | + | ||
33 | + | ||
34 | + | ||
35 | + | ||
36 | + | ||
37 | + | ||
38 | + | ||
39 | + | ||
40 | + | ||
41 | + | ||
42 | + | ||
43 | + | ||
44 | + | ||
45 | + | ||
46 | + | ||
47 | + | ||
48 | + | ||
49 | + | ||
50 | + | ||
51 | + | ||
52 | + | ||
53 | + | ||
54 | + | ||
55 | + | ||
56 | + | ||
57 | + | ||
58 | + | ||
59 | + | ||
60 | + | ||
61 | + | ||
62 | + | ||
63 | + | ||
64 | + | ||
65 | + | ||
66 | + | ||
67 | + | ||
68 | + | ||
69 | + | ||
70 | + | ||
71 | + | ||
72 | + | ||
73 | + | ||
74 | + | ||
75 | + | ||
76 | + | ||
77 | + | ||
78 | + | ||
79 | + | ||
80 | + | ||
81 | + | ||
82 | + | ||
83 | + | ||
84 | + | ||
85 | + | ||
86 | + | ||
87 | + | ||
88 | + | ||
89 | + | ||
90 | + | ||
91 | + | ||
92 | + | ||
93 | + | ||
94 | + | ||
95 | + | ||
96 | + | ||
97 | + | ||
98 | + | ||
99 | + | ||
100 | + | ||
101 | + | ||
102 | + | ||
103 | + | ||
104 | + | ||
105 | + | ||
106 | + | ||
107 | + | ||
108 | + | ||
109 | + | ||
110 | + | ||
111 | + | ||
112 | + | ||
113 | + | ||
114 | + | ||
115 | + | ||
116 | + | ||
117 | + | ||
118 | + | ||
119 | + | ||
120 | + | ||
121 | + | ||
122 | + | ||
123 | + | ||
124 | + | ||
125 | + | ||
126 | + | ||
127 | + | ||
128 | + | ||
129 | + | ||
130 | + | ||
131 | + | ||
132 | + | ||
133 | + | ||
134 | + |
Lines changed: 21 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1 | + | ||
2 | + | ||
3 | + | ||
4 | + | ||
5 | + | ||
6 | + | ||
7 | + | ||
8 | + | ||
9 | + | ||
10 | + | ||
11 | + | ||
12 | + | ||
13 | + | ||
14 | + | ||
15 | + | ||
16 | + | ||
17 | + | ||
18 | + | ||
19 | + | ||
20 | + | ||
21 | + |
0 commit comments