Changeset 248994 in webkit
- Timestamp:
- Aug 21, 2019 7:55:32 PM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r248993 r248994 1 2019-08-21 Saam Barati <sbarati@apple.com> 2 3 [WHLSL] Improve default constructor and emit fewer pointers in metal codegen 4 https://bugs.webkit.org/show_bug.cgi?id=200995 5 6 Reviewed by Myles C. Maxfield. 7 8 This patch makes it so that we: 9 1. Emit less code for copy constructors by omitting an unused variable. 10 2. Emit ternary expressions instead of if statements for conditional assignments. 11 3. Don't copy pointers for producing an lvalue from DereferenceExpression. 12 4. Lazily produce lvalues for GlobalVariableReference. 13 14 * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp: 15 (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit): 16 * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp: 17 (WebCore::WHLSL::Metal::inlineNativeFunction): 18 1 19 2019-08-21 Myles C. Maxfield <mmaxfield@apple.com> 2 20 -
trunk/Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp
r248993 r248994 536 536 m_indent, mangledTypeName, ' ', valueName, " = ", structVariable, "->", mangledFieldName, ";\n"); 537 537 538 Indentation<4> indent = m_indent;539 538 appendLeftValue(globalVariableReference, valueName, { }, Nullability::NotNull, 540 [this, mangledTypeName, structVariable, mangledFieldName , indent] {539 [this, mangledTypeName, structVariable, mangledFieldName] { 541 540 auto pointerName = generateNextVariableName(); 542 541 m_stringBuilder.append( 543 indent, "thread ", mangledTypeName, "* ", pointerName, " = &", structVariable, "->", mangledFieldName, ";\n");542 m_indent, "thread ", mangledTypeName, "* ", pointerName, " = &", structVariable, "->", mangledFieldName, ";\n"); 544 543 return pointerName; 545 544 }); … … 650 649 auto [inputPointer, nullability] = takeLastValueAndNullability(); 651 650 auto resultValue = generateNextVariableName(); 652 auto resultPointer = generateNextVariableName(); 653 654 m_stringBuilder.append( 655 m_indent, m_typeNamer.mangledNameForType(dereferenceExpression.pointer().resolvedType()), ' ', resultPointer, " = ", inputPointer, ";\n", 656 m_indent, m_typeNamer.mangledNameForType(dereferenceExpression.resolvedType()), ' ', resultValue, ";\n"); 651 auto resultType = m_typeNamer.mangledNameForType(dereferenceExpression.resolvedType()); 652 657 653 if (nullability == Nullability::CanBeNull) { 658 654 m_stringBuilder.append( 659 m_indent, "if (", resultPointer, ")\n", 660 m_indent, " ", resultValue, " = *", resultPointer, ";\n", 661 m_indent, "else\n", 662 m_indent, " ", resultValue, " = { };\n" 663 ); 655 m_indent, resultType , ' ', resultValue, " = ", inputPointer, " ? ", '*', inputPointer, " : ", resultType, "{ };\n"); 664 656 } else 665 657 m_stringBuilder.append(m_indent, resultValue, " = *", inputPointer, ";\n"); 666 appendLeftValue(dereferenceExpression, resultValue, resultPointer, nullability); 658 659 appendLeftValue(dereferenceExpression, resultValue, inputPointer, nullability); 667 660 } 668 661 … … 712 705 auto ptrValue = takeLastValue(); 713 706 m_stringBuilder.append( 714 m_indent, mangledTypeName, ' ', variableName, ";\n", 715 m_indent, "if (", ptrValue, ")\n", 716 m_indent, " ", variableName, " = { ", ptrValue, ", 1};\n", 717 m_indent, "else\n", 718 m_indent, " ", variableName, " = { nullptr, 0 };\n" 719 ); 707 m_indent, mangledTypeName, ' ', variableName, " = ", ptrValue, " ? ", mangledTypeName, "{ ", ptrValue, ", 1 } : ", mangledTypeName, "{ nullptr, 0 };\n"); 720 708 } else if (is<AST::ArrayType>(makeArrayReferenceExpression.leftValue().resolvedType())) { 721 709 auto lValue = takeLastLeftValue().value; … … 766 754 MangledVariableName variableName = iterator->value; 767 755 768 Indentation<4> indent = m_indent;769 756 appendLeftValue(variableReference, variableName, { }, Nullability::NotNull, 770 [this, &variableReference, variableName , indent] {757 [this, &variableReference, variableName] { 771 758 auto pointerName = generateNextVariableName(); 772 m_stringBuilder.append( indent, "thread ", m_typeNamer.mangledNameForType(variableReference.resolvedType()), "* ", pointerName, " = &", variableName, ";\n");759 m_stringBuilder.append(m_indent, "thread ", m_typeNamer.mangledNameForType(variableReference.resolvedType()), "* ", pointerName, " = &", variableName, ";\n"); 773 760 return pointerName; 774 761 }); -
trunk/Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp
r248920 r248994 147 147 auto& parameterType = *nativeFunctionDeclaration.parameters()[0]->type(); 148 148 auto metalParameterTypeName = typeNamer.mangledNameForType(parameterType); 149 auto variableName = generateNextVariableName();150 151 stringBuilder.append(indent, metalParameterTypeName, ' ', variableName, " = ", args[0], ";\n");152 149 153 150 auto isEnumerationDefinition = [] (auto& type) { … … 156 153 auto& unifiedReturnType = returnType.unifyNode(); 157 154 if (isEnumerationDefinition(unifiedReturnType) && !isEnumerationDefinition(parameterType.unifyNode())) { 155 auto variableName = generateNextVariableName(); 156 stringBuilder.append(indent, metalParameterTypeName, ' ', variableName, " = ", args[0], ";\n"); 158 157 auto& enumerationDefinition = downcast<AST::EnumerationDefinition>(downcast<AST::NamedType>(unifiedReturnType)); 159 158 stringBuilder.append(indent, "switch (", variableName, ") {\n"); … … 174 173 indent, "}\n"); 175 174 } 176 } 177 178 stringBuilder.append(indent, returnName, " = static_cast<", metalReturnTypeName, ">(", variableName, ");\n"); 175 stringBuilder.append(indent, returnName, " = static_cast<", metalReturnTypeName, ">(", variableName, ");\n"); 176 } else 177 stringBuilder.append(indent, returnName, " = static_cast<", metalReturnTypeName, ">(", args[0], ");\n"); 178 179 179 return; 180 180 }
Note: See TracChangeset
for help on using the changeset viewer.