Previously, we only used index as key, and then checked whether the building block matches. If it didn't match, we overwrote the cache entry. In pathological cases, this means we *never* used a cached entry, because even in cases we had already computed a value that could be used, it was already replaced by a value which could not be used. This lead to exponential compile time and *huge* generated LLVM IR. PiperOrigin-RevId: 338237297 Change-Id: I258202c6238056bfb4466a95c30b6cd48700fe21
Common utilities and abstractions for handling and emitting LLVM IR for XLA backends.