mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	gh-131525: Cache the result of tuple_hash (#131529)
* gh-131525: Cache the result of tuple_hash * Fix debug builds * Add blurb * Fix formatting * Pre-compute empty tuple singleton * Mostly set the cache within tuple_alloc * Fixes for TSAN * Pre-compute empty tuple singleton * Fix for 32-bit platforms * Assert that op != NULL in _PyTuple_RESET_HASH_CACHE * Use FT_ATOMIC_STORE_SSIZE_RELAXED macro * Update Include/internal/pycore_tuple.h Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> * Fix alignment * atomic load * Update Objects/tupleobject.c Co-authored-by: Chris Eibl <138194463+chris-eibl@users.noreply.github.com> --------- Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> Co-authored-by: Chris Eibl <138194463+chris-eibl@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									cf5e438c02
								
							
						
					
					
						commit
						8614f86b71
					
				
					 102 changed files with 1218 additions and 183 deletions
				
			
		
							
								
								
									
										16
									
								
								Objects/clinic/unicodeobject.c.h
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										16
									
								
								Objects/clinic/unicodeobject.c.h
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -222,9 +222,11 @@ unicode_encode(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject
 | 
			
		|||
    static struct {
 | 
			
		||||
        PyGC_Head _this_is_not_used;
 | 
			
		||||
        PyObject_VAR_HEAD
 | 
			
		||||
        Py_hash_t ob_hash;
 | 
			
		||||
        PyObject *ob_item[NUM_KEYWORDS];
 | 
			
		||||
    } _kwtuple = {
 | 
			
		||||
        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
 | 
			
		||||
        .ob_hash = -1,
 | 
			
		||||
        .ob_item = { &_Py_ID(encoding), &_Py_ID(errors), },
 | 
			
		||||
    };
 | 
			
		||||
    #undef NUM_KEYWORDS
 | 
			
		||||
| 
						 | 
				
			
			@ -316,9 +318,11 @@ unicode_expandtabs(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyOb
 | 
			
		|||
    static struct {
 | 
			
		||||
        PyGC_Head _this_is_not_used;
 | 
			
		||||
        PyObject_VAR_HEAD
 | 
			
		||||
        Py_hash_t ob_hash;
 | 
			
		||||
        PyObject *ob_item[NUM_KEYWORDS];
 | 
			
		||||
    } _kwtuple = {
 | 
			
		||||
        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
 | 
			
		||||
        .ob_hash = -1,
 | 
			
		||||
        .ob_item = { &_Py_ID(tabsize), },
 | 
			
		||||
    };
 | 
			
		||||
    #undef NUM_KEYWORDS
 | 
			
		||||
| 
						 | 
				
			
			@ -934,9 +938,11 @@ unicode_replace(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObjec
 | 
			
		|||
    static struct {
 | 
			
		||||
        PyGC_Head _this_is_not_used;
 | 
			
		||||
        PyObject_VAR_HEAD
 | 
			
		||||
        Py_hash_t ob_hash;
 | 
			
		||||
        PyObject *ob_item[NUM_KEYWORDS];
 | 
			
		||||
    } _kwtuple = {
 | 
			
		||||
        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
 | 
			
		||||
        .ob_hash = -1,
 | 
			
		||||
        .ob_item = { &_Py_ID(count), },
 | 
			
		||||
    };
 | 
			
		||||
    #undef NUM_KEYWORDS
 | 
			
		||||
| 
						 | 
				
			
			@ -1260,9 +1266,11 @@ unicode_split(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject
 | 
			
		|||
    static struct {
 | 
			
		||||
        PyGC_Head _this_is_not_used;
 | 
			
		||||
        PyObject_VAR_HEAD
 | 
			
		||||
        Py_hash_t ob_hash;
 | 
			
		||||
        PyObject *ob_item[NUM_KEYWORDS];
 | 
			
		||||
    } _kwtuple = {
 | 
			
		||||
        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
 | 
			
		||||
        .ob_hash = -1,
 | 
			
		||||
        .ob_item = { &_Py_ID(sep), &_Py_ID(maxsplit), },
 | 
			
		||||
    };
 | 
			
		||||
    #undef NUM_KEYWORDS
 | 
			
		||||
| 
						 | 
				
			
			@ -1383,9 +1391,11 @@ unicode_rsplit(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject
 | 
			
		|||
    static struct {
 | 
			
		||||
        PyGC_Head _this_is_not_used;
 | 
			
		||||
        PyObject_VAR_HEAD
 | 
			
		||||
        Py_hash_t ob_hash;
 | 
			
		||||
        PyObject *ob_item[NUM_KEYWORDS];
 | 
			
		||||
    } _kwtuple = {
 | 
			
		||||
        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
 | 
			
		||||
        .ob_hash = -1,
 | 
			
		||||
        .ob_item = { &_Py_ID(sep), &_Py_ID(maxsplit), },
 | 
			
		||||
    };
 | 
			
		||||
    #undef NUM_KEYWORDS
 | 
			
		||||
| 
						 | 
				
			
			@ -1465,9 +1475,11 @@ unicode_splitlines(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyOb
 | 
			
		|||
    static struct {
 | 
			
		||||
        PyGC_Head _this_is_not_used;
 | 
			
		||||
        PyObject_VAR_HEAD
 | 
			
		||||
        Py_hash_t ob_hash;
 | 
			
		||||
        PyObject *ob_item[NUM_KEYWORDS];
 | 
			
		||||
    } _kwtuple = {
 | 
			
		||||
        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
 | 
			
		||||
        .ob_hash = -1,
 | 
			
		||||
        .ob_item = { &_Py_ID(keepends), },
 | 
			
		||||
    };
 | 
			
		||||
    #undef NUM_KEYWORDS
 | 
			
		||||
| 
						 | 
				
			
			@ -1816,9 +1828,11 @@ unicode_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
 | 
			
		|||
    static struct {
 | 
			
		||||
        PyGC_Head _this_is_not_used;
 | 
			
		||||
        PyObject_VAR_HEAD
 | 
			
		||||
        Py_hash_t ob_hash;
 | 
			
		||||
        PyObject *ob_item[NUM_KEYWORDS];
 | 
			
		||||
    } _kwtuple = {
 | 
			
		||||
        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
 | 
			
		||||
        .ob_hash = -1,
 | 
			
		||||
        .ob_item = { &_Py_ID(object), &_Py_ID(encoding), &_Py_ID(errors), },
 | 
			
		||||
    };
 | 
			
		||||
    #undef NUM_KEYWORDS
 | 
			
		||||
| 
						 | 
				
			
			@ -1894,4 +1908,4 @@ skip_optional_pos:
 | 
			
		|||
exit:
 | 
			
		||||
    return return_value;
 | 
			
		||||
}
 | 
			
		||||
/*[clinic end generated code: output=81d703159f829f1f input=a9049054013a1b77]*/
 | 
			
		||||
/*[clinic end generated code: output=238917fe66120bde input=a9049054013a1b77]*/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue