From ab21db79ef1d2530880ad11f21f0b87ffca02dd4 Mon Sep 17 00:00:00 2001
From: Chris Lattner
This value only has defined behavior when used as an operand to the - 'indbr' instruction or for comparisons + 'indirectbr' instruction or for comparisons against null. Pointer equality tests between labels addresses is undefined behavior - though, again, comparison against null is ok, and no label is equal to the null pointer. This may also be passed around as an opaque pointer sized value as long as the bits are not inspected. This allows ptrtoint and arithmetic to be performed on these values so long as - the original value is reconstituted before the indbr.
+ the original value is reconstituted before the indirectbr.Finally, some targets may provide defined semantics when using the value as the operand to an inline assembly, but that is target @@ -2541,7 +2541,7 @@ Instructions 'ret' instruction, the 'br' instruction, the 'switch' instruction, the - ''indbr' Instruction, the + ''indirectbr' Instruction, the 'invoke' instruction, the 'unwind' instruction, and the 'unreachable' instruction.
@@ -2703,19 +2703,19 @@ IfUnequal:- indbr <somety>* <address>, [ label <dest1>, label <dest2>, ... ] + indirectbr <somety>* <address>, [ label <dest1>, label <dest2>, ... ]
The 'indbr' instruction implements an indirect branch to a label +
The 'indirectbr' instruction implements an indirect branch to a label within the current function, whose address is specified by "address". Address must be derived from a blockaddress constant.
@@ -2743,7 +2743,7 @@ IfUnequal:- indbr i8* %Addr, [ label %bb1, label %bb2, label %bb3 ] + indirectbr i8* %Addr, [ label %bb1, label %bb2, label %bb3 ]