{"push_id":2381055565,"size":35,"distinct_size":35,"ref":"refs/heads/master","head":"5f69f7512695bd7b26f83ed9872be45159a46cf6","before":"6c75050136a2657dac4501ca16d447852fc69e5f","commits":[{"sha":"ec3bbf093e686964d464e3a7c70e691d98ed82c1","author":{"name":"Steven Perron","email":"e2fb3942e6f3edc4371777db2bd421f931f2943f@google.com"},"message":"Preserve analysies in the simplification pass\n\nBuilding the def-use chains is very expensive, so we do not want to\ninvalidate them it if is not necessary.  At the moment, it seems like\nmost optimizatoins are good at not invalidating the def-use chains, but\nsimplification does.\n\nThis PR get the simlification pass to keep the analysies valid.\n\nContributes to #1328.","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/ec3bbf093e686964d464e3a7c70e691d98ed82c1"},{"sha":"fa3ac3cc335ede09ef57716de74f5ab84d3aef19","author":{"name":"Steven Perron","email":"e2fb3942e6f3edc4371777db2bd421f931f2943f@google.com"},"message":"Revert \"Preserve analysies in the simplification pass\"\n\nThis reverts commit ec3bbf093e686964d464e3a7c70e691d98ed82c1.","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/fa3ac3cc335ede09ef57716de74f5ab84d3aef19"},{"sha":"309be423cc469624cdbddb5fe6e4ceb1dfd1adca","author":{"name":"Arseny Kapoulkine","email":"dd22a4444767d6a0b011d6eb792c531f92771fdd@gmail.com"},"message":"Add folding for redundant add/sub/mul/div/mix operations\n\nThis change implements instruction folding for arithmetic operations\nthat are redundant, specifically:\n\n  x + 0 = 0 + x = x\n  x - 0 = x\n  0 - x = -x\n  x * 0 = 0 * x = 0\n  x * 1 = 1 * x = x\n  0 / x = 0\n  x / 1 = x\n  mix(a, b, 0) = a\n  mix(a, b, 1) = b\n\nCache ExtInst import id in feature manager\n\nThis allows us to avoid string lookups during optimization; for now we\njust cache GLSL std450 import id but I can imagine caching more sets as\nthey become utilized by the optimizer.\n\nAdd tests for add/sub/mul/div/mix folding\n\nThe tests cover scalar float/double cases, and some vector cases.\n\nSince most of the code for floating point folding is shared, the tests\nfor vector folding are not as exhaustive as scalar.\n\nTo test sub->negate folding I had to implement a custom fixture.","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/309be423cc469624cdbddb5fe6e4ceb1dfd1adca"},{"sha":"c1b936637e55e76d7e6bb398e11fe71d0b0ede74","author":{"name":"Steven Perron","email":"e2fb3942e6f3edc4371777db2bd421f931f2943f@google.com"},"message":"Add Insert-extract elimination back into legalization passes.\n\nFixes #1326.","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/c1b936637e55e76d7e6bb398e11fe71d0b0ede74"},{"sha":"51ecc7318f7aea8472cf49be768eac7f3236eeaa","author":{"name":"Steven Perron","email":"e2fb3942e6f3edc4371777db2bd421f931f2943f@google.com"},"message":"Reduce instruction create and deletion during inlining.\n\nWhen inlining a function call the instructions in the same basic block\nas the call get cloned.  The clone is added to the set of new blocks\ncontaining the inlined code, and the original instructions are deleted.\n\nThis PR will change this so that we simply move the instructions to the\nnew blocks.  This saves on the creation and deletion of the\ninstructions.\n\nContributes to #1328.","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/51ecc7318f7aea8472cf49be768eac7f3236eeaa"},{"sha":"01760d2f0f6422b330ea99dd67da72230ef2bbd7","author":{"name":"Alan Baker","email":"98ff1eff79716c25450b2bfda002ab282b5e837a@google.com"},"message":"Fixes #1338. Handle OpConstantNull in branch/switch conditions\n\n* No longer assume the branch/switch condition must be bool or int\nconstants (respectively)\n* Added a couple unit tests for each case","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/01760d2f0f6422b330ea99dd67da72230ef2bbd7"},{"sha":"46a9ec9d2312bc8f2a87810614d06c721ea3121c","author":{"name":"GregF","email":"8952803a140aef085feef90060e9454201c5d910@LunarG.com"},"message":"Opt: Check for side-effects in DCEInst()\n\nThis function now checks for side-effects before adding operand\ninstructions to the dead instruction work list.\n\nBecause this fix puts more pressure on IsCombinatorInstruction() to\nbe correct, this commit adds all OpConstant* and OpType* instructions\nto combinator_ops_ set.\n\nFixes #1341.","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/46a9ec9d2312bc8f2a87810614d06c721ea3121c"},{"sha":"432dc40412d2f557e4c49867c9481adf7679d496","author":{"name":"Lei Zhang","email":"458d5b9d1019bc31d55bbd8b293d65bd60e265cc@google.com"},"message":"Appveyor: remove VS2015 configuration to reduce build time\n\nWe already have VS2013 and VS2017, which should be good guards.","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/432dc40412d2f557e4c49867c9481adf7679d496"},{"sha":"3f19c2031a8684dce8d28de770d1a7e44c30c0b1","author":{"name":"Steven Perron","email":"e2fb3942e6f3edc4371777db2bd421f931f2943f@google.com"},"message":"Preserve analysies in the simplification pass\n\nFixes a bug at the same time.  In `UpdateDefUse`, if the definition\nalready exists, we are not suppose to analyse it again.  When you do\nthe entries for the definition are deleted, and we don't want that.\nThe check for this was wrong.","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/3f19c2031a8684dce8d28de770d1a7e44c30c0b1"},{"sha":"94af58a350b46f85422699e27ccbf22bf453149f","author":{"name":"Steven Perron","email":"e2fb3942e6f3edc4371777db2bd421f931f2943f@google.com"},"message":"Clean up variables before sroa\n\nIn some shaders there are a lot of very large and deeply nested\nstructures.  This creates a lot of work for scalar replacement.  Also,\nsince commit ca4457b we have been very aggressive as rewriting\nvariables.  This has causes a large increase in compile time in creating\nand then deleting the instructions.\n\nTo help low the costs, I want to run a cleanup of some of the easy loads\nand stores to remove.  This reduces the number of symbols sroa has to\nwork on.  It also reduces the amount of code the simplifier has to\nsimplify because it was not generated by sroa.\n\nTo confirm the improvement, I ran numbers on three different sets of\nshaders:\n\nTime to run --legalize-hlsl:\n\nSet #1: 55.89s -> 12.0s\nSet #2: 1m44s -> 1m40.5s\nSet #3: 6.8s -> 5.7s\n\nTime to run -O\n\nSet #1: 18.8s -> 10.9s\nSet #2: 5m44s -> 4m17s\nSet #3: 7.8s -> 7.8s\n\nContributes to #1328.","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/94af58a350b46f85422699e27ccbf22bf453149f"},{"sha":"e354984b09624c7fa2200e40555c98ca1a8fa5c6","author":{"name":"Stephen McGroarty","email":"5bfd6f4d5597453bc08688e3129fd2e4fff3505f@codeplay.com"},"message":"Unroller support for multiple induction variables\n\nSupport for multiple induction variables within a loop and support for\nloop condition operands <= and >=.","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/e354984b09624c7fa2200e40555c98ca1a8fa5c6"},{"sha":"3497a94460ebd865c9d08483cdffac1fcde0c528","author":{"name":"Victor Lomuller","email":"62d658e79284206e227acf976630b146e3692bf0@codeplay.com"},"message":"Add loop unswitch pass.\n\nIt moves all conditional branching and switch whose conditions are loop\ninvariant and uniform. Before performing the loop unswitch we check that\nthe loop does not contain any instruction that would prevent it\n(barriers, group instructions etc.).","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/3497a94460ebd865c9d08483cdffac1fcde0c528"},{"sha":"b08b94ec0a71939f55ec483ab50a5e3b8a07a7dd","author":{"name":"David Neto","email":"63a9873e6e504a28d28c38a2724837c176e68e01@google.com"},"message":"Update CHANGES","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/b08b94ec0a71939f55ec483ab50a5e3b8a07a7dd"},{"sha":"64298bfd15ab1aa59328f3ffdccc861cbfc35ea7","author":{"name":"Pierre Moreau","email":"80cd025df02680755871ffc10a22624c746ed388@pmoreau.org"},"message":"tools/linker: Allow setting --verify-ids on the command line","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/64298bfd15ab1aa59328f3ffdccc861cbfc35ea7"},{"sha":"bdd6617faae5f9fa962ad73d36b70223c1dcf682","author":{"name":"Pierre Moreau","email":"80cd025df02680755871ffc10a22624c746ed388@pmoreau.org"},"message":"linker: Allow modules to be partially linked\n\nFixes: https://github.com/KhronosGroup/SPIRV-Tools/issues/1144","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/bdd6617faae5f9fa962ad73d36b70223c1dcf682"},{"sha":"9394272c98e06b199c10395d647868c0a1042363","author":{"name":"Pierre Moreau","email":"80cd025df02680755871ffc10a22624c746ed388@pmoreau.org"},"message":"linker: merge debug annotations from category c)\n\nFixes: https://github.com/KhronosGroup/SPIRV-Tools/issues/1218","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/9394272c98e06b199c10395d647868c0a1042363"},{"sha":"20b8cdb7c6e24e66650e204d28423e11fb0f2de5","author":{"name":"Stephen McGroarty","email":"5bfd6f4d5597453bc08688e3129fd2e4fff3505f@codeplay.com"},"message":"Make IR builder use the type manager for constants\n\nThis change makes the IR builder use the type manager to generate\nOpTypeInts when creating OpConstants. This avoids dangling references\nbeing stored by the created OpConstants.","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/20b8cdb7c6e24e66650e204d28423e11fb0f2de5"},{"sha":"802cf053c797741008cc35bc3b2a2a926edd463d","author":{"name":"Alan Baker","email":"98ff1eff79716c25450b2bfda002ab282b5e837a@google.com"},"message":"Merge arithmetic with non-trivial constant operands\n\nAdding basis of arithmetic merging\n\n* Refactored constant collection in ConstantManager\n* New rules:\n * consecutive negates\n * negate of arithmetic op with a constant\n * consecutive muls\n * reciprocal of div\n\n* Removed IRContext::CanFoldFloatingPoint\n * replaced by Instruction::IsFloatingPointFoldingAllowed\n* Fixed some bad tests\n* added some header comments\n\nAdded PerformIntegerOperation\n\n* minor fixes to constants and tests\n* fixed IntMultiplyBy1 to work with 64 bit ints\n* added tests for integer mul merging\n\nAdding test for vector integer multiply merging\n\nAdding support for merging integer add and sub through negate\n\n* Added tests\n\nAdding rules to merge mult with preceding divide\n\n* Has a couple tests, but needs more\n* Added more comments\n\nFixed bug in integer division folding\n\n* Will no longer merge through integer division if there would be a\nremainder in the division\n* Added a bunch more tests\n\nAdding rules to merge divide and multiply through divide\n\n* Improved comments\n* Added tests\n\nAdding rules to handle mul or div of a negation\n\n* Added tests\n\nChanges for review\n\n* Early exit if no constants are involved in more functions\n* fixed some comments\n* removed unused declaration\n* clarified some logic\n\nAdding new rules for add and subtract\n\n* Fold adds of adds, subtracts or negates\n* Fold subtracts of adds, subtracts or negates\n* Added tests","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/802cf053c797741008cc35bc3b2a2a926edd463d"},{"sha":"0c13467161842389a5270e5a0e2a6c9e9be487a5","author":{"name":"David Neto","email":"63a9873e6e504a28d28c38a2724837c176e68e01@google.com"},"message":"Consistently include latest spirv.h header file.\n\nUse indirection through latest_version_spirv.h\n\nAlso, when generating enum tables, use the unified1 JSON grammar since\nit now has FragmentFullyCoveredEXT but the other JSON grammars don't.\nThey are starting to fall behind.","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/0c13467161842389a5270e5a0e2a6c9e9be487a5"},{"sha":"2cb589cc14ac68c5769d3a70ce10d2917885121e","author":{"name":"Steven Perron","email":"e2fb3942e6f3edc4371777db2bd421f931f2943f@google.com"},"message":"Remove uses DCEInst and call ADCE\n\nThe algorithm used in DCEInst to remove dead code is very slow.  It is\nfine if you only want to remove a small number of instructions, but, if\nyou need to remove a large number of instructions, then the algorithm in\nADCE is much faster.\n\nThis PR removes the calls to DCEInst in the load-store removal passes\nand adds a pass of ADCE afterwards.\n\nA number of different iterations of the order of optimization, and I\nbelieve this is the best I could find.\n\nThe results I have on 3 sets of shaders are:\n\nLegalization:\n\nSet 1: 5.39 -> 5.01\nSet 2: 13.98 -> 8.38\nSet 3: 98.00 -> 96.26\n\nPerformance passes:\n\nSet 1: 6.90 -> 5.23\nSet 2: 10.11 -> 6.62\nSet 3: 253.69 -> 253.74\n\nSize reduction passes:\n\nSet 1: 7.16 -> 7.25\nSet 2: 17.17 -> 16.81\nSet 3: 112.06 -> 107.71\n\nNote that the third set's compile time is large because of the large\nnumber of basic blocks, not so much because of the number of\ninstructions.  That is why we don't see much gain there.","distinct":true,"url":"https://api.github.com/repos/zeux/SPIRV-Tools/commits/2cb589cc14ac68c5769d3a70ce10d2917885121e"}]}
{"actor":{"display_login":"zeux"}}