Extract out common code and make things safer; NFC
authorSanjoy Das <sanjoy@google.com>
Tue, 22 May 2018 21:55:12 +0000 (14:55 -0700)
committerTensorFlower Gardener <gardener@tensorflow.org>
Tue, 22 May 2018 21:58:09 +0000 (14:58 -0700)
commit679d6da028392c20f4323f158743e7370b47d1f9
tree0b01487515205a38088db1df1b97d3adc76a61c6
parenta3a5e5cad0bfdd28f43223980f64ce367c732aad
Extract out common code and make things safer; NFC

RowMajorMatrixVectorProductEmitter and ColumnMajorMatrixVectorProductEmitter
both cache* the generated LLVM IR by keying off the dimensions of the operation,
the primitive type etc.  Before this CL the code computing the cache key lived
separately from the GEMV emitters.  This pattern introduces a risk that the GEMV
emitters will end up with some state not modeled in the cache key, resulting in
a subtle bug.

This CL reduces the risk by escapsulating the cache key generation and the input
configuration to the GEMV emitters in a single class.

 * In the sense that two different dot operations with the same M,K,N will share
   a single LLVM IR function body.

PiperOrigin-RevId: 197628423
tensorflow/compiler/xla/service/cpu/dot_op_emitter.cc