{"push_id":577640768,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"c9520b48ae8100ae5fac48d067c04c8e9a86ac99","before":"f781855732eb30952ddf0c4d80a4e2b34ac1c0fa","commits":[{"sha":"c9520b48ae8100ae5fac48d067c04c8e9a86ac99","author":{"email":"420c9fb3407b8e11ac322a0e7703f7b1f526df04@gmail.com","name":"Chandler Carruth"},"message":"[x86] Rewrite the byte shift detection to not use boolean variables to\ntrack state.\n\nI didn't like this in the code review because the pattern tends to be\nerror prone, but I didn't see a clear way to rewrite it. Turns out that\nthere were bugs here, I found them when fuzz testing our shuffle\nlowering for correctness on x86.\n\nThe core of the problem is that we need to consistently test all our\npreconditions for the same directionality of shift and the same input\nvector. Instead, formulate this as two predicates (one doesn't depend on\nthe input in any way), pass things like the directionality and input\nvector as inputs, and loop over the alternatives.\n\nThis fixes a pattern of very rare miscompiles coming out of this code.\nTurned up roughly 4 out of every 1 million v8 shuffles in my fuzz\ntesting. The new code is over half a million test runs with no failures\nyet. I've also fuzzed every other function in the lowering code with\nover 3.5 million test cases and not discovered any other miscompiles.\n\ngit-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229642 91177308-0d34-0410-b5e6-96231b3b80d8","distinct":true,"url":"https://api.github.com/repos/chapuni/llvm/commits/c9520b48ae8100ae5fac48d067c04c8e9a86ac99"}]}