From: Reid Spencer
This is an overloaded intrinsic. You can use llvm.bit.concat on any +integer bit width. +
+ declare i32 @llvm.bit.concat.i32.i17.i15 (i17 %hi, i15 %lo) + declare i29 @llvm.bit.concat.i29(i16 %lo, i13 %lo) ++ +
+The 'llvm.bit.concat' family of intrinsic functions concatenates two +integer values to produce a longer one. +
+ ++The two arguments may be any bit width. The result must be an integer whose bit +width is the sum of the arguments' bit widths. The first argument represents the +bits that will occupy the high order bit locations in the concatenated result. +THe second argument will occupy the lower order bit locations in the result. +
+ ++The 'llvm.bit.concat' intrinsic is the equivalent of two zext +instructions, a shl and an or. This sequence can be +implemented in hardware so this intrinsic assists with recognizing the sequence +for code generation purposes. The operation proceeds as follows:
+