BRANCH INDIRECT ON CONDITION (BIC) was primarily designed in support of the new guarded-storage facility (GSF). GSF is described beginning on page 4-64 of the IBM z/Architecture Principles of Operation (SA22-7832-11). Programming note 1 on p. 4-72 gives a (very) brief overview of GSF concepts.
Briefly, GSF provides support for programming languages that implement so-called "garbage collection" by allowing the language to designate sections of it's heap that are undergoing urban renewal. When the program loads a pointer to a program object (by means of the new LOAD GUARDED [LGG] or LOAD LOGICAL AND SHIFT GUARDED [LLGFSG] instructions), either (a) the instruction executes normally (i.e., the target location is not undergoing urban renewal), or (b) the target location is is in a guarded area, in which case a guarded-storage event (GSE) is recognized. In the case of GSE recognition, control branches to a pre-registered event handler, where the program can perform whatever fix-up is required to effect garbage collection, and then branch back to the original LGG / LLGFSG to try it again. BIC provides the means by which the GSE handler can branch back with only a stack pointer. That is, after performing whatever garbage-collection is necessary, the GSE handler can restore any and all registers it altered, and then branch back to the LGG / LLGFSG with only the stack pointer. Using BIC for indexed branches was considered to be interesting (though secondary). FYI: Although I was involved with the architecture definition of GSF and BIC, I am now retired.
