Changeset 246649 in webkit
- Timestamp:
- Jun 20, 2019 1:10:06 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r246646 r246649 1 2019-06-20 Saam Barati <sbarati@apple.com> 2 3 [WHLSL] Property resolver needs to recurse on newValueExpression for RMW operations 4 https://bugs.webkit.org/show_bug.cgi?id=199037 5 6 Reviewed by Myles C. Maxfield. 7 8 * webgpu/whlsl-read-modify-write-high-zombies-expected.txt: Added. 9 * webgpu/whlsl-read-modify-write-high-zombies.html: Added. 10 1 11 2019-06-20 Justin Fan <justin_fan@apple.com> 2 12 -
trunk/Source/WebCore/ChangeLog
r246647 r246649 1 2019-06-20 Saam Barati <sbarati@apple.com> 2 3 [WHLSL] Property resolver needs to recurse on newValueExpression for RMW operations 4 https://bugs.webkit.org/show_bug.cgi?id=199037 5 6 Reviewed by Myles C. Maxfield. 7 8 When we had an expression like `<e1> += <e2>`, we weren't running the property 9 resolver on <e2>. If <e2> was something like `mat[1][2]`, we wouldn't end up 10 simplifying that into the needed getter calls. This patch fixes this by having 11 the property resolver recurse on <e2>. 12 13 This patch also fixes a bug in the property resolver where we weren't marking some 14 dereference expressions as LValues. This was causing bugs in the metal code generator. 15 16 This patch also adds a way to dump the AST between passes that are 17 guaranteed to not fail. 18 19 Test: webgpu/whlsl-read-modify-write-high-zombies.html 20 21 * Modules/webgpu/WHLSL/WHLSLPrepare.cpp: 22 (WebCore::WHLSL::prepareShared): 23 * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp: 24 (WebCore::WHLSL::PropertyResolver::visit): 25 * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt: 26 1 27 2019-06-20 John Wilander <wilander@apple.com> 2 28 -
trunk/Source/WebCore/Modules/webgpu/WHLSL/WHLSLPrepare.cpp
r246631 r246649 91 91 } 92 92 93 #define RUN_PASS(pass, ...) \93 #define CHECK_PASS(pass, ...) \ 94 94 do { \ 95 95 dumpASTBetweenEachPassIfNeeded(program, "AST before " # pass); \ … … 100 100 } \ 101 101 } while (0) 102 102 103 #define RUN_PASS(pass, ...) \ 104 do { \ 105 dumpASTBetweenEachPassIfNeeded(program, "AST before " # pass); \ 106 pass(__VA_ARGS__); \ 107 } while (0) 103 108 104 109 static Optional<Program> prepareShared(String& whlslSource) … … 122 127 123 128 NameResolver nameResolver(program.nameContext()); 124 RUN_PASS(resolveNamesInTypes, program, nameResolver);125 RUN_PASS(checkRecursiveTypes, program);126 RUN_PASS(synthesizeStructureAccessors, program);127 RUN_PASS(synthesizeEnumerationFunctions, program);128 RUN_PASS(synthesizeArrayOperatorLength, program);129 RUN_PASS(resolveTypeNamesInFunctions, program, nameResolver);130 RUN_PASS(synthesizeConstructors, program);131 RUN_PASS(resolveCallsInFunctions, program, nameResolver);132 RUN_PASS(checkDuplicateFunctions, program);129 CHECK_PASS(resolveNamesInTypes, program, nameResolver); 130 CHECK_PASS(checkRecursiveTypes, program); 131 CHECK_PASS(synthesizeStructureAccessors, program); 132 CHECK_PASS(synthesizeEnumerationFunctions, program); 133 CHECK_PASS(synthesizeArrayOperatorLength, program); 134 CHECK_PASS(resolveTypeNamesInFunctions, program, nameResolver); 135 CHECK_PASS(synthesizeConstructors, program); 136 CHECK_PASS(resolveCallsInFunctions, program, nameResolver); 137 CHECK_PASS(checkDuplicateFunctions, program); 133 138 134 RUN_PASS(check, program);139 CHECK_PASS(check, program); 135 140 136 checkLiteralTypes(program);137 RUN_PASS(checkTextureReferences, program);138 RUN_PASS(autoInitializeVariables, program);139 resolveProperties(program);140 findHighZombies(program);141 RUN_PASS(checkStatementBehavior, program);142 RUN_PASS(checkRecursion, program);143 RUN_PASS(checkFunctionStages, program);144 preserveVariableLifetimes(program);141 RUN_PASS(checkLiteralTypes, program); 142 CHECK_PASS(checkTextureReferences, program); 143 CHECK_PASS(autoInitializeVariables, program); 144 RUN_PASS(resolveProperties, program); 145 RUN_PASS(findHighZombies, program); 146 CHECK_PASS(checkStatementBehavior, program); 147 CHECK_PASS(checkRecursion, program); 148 CHECK_PASS(checkFunctionStages, program); 149 RUN_PASS(preserveVariableLifetimes, program); 145 150 146 151 dumpASTAtEndIfNeeded(program); -
trunk/Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp
r246515 r246649 547 547 void PropertyResolver::visit(AST::ReadModifyWriteExpression& readModifyWriteExpression) 548 548 { 549 checkErrorAndVisit(readModifyWriteExpression.newValueExpression()); 550 if (error()) 551 return; 552 549 553 if (readModifyWriteExpression.leftValue().typeAnnotation().leftAddressSpace()) { 550 554 // Consider a++; … … 589 593 auto dereferenceExpression = makeUniqueRef<AST::DereferenceExpression>(Lexer::Token(readModifyWriteExpression.origin()), WTFMove(variableReference1)); 590 594 dereferenceExpression->setType(baseType->clone()); 591 dereferenceExpression->setTypeAnnotation(AST:: RightValue());595 dereferenceExpression->setTypeAnnotation(AST::LeftValue { AST::AddressSpace::Thread }); // FIXME: https://bugs.webkit.org/show_bug.cgi?id=198169 Is this right? 592 596 593 597 auto variableReference2 = readModifyWriteExpression.oldVariableReference(); … … 622 626 auto dereferenceExpression = makeUniqueRef<AST::DereferenceExpression>(Lexer::Token(readModifyWriteExpression.origin()), WTFMove(variableReference1)); 623 627 dereferenceExpression->setType(baseType->clone()); 624 dereferenceExpression->setTypeAnnotation(AST:: RightValue());628 dereferenceExpression->setTypeAnnotation(AST::LeftValue { AST::AddressSpace::Thread }); // FIXME: https://bugs.webkit.org/show_bug.cgi?id=198169 Is this right? 625 629 626 630 auto variableReference2 = readModifyWriteExpression.newVariableReference(); -
trunk/Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt
r246631 r246649 620 620 float4 result; 621 621 result[0] = 0; 622 result[0] = result[0] +x[0][0] * y[0];623 result[0] = result[0] +x[0][1] * y[1];624 result[0] = result[0] +x[0][2] * y[2];625 result[0] = result[0] +x[0][3] * y[3];622 result[0] += x[0][0] * y[0]; 623 result[0] += x[0][1] * y[1]; 624 result[0] += x[0][2] * y[2]; 625 result[0] += x[0][3] * y[3]; 626 626 result[1] = 0; 627 result[1] = result[1] +x[1][0] * y[0];628 result[1] = result[1] +x[1][1] * y[1];629 result[1] = result[1] +x[1][2] * y[2];630 result[1] = result[1] +x[1][3] * y[3];627 result[1] += x[1][0] * y[0]; 628 result[1] += x[1][1] * y[1]; 629 result[1] += x[1][2] * y[2]; 630 result[1] += x[1][3] * y[3]; 631 631 result[2] = 0; 632 result[2] = result[2] +x[2][0] * y[0];633 result[2] = result[2] +x[2][1] * y[1];634 result[2] = result[2] +x[2][2] * y[2];635 result[2] = result[2] +x[2][3] * y[3];632 result[2] += x[2][0] * y[0]; 633 result[2] += x[2][1] * y[1]; 634 result[2] += x[2][2] * y[2]; 635 result[2] += x[2][3] * y[3]; 636 636 result[3] = 0; 637 result[3] = result[3] +x[3][0] * y[0];638 result[3] = result[3] +x[3][1] * y[1];639 result[3] = result[3] +x[3][2] * y[2];640 result[3] = result[3] +x[3][3] * y[3];637 result[3] += x[3][0] * y[0]; 638 result[3] += x[3][1] * y[1]; 639 result[3] += x[3][2] * y[2]; 640 result[3] += x[3][3] * y[3]; 641 641 return result; 642 642 } … … 645 645 float4x4 result; 646 646 result[0][0] = 0; 647 result[0][0] = result[0][0] +x[0][0] * y[0][0];648 result[0][0] = result[0][0] +x[0][1] * y[1][0];649 result[0][0] = result[0][0] +x[0][2] * y[2][0];650 result[0][0] = result[0][0] +x[0][3] * y[3][0];647 result[0][0] += x[0][0] * y[0][0]; 648 result[0][0] += x[0][1] * y[1][0]; 649 result[0][0] += x[0][2] * y[2][0]; 650 result[0][0] += x[0][3] * y[3][0]; 651 651 result[0][1] = 0; 652 result[0][1] = result[0][1] +x[0][0] * y[0][1];653 result[0][1] = result[0][1] +x[0][1] * y[1][1];654 result[0][1] = result[0][1] +x[0][2] * y[2][1];655 result[0][1] = result[0][1] +x[0][3] * y[3][1];652 result[0][1] += x[0][0] * y[0][1]; 653 result[0][1] += x[0][1] * y[1][1]; 654 result[0][1] += x[0][2] * y[2][1]; 655 result[0][1] += x[0][3] * y[3][1]; 656 656 result[0][2] = 0; 657 result[0][2] = result[0][2] +x[0][0] * y[0][2];658 result[0][2] = result[0][2] +x[0][1] * y[1][2];659 result[0][2] = result[0][2] +x[0][2] * y[2][2];660 result[0][2] = result[0][2] +x[0][3] * y[3][2];657 result[0][2] += x[0][0] * y[0][2]; 658 result[0][2] += x[0][1] * y[1][2]; 659 result[0][2] += x[0][2] * y[2][2]; 660 result[0][2] += x[0][3] * y[3][2]; 661 661 result[0][3] = 0; 662 result[0][3] = result[0][3] +x[0][0] * y[0][3];663 result[0][3] = result[0][3] +x[0][1] * y[1][3];664 result[0][3] = result[0][3] +x[0][2] * y[2][3];665 result[0][3] = result[0][3] +x[0][3] * y[3][3];662 result[0][3] += x[0][0] * y[0][3]; 663 result[0][3] += x[0][1] * y[1][3]; 664 result[0][3] += x[0][2] * y[2][3]; 665 result[0][3] += x[0][3] * y[3][3]; 666 666 result[1][0] = 0; 667 result[1][0] = result[1][0] +x[1][0] * y[0][0];668 result[1][0] = result[1][0] +x[1][1] * y[1][0];669 result[1][0] = result[1][0] +x[1][2] * y[2][0];670 result[1][0] = result[1][0] +x[1][3] * y[3][0];667 result[1][0] += x[1][0] * y[0][0]; 668 result[1][0] += x[1][1] * y[1][0]; 669 result[1][0] += x[1][2] * y[2][0]; 670 result[1][0] += x[1][3] * y[3][0]; 671 671 result[1][1] = 0; 672 result[1][1] = result[1][1] +x[1][0] * y[0][1];673 result[1][1] = result[1][1] +x[1][1] * y[1][1];674 result[1][1] = result[1][1] +x[1][2] * y[2][1];675 result[1][1] = result[1][1] +x[1][3] * y[3][1];672 result[1][1] += x[1][0] * y[0][1]; 673 result[1][1] += x[1][1] * y[1][1]; 674 result[1][1] += x[1][2] * y[2][1]; 675 result[1][1] += x[1][3] * y[3][1]; 676 676 result[1][2] = 0; 677 result[1][2] = result[1][2] +x[1][0] * y[0][2];678 result[1][2] = result[1][2] +x[1][1] * y[1][2];679 result[1][2] = result[1][2] +x[1][2] * y[2][2];680 result[1][2] = result[1][2] +x[1][3] * y[3][2];677 result[1][2] += x[1][0] * y[0][2]; 678 result[1][2] += x[1][1] * y[1][2]; 679 result[1][2] += x[1][2] * y[2][2]; 680 result[1][2] += x[1][3] * y[3][2]; 681 681 result[1][3] = 0; 682 result[1][3] = result[1][3] +x[1][0] * y[0][3];683 result[1][3] = result[1][3] +x[1][1] * y[1][3];684 result[1][3] = result[1][3] +x[1][2] * y[2][3];685 result[1][3] = result[1][3] +x[1][3] * y[3][3];682 result[1][3] += x[1][0] * y[0][3]; 683 result[1][3] += x[1][1] * y[1][3]; 684 result[1][3] += x[1][2] * y[2][3]; 685 result[1][3] += x[1][3] * y[3][3]; 686 686 result[2][0] = 0; 687 result[2][0] = result[2][0] +x[2][0] * y[0][0];688 result[2][0] = result[2][0] +x[2][1] * y[1][0];689 result[2][0] = result[2][0] +x[2][2] * y[2][0];690 result[2][0] = result[2][0] +x[2][3] * y[3][0];687 result[2][0] += x[2][0] * y[0][0]; 688 result[2][0] += x[2][1] * y[1][0]; 689 result[2][0] += x[2][2] * y[2][0]; 690 result[2][0] += x[2][3] * y[3][0]; 691 691 result[2][1] = 0; 692 result[2][1] = result[2][1] +x[2][0] * y[0][1];693 result[2][1] = result[2][1] +x[2][1] * y[1][1];694 result[2][1] = result[2][1] +x[2][2] * y[2][1];695 result[2][1] = result[2][1] +x[2][3] * y[3][1];692 result[2][1] += x[2][0] * y[0][1]; 693 result[2][1] += x[2][1] * y[1][1]; 694 result[2][1] += x[2][2] * y[2][1]; 695 result[2][1] += x[2][3] * y[3][1]; 696 696 result[2][2] = 0; 697 result[2][2] = result[2][2] +x[2][0] * y[0][2];698 result[2][2] = result[2][2] +x[2][1] * y[1][2];699 result[2][2] = result[2][2] +x[2][2] * y[2][2];700 result[2][2] = result[2][2] +x[2][3] * y[3][2];697 result[2][2] += x[2][0] * y[0][2]; 698 result[2][2] += x[2][1] * y[1][2]; 699 result[2][2] += x[2][2] * y[2][2]; 700 result[2][2] += x[2][3] * y[3][2]; 701 701 result[2][3] = 0; 702 result[2][3] = result[2][3] +x[2][0] * y[0][3];703 result[2][3] = result[2][3] +x[2][1] * y[1][3];704 result[2][3] = result[2][3] +x[2][2] * y[2][3];705 result[2][3] = result[2][3] +x[2][3] * y[3][3];702 result[2][3] += x[2][0] * y[0][3]; 703 result[2][3] += x[2][1] * y[1][3]; 704 result[2][3] += x[2][2] * y[2][3]; 705 result[2][3] += x[2][3] * y[3][3]; 706 706 result[3][0] = 0; 707 result[3][0] = result[3][0] +x[3][0] * y[0][0];708 result[3][0] = result[3][0] +x[3][1] * y[1][0];709 result[3][0] = result[3][0] +x[3][2] * y[2][0];710 result[3][0] = result[3][0] +x[3][3] * y[3][0];707 result[3][0] += x[3][0] * y[0][0]; 708 result[3][0] += x[3][1] * y[1][0]; 709 result[3][0] += x[3][2] * y[2][0]; 710 result[3][0] += x[3][3] * y[3][0]; 711 711 result[3][1] = 0; 712 result[3][1] = result[3][1] +x[3][0] * y[0][1];713 result[3][1] = result[3][1] +x[3][1] * y[1][1];714 result[3][1] = result[3][1] +x[3][2] * y[2][1];715 result[3][1] = result[3][1] +x[3][3] * y[3][1];712 result[3][1] += x[3][0] * y[0][1]; 713 result[3][1] += x[3][1] * y[1][1]; 714 result[3][1] += x[3][2] * y[2][1]; 715 result[3][1] += x[3][3] * y[3][1]; 716 716 result[3][2] = 0; 717 result[3][2] = result[3][2] +x[3][0] * y[0][2];718 result[3][2] = result[3][2] +x[3][1] * y[1][2];719 result[3][2] = result[3][2] +x[3][2] * y[2][2];720 result[3][2] = result[3][2] +x[3][3] * y[3][2];717 result[3][2] += x[3][0] * y[0][2]; 718 result[3][2] += x[3][1] * y[1][2]; 719 result[3][2] += x[3][2] * y[2][2]; 720 result[3][2] += x[3][3] * y[3][2]; 721 721 result[3][3] = 0; 722 result[3][3] = result[3][3] +x[3][0] * y[0][3];723 result[3][3] = result[3][3] +x[3][1] * y[1][3];724 result[3][3] = result[3][3] +x[3][2] * y[2][3];725 result[3][3] = result[3][3] +x[3][3] * y[3][3];722 result[3][3] += x[3][0] * y[0][3]; 723 result[3][3] += x[3][1] * y[1][3]; 724 result[3][3] += x[3][2] * y[2][3]; 725 result[3][3] += x[3][3] * y[3][3]; 726 726 return result; 727 727 }
Note: See TracChangeset
for help on using the changeset viewer.