)]}' { "commit": "31001be371e8f2c74470e727e54503fb2aabec8b", "tree": "93ea8be722a9712ea312b2f9a9c77749193a27cb", "parents": [ "9ae9ab1ca34384e07b751c16645e22a0b953b08b" ], "author": { "name": "LemonBoy", "email": "thatlemon@gmail.com", "time": "Wed Mar 17 16:59:55 2021 +0100" }, "committer": { "name": "Tom Stellard", "email": "tstellar@redhat.com", "time": "Wed Mar 31 12:10:37 2021 -0700" }, "message": "[LoopVectorize] Refine hasIrregularType predicate\n\nThe `hasIrregularType` predicate checks whether an array of N values of type Ty is \"bitcast-compatible\" with a \u003cN x Ty\u003e vector.\nThe previous check returned invalid results in some cases where there\u0027s some padding between the array elements: eg. a 4-element array of u7 values is considered as compatible with \u003c4 x u7\u003e, even though the vector is only loading/storing 28 bits instead of 32.\n\nThe problem causes LLVM to generate incorrect code for some targets: for AArch64 the vector loads/stores are lowered in terms of ubfx/bfi, effectively losing the top (N * padding bits).\n\nReviewed By: lebedev.ri\n\nDifferential Revision: https://reviews.llvm.org/D97465\n\n(cherry picked from commit 4f024938e4c932feba4d28573ec4522106f8d879)\n", "tree_diff": [ { "type": "modify", "old_id": "d36e078444bc291ffd83175f2cccbf6da5f9ae7c", "old_mode": 33188, "old_path": "llvm/lib/Transforms/Vectorize/LoopVectorize.cpp", "new_id": "b456a97aa4ec094f641da99691909fd6e6a1bdc0", "new_mode": 33188, "new_path": "llvm/lib/Transforms/Vectorize/LoopVectorize.cpp" }, { "type": "add", "old_id": "0000000000000000000000000000000000000000", "old_mode": 0, "old_path": "/dev/null", "new_id": "167a1a101e6f96a2c25ea291b2a33443f3beec8b", "new_mode": 33188, "new_path": "llvm/test/Transforms/LoopVectorize/irregular_type.ll" } ] }