{"push_id":726847099,"size":1,"distinct_size":1,"ref":"refs/heads/trunk","head":"90d71ef79e1dc20280c6791a0214dbfbd89ab7db","before":"c56e5e443ae87129223f860160c2ec623e1164c5","commits":[{"sha":"90d71ef79e1dc20280c6791a0214dbfbd89ab7db","author":{"email":"226409dbd0f8f7302b911c342b723f8b80eeb87d@91177308-0d34-0410-b5e6-96231b3b80d8","name":"wschmidt"},"message":"[PPC64LE] Fix vec_sld semantics for little endian\n\nThe vec_sld interface provides access to the vsldoi instruction.\nUnlike most of the vec_* interfaces, we do not attempt to change the\ngenerated code for vec_sld based on the endian mode.  It is too\ndifficult to correctly infer the desired semantics because of\ndifferent element types, and the corrected instruction sequence is\nexpensive, involving loading a permute control vector and performing a\ngeneralized permute.\n\nFor GCC, this was implemented as \"Don't touch the vec_sld\"\nimplementation.  When it came time for the LLVM implementation, I did\nthe same thing.  However, this was hasty and incorrect.  In LLVM's\nversion of altivec.h, vec_sld was previously defined in terms of the\nvec_perm interface.  Because vec_perm semantics are adjusted for\nlittle endian, this means that leaving vec_sld untouched causes it to\ngenerate something different for LE than for BE.  Not good.\n\nThis patch adjusts the form of vec_perm that is used for vec_sld and\nvec_vsldoi, effectively undoing the modifications so that the same\nvsldoi instruction will be generated for both BE and LE.\n\nThere is an accompanying back-end patch to take care of some small\nripple effects caused by these changes.\n\n\ngit-svn-id: http://llvm.org/svn/llvm-project/cfe/trunk@242297 91177308-0d34-0410-b5e6-96231b3b80d8","distinct":true,"url":"https://api.github.com/repos/spurious/clang-mirror/commits/90d71ef79e1dc20280c6791a0214dbfbd89ab7db"}]}