GitHub PushEvent at 2014-05-29 20:56:42
Repository: llvm-project
Actor: chapuni
Payload: {"shas":[["ef0202171ec0e95cd1d75c44fd15e497e49cf332","2df88d93b29f556204c4c4bee7e5b886dbefddeb@apple.com","Implement AVX1 vbroadcast intrinsics with vector initializers\n\nThese intrinsics are special because they directly take a memory operand (AVX2\nadds the register counterparts).  Typically, other non-memop intrinsics take\nregisters and then it's left to isel to fold memory operands.\n\nIn order to LICM intrinsics directly reading memory, we require that no stores\nare in the loop (LICM) or that the folded load accesses constant memory\n(MachineLICM).  When neither is the case we fail to hoist a loop-invariant\nbroadcast.\n\nWe can work around this limitation if we expose the load as a regular load and\nthen just implement the broadcast using the vector initializer syntax.  This\nexposes the load to LICM and other optimizations.\n\nAt the IR level this is translated into a series of insertelements.  The\nsequence is already recognized as a broadcast so there is no impact on the\nquality of codegen.\n\n_mm256_broadcast_pd and _mm256_broadcast_ps are not updated by this patch\nbecause right now we lack the DAG-combiner smartness to recover the broadcast\ninstructions.  This will be tackled in a follow-on.\n\nThere will be completing changes on the LLVM side to remove the LLVM\nintrinsics and to auto-upgrade bitcode files.\n\nFixes <rdar://problem/16494520>","Adam Nemet",true]],"size":1,"ref":"refs/heads/master","head":"ef0202171ec0e95cd1d75c44fd15e497e49cf332"}