Changeset 144131 in webkit for trunk/Source/JavaScriptCore/dfg/DFGVariableAccessData.h
- Timestamp:
- Feb 26, 2013, 5:45:28 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGVariableAccessData.h
r143955 r144131 1 1 /* 2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved.2 * Copyright (C) 2011, 2012, 2013 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 51 51 , m_isArgumentsAlias(false) 52 52 , m_structureCheckHoistingFailed(false) 53 , m_isProfitableToUnbox(false) 53 54 , m_doubleFormatState(EmptyDoubleFormatState) 54 55 { … … 65 66 , m_isArgumentsAlias(false) 66 67 , m_structureCheckHoistingFailed(false) 68 , m_isProfitableToUnbox(false) 67 69 , m_doubleFormatState(EmptyDoubleFormatState) 68 70 { … … 83 85 bool mergeIsCaptured(bool isCaptured) 84 86 { 85 m_shouldNeverUnbox |= isCaptured; 86 bool newIsCaptured = m_isCaptured | isCaptured; 87 if (newIsCaptured == m_isCaptured) 88 return false; 89 m_isCaptured = newIsCaptured; 90 return true; 87 return checkAndSet(m_shouldNeverUnbox, m_shouldNeverUnbox | isCaptured) 88 | checkAndSet(m_isCaptured, m_isCaptured | isCaptured); 91 89 } 92 90 … … 94 92 { 95 93 return m_isCaptured; 94 } 95 96 bool mergeIsProfitableToUnbox(bool isProfitableToUnbox) 97 { 98 return checkAndSet(m_isProfitableToUnbox, m_isProfitableToUnbox | isProfitableToUnbox); 99 } 100 101 bool isProfitableToUnbox() 102 { 103 return m_isProfitableToUnbox; 96 104 } 97 105 … … 119 127 bool shouldUnboxIfPossible() 120 128 { 121 return !shouldNeverUnbox() ;122 } 123 129 return !shouldNeverUnbox() && isProfitableToUnbox(); 130 } 131 124 132 bool mergeStructureCheckHoistingFailed(bool failed) 125 133 { 126 bool newFailed = m_structureCheckHoistingFailed | failed; 127 if (newFailed == m_structureCheckHoistingFailed) 128 return false; 129 m_structureCheckHoistingFailed = newFailed; 130 return true; 134 return checkAndSet(m_structureCheckHoistingFailed, m_structureCheckHoistingFailed | failed); 131 135 } 132 136 … … 138 142 bool mergeIsArgumentsAlias(bool isArgumentsAlias) 139 143 { 140 bool newIsArgumentsAlias = m_isArgumentsAlias | isArgumentsAlias; 141 if (newIsArgumentsAlias == m_isArgumentsAlias) 142 return false; 143 m_isArgumentsAlias = newIsArgumentsAlias; 144 return true; 144 return checkAndSet(m_isArgumentsAlias, m_isArgumentsAlias | isArgumentsAlias); 145 145 } 146 146 … … 240 240 { 241 241 ASSERT(isRoot()); 242 bool result= m_doubleFormatState == UsingDoubleFormat;243 ASSERT(!( result&& shouldNeverUnbox()));244 ASSERT(!( result&& isCaptured()));245 return result;242 bool doubleState = m_doubleFormatState == UsingDoubleFormat; 243 ASSERT(!(doubleState && shouldNeverUnbox())); 244 ASSERT(!(doubleState && isCaptured())); 245 return doubleState && isProfitableToUnbox(); 246 246 } 247 247 … … 288 288 bool mergeFlags(NodeFlags newFlags) 289 289 { 290 newFlags |= m_flags; 291 if (newFlags == m_flags) 292 return false; 293 m_flags = newFlags; 294 return true; 290 return checkAndSet(m_flags, m_flags | newFlags); 295 291 } 296 292 … … 305 301 SpeculatedType m_argumentAwarePrediction; 306 302 NodeFlags m_flags; 307 303 308 304 bool m_isCaptured; 309 305 bool m_shouldNeverUnbox; 310 306 bool m_isArgumentsAlias; 311 307 bool m_structureCheckHoistingFailed; 308 bool m_isProfitableToUnbox; 312 309 313 310 float m_votes[2]; // Used primarily for double voting but may be reused for other purposes.
Note:
See TracChangeset
for help on using the changeset viewer.