{"push_id":575363819,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"454c3997b4379acd0734a4fca289afc5c9a65425","before":"aa35e012a3e454d654442d89a8f49ec1a7193403","commits":[{"sha":"454c3997b4379acd0734a4fca289afc5c9a65425","author":{"email":"420c9fb3407b8e11ac322a0e7703f7b1f526df04@gmail.com","name":"Chandler Carruth"},"message":"[x86] Teach the 128-bit vector shuffle lowering routines to take\nadvantage of the existence of a reasonable blend instruction.\n\nThe 256-bit vector shuffle lowering has leveraged the general technique\nof decomposed shuffles and blends for quite some time, but this never\nmade it back into the 128-bit code, and there are a large number of\npatterns where this is substantially better. For example, this removes\nalmost all domain crossing in vector shuffles that involve some blend\nand some permutation with SSE4.1 and later. See the massive reduction\nin 'shufps' for integer test cases in this commit.\n\nThis isn't perfect yet for a few reasons:\n\n1) The v8i16 shuffle lowering continues to plague me. We don't always\n   form an unpack-based blend when that would be better. But the wins\n   pretty drastically outstrip the losses here.\n2) The v16i8 shuffle lowering is just a disaster here. I never went and\n   implemented blend support here for some terrible reason. I'll do\n   that next probably. I've not updated it for now.\n\nMore variations on this technique are coming as well -- we don't\nshuffle-into-unpack or shuffle-into-palignr, both of which would also be\nprofitable.\n\nNote that some test cases grow significantly in the number of\ninstructions, but I expect to actually be faster. We use\npshufd+pshufd+blendw instead of a single shufps, but the pshufd's are\nvery likely to pipeline well (two ports on most modern intel chips) and\nthe blend is a *very* fast instruction. The domain switch penalty will\nessentially always be more than a blend instruction, which is the only\nincrease in tree height.\n\ngit-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229350 91177308-0d34-0410-b5e6-96231b3b80d8","distinct":true,"url":"https://api.github.com/repos/llvm-project/llvm/commits/454c3997b4379acd0734a4fca289afc5c9a65425"}]}