Changeset 249215 in webkit
- Timestamp:
- Aug 28, 2019, 12:51:06 PM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
-
ChangeLog (modified) (1 diff)
-
Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp (modified) (1 diff)
-
Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp (modified) (10 diffs)
-
Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r249214 r249215 1 2019-08-28 Truitt Savell <tsavell@apple.com> 2 3 Unreviewed, rolling out r249209. 4 5 Broke 19 webgpu/ tests 6 7 Reverted changeset: 8 9 "[WHLSL] Inline typedef'd types during Metal code generation 10 to simplify generated code while also making it easier to 11 read" 12 https://bugs.webkit.org/show_bug.cgi?id=201185 13 https://trac.webkit.org/changeset/249209 14 1 15 2019-08-28 Myles C. Maxfield <mmaxfield@apple.com> 2 16 -
trunk/Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp
r249209 r249215 526 526 { 527 527 auto valueName = generateNextVariableName(); 528 automangledTypeName = m_typeNamer.mangledNameForType(globalVariableReference.resolvedType());528 MangledTypeName mangledTypeName = m_typeNamer.mangledNameForType(globalVariableReference.resolvedType()); 529 529 530 530 checkErrorAndVisit(globalVariableReference.base()); 531 531 MangledVariableName structVariable = takeLastValue(); 532 532 533 automangledFieldName = m_typeNamer.mangledNameForStructureElement(globalVariableReference.structField());533 MangledStructureElementName mangledFieldName = m_typeNamer.mangledNameForStructureElement(globalVariableReference.structField()); 534 534 535 535 m_stringBuilder.append( -
trunk/Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp
r249209 r249215 119 119 void TypeNamer::visit(AST::TypeDefinition& typeDefinition) 120 120 { 121 { 122 auto addResult = m_namedTypeMapping.add(&typeDefinition, generateNextTypeName()); 123 ASSERT_UNUSED(addResult, addResult.isNewEntry); 124 } 121 125 Visitor::visit(typeDefinition); 122 126 { … … 143 147 } 144 148 149 static AST::UnnamedType* parent(AST::UnnamedType& unnamedType) 150 { 151 switch (unnamedType.kind()) { 152 case AST::UnnamedType::Kind::TypeReference: 153 return nullptr; 154 case AST::UnnamedType::Kind::Pointer: 155 return &downcast<AST::PointerType>(unnamedType).elementType(); 156 case AST::UnnamedType::Kind::ArrayReference: 157 return &downcast<AST::ArrayReferenceType>(unnamedType).elementType(); 158 case AST::UnnamedType::Kind::Array: 159 return &downcast<AST::ArrayType>(unnamedType).type(); 160 default: 161 RELEASE_ASSERT_NOT_REACHED(); 162 } 163 } 164 145 165 void TypeNamer::generateUniquedTypeName(AST::UnnamedType& unnamedType) 146 166 { 147 if (is<AST::ArrayReferenceType>(unnamedType)) { 148 m_arrayReferenceTypeMapping.ensure(UnnamedTypeKey { unnamedType }, [&] { 149 return generateNextTypeName(); 150 }); 151 } 167 auto* parentUnnamedType = parent(unnamedType); 168 if (parentUnnamedType) 169 generateUniquedTypeName(*parentUnnamedType); 170 171 m_unnamedTypeMapping.ensure(UnnamedTypeKey { unnamedType }, [&] { 172 return generateNextTypeName(); 173 }); 152 174 } 153 175 … … 179 201 } 180 202 181 void TypeNamer::emitUnnamedTypeDefinition(StringBuilder& stringBuilder, AST::UnnamedType& unnamedType, Mangled OrNativeTypeName mangledName, HashSet<AST::NamedType*>& emittedNamedTypes, HashSet<UnnamedTypeKey>& emittedUnnamedTypes)203 void TypeNamer::emitUnnamedTypeDefinition(StringBuilder& stringBuilder, AST::UnnamedType& unnamedType, MangledTypeName mangledName, HashSet<AST::NamedType*>& emittedNamedTypes, HashSet<UnnamedTypeKey>& emittedUnnamedTypes) 182 204 { 183 205 if (emittedUnnamedTypes.contains(UnnamedTypeKey { unnamedType })) … … 186 208 switch (unnamedType.kind()) { 187 209 case AST::UnnamedType::Kind::TypeReference: { 210 auto& typeReference = downcast<AST::TypeReference>(unnamedType); 211 212 auto& parent = typeReference.resolvedType(); 213 auto parentMangledName = mangledNameForType(typeReference.resolvedType()); 214 auto iterator = m_dependencyGraph.find(&parent); 215 ASSERT(iterator != m_dependencyGraph.end()); 216 emitNamedTypeDefinition(stringBuilder, parent, iterator->value, emittedNamedTypes, emittedUnnamedTypes); 217 218 stringBuilder.append("typedef ", parentMangledName, ' ', mangledName, ";\n"); 188 219 break; 189 220 } 190 221 case AST::UnnamedType::Kind::Pointer: { 191 break; 192 } 193 case AST::UnnamedType::Kind::Array: { 222 auto& pointerType = downcast<AST::PointerType>(unnamedType); 223 224 auto& parent = pointerType.elementType(); 225 auto parentMangledName = mangledNameForType(parent); 226 emitUnnamedTypeDefinition(stringBuilder, parent, parentMangledName, emittedNamedTypes, emittedUnnamedTypes); 227 228 stringBuilder.append("typedef ", toString(pointerType.addressSpace()), ' ', parentMangledName, "* ", mangledName, ";\n"); 194 229 break; 195 230 } … … 197 232 auto& arrayReferenceType = downcast<AST::ArrayReferenceType>(unnamedType); 198 233 199 auto& elementType= arrayReferenceType.elementType();200 auto elementTypeMangledName = mangledNameForType(elementType);201 emitUnnamedTypeDefinition(stringBuilder, elementType, elementTypeMangledName, emittedNamedTypes, emittedUnnamedTypes);234 auto& parent = arrayReferenceType.elementType(); 235 auto parentMangledName = mangledNameForType(parent); 236 emitUnnamedTypeDefinition(stringBuilder, parent, parentMangledName, emittedNamedTypes, emittedUnnamedTypes); 202 237 203 238 stringBuilder.append( 204 239 "struct ", mangledName, " {\n" 205 " ", toString(arrayReferenceType.addressSpace()), ' ', elementTypeMangledName, "* pointer;\n"240 " ", toString(arrayReferenceType.addressSpace()), ' ', parentMangledName, "* pointer;\n" 206 241 " uint32_t length;\n" 207 242 "};\n" … … 209 244 break; 210 245 } 246 case AST::UnnamedType::Kind::Array: { 247 auto& arrayType = downcast<AST::ArrayType>(unnamedType); 248 249 auto& parent = arrayType.type(); 250 auto parentMangledName = mangledNameForType(parent); 251 emitUnnamedTypeDefinition(stringBuilder, parent, parentMangledName, emittedNamedTypes, emittedUnnamedTypes); 252 253 stringBuilder.append("typedef array<", parentMangledName, ", ", arrayType.numElements(), "> ", mangledName, ";\n"); 254 break; 255 } 211 256 default: 212 257 RELEASE_ASSERT_NOT_REACHED(); … … 225 270 226 271 switch (namedType.kind()) { 227 case AST::NamedType::Kind::NativeTypeDeclaration: {228 // Native types already have definitions. There's nothing to do.229 break;230 }231 case AST::NamedType::Kind::TypeDefinition: {232 // The mangled name of a AST::TypeDefinition looks through to the underlying type. There is nothing to do.233 break;234 }235 272 case AST::NamedType::Kind::EnumerationDefinition: { 236 273 auto& enumerationDefinition = downcast<AST::EnumerationDefinition>(namedType); … … 243 280 break; 244 281 } 282 case AST::NamedType::Kind::NativeTypeDeclaration: { 283 // Native types already have definitions. There's nothing to do. 284 break; 285 } 245 286 case AST::NamedType::Kind::StructureDefinition: { 246 287 auto& structureDefinition = downcast<AST::StructureDefinition>(namedType); … … 252 293 break; 253 294 } 295 case AST::NamedType::Kind::TypeDefinition: { 296 auto& typeDefinition = downcast<AST::TypeDefinition>(namedType); 297 298 stringBuilder.append("typedef ", mangledNameForType(typeDefinition.type()), ' ', mangledNameForType(typeDefinition), ";\n"); 299 break; 300 } 254 301 default: 255 302 RELEASE_ASSERT_NOT_REACHED(); … … 265 312 for (auto& [namedType, neighbors] : m_dependencyGraph) 266 313 emitNamedTypeDefinition(stringBuilder, *namedType, neighbors, emittedNamedTypes, emittedUnnamedTypes); 267 for (auto& [unnamedTypeKey, mangledName] : m_ arrayReferenceTypeMapping)314 for (auto& [unnamedTypeKey, mangledName] : m_unnamedTypeMapping) 268 315 emitUnnamedTypeDefinition(stringBuilder, unnamedTypeKey.unnamedType(), mangledName, emittedNamedTypes, emittedUnnamedTypes); 269 316 } 270 317 271 MangledOrNativeTypeName TypeNamer::mangledNameForType(AST::UnnamedType& unnamedType) 272 { 273 switch (unnamedType.kind()) { 274 case AST::UnnamedType::Kind::TypeReference: { 275 auto& typeReference = downcast<AST::TypeReference>(unnamedType); 276 return mangledNameForType(typeReference.resolvedType()); 277 } 278 case AST::UnnamedType::Kind::Pointer: { 279 auto& pointerType = downcast<AST::PointerType>(unnamedType); 280 return m_lazyUnnamedTypeCache.ensure(UnnamedTypeKey { unnamedType }, [&] { 281 return makeString(toString(pointerType.addressSpace()), ' ', mangledNameForType(pointerType.elementType()), '*'); 282 }).iterator->value; 283 } 284 case AST::UnnamedType::Kind::Array: { 285 auto& arrayType = downcast<AST::ArrayType>(unnamedType); 286 return m_lazyUnnamedTypeCache.ensure(UnnamedTypeKey { unnamedType }, [&] { 287 return makeString("array<", mangledNameForType(arrayType.type()), ", ", arrayType.numElements(), '>'); 288 }).iterator->value; 289 } 290 case AST::UnnamedType::Kind::ArrayReference: { 291 auto iterator = m_arrayReferenceTypeMapping.find(UnnamedTypeKey { unnamedType }); 292 ASSERT(iterator != m_arrayReferenceTypeMapping.end()); 293 return iterator->value; 294 } 295 default: 296 RELEASE_ASSERT_NOT_REACHED(); 297 } 318 MangledTypeName TypeNamer::mangledNameForType(AST::UnnamedType& unnamedType) 319 { 320 auto iterator = m_unnamedTypeMapping.find(UnnamedTypeKey { unnamedType }); 321 ASSERT(iterator != m_unnamedTypeMapping.end()); 322 return iterator->value; 298 323 } 299 324 300 325 MangledOrNativeTypeName TypeNamer::mangledNameForType(AST::NamedType& namedType) 301 326 { 302 switch (namedType.kind()) { 303 case AST::NamedType::Kind::NativeTypeDeclaration: { 327 if (is<AST::NativeTypeDeclaration>(namedType)) 304 328 return mangledNameForType(downcast<AST::NativeTypeDeclaration>(namedType)); 305 } 306 case AST::NamedType::Kind::TypeDefinition: { 307 return mangledNameForType(downcast<AST::TypeDefinition>(namedType).type()); 308 } 309 case AST::NamedType::Kind::EnumerationDefinition: 310 case AST::NamedType::Kind::StructureDefinition: { 311 auto iterator = m_namedTypeMapping.find(&namedType); 312 ASSERT(iterator != m_namedTypeMapping.end()); 313 return iterator->value; 314 } 315 default: 316 RELEASE_ASSERT_NOT_REACHED(); 317 } 329 auto iterator = m_namedTypeMapping.find(&namedType); 330 ASSERT(iterator != m_namedTypeMapping.end()); 331 return iterator->value; 318 332 } 319 333 -
trunk/Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.h
r249209 r249215 65 65 // Must be called after calling emitMetalTypes(). 66 66 String mangledNameForType(AST::NativeTypeDeclaration&); 67 Mangled OrNativeTypeName mangledNameForType(AST::UnnamedType&);67 MangledTypeName mangledNameForType(AST::UnnamedType&); 68 68 MangledOrNativeTypeName mangledNameForType(AST::NamedType&); 69 69 MangledEnumerationMemberName mangledNameForEnumerationMember(AST::EnumerationMember&); … … 85 85 86 86 void emitNamedTypeDefinition(StringBuilder&, AST::NamedType&, Vector<std::reference_wrapper<AST::UnnamedType>>&, HashSet<AST::NamedType*>& emittedNamedTypes, HashSet<UnnamedTypeKey>& emittedUnnamedTypes); 87 void emitUnnamedTypeDefinition(StringBuilder&, AST::UnnamedType&, Mangled OrNativeTypeName, HashSet<AST::NamedType*>& emittedNamedTypes, HashSet<UnnamedTypeKey>& emittedUnnamedTypes);87 void emitUnnamedTypeDefinition(StringBuilder&, AST::UnnamedType&, MangledTypeName, HashSet<AST::NamedType*>& emittedNamedTypes, HashSet<UnnamedTypeKey>& emittedUnnamedTypes); 88 88 void emitMetalTypeDeclarations(StringBuilder&); 89 89 void emitMetalTypeDefinitions(StringBuilder&); … … 92 92 93 93 Program& m_program; 94 HashMap<UnnamedTypeKey, MangledTypeName> m_arrayReferenceTypeMapping; 95 HashMap<UnnamedTypeKey, String> m_lazyUnnamedTypeCache; 94 HashMap<UnnamedTypeKey, MangledTypeName> m_unnamedTypeMapping; 96 95 HashMap<AST::NamedType*, MangledTypeName> m_namedTypeMapping; 97 96 HashMap<AST::NamedType*, Vector<std::reference_wrapper<AST::UnnamedType>>> m_dependencyGraph;
Note:
See TracChangeset
for help on using the changeset viewer.