An instance of regprog_T is returned by vim_regcomp(). It needs to be passed to vim_regexec().
This is a «base» struct, the two specific (derived, sort of) structs are regmatch_T (used for single-line matching) and regmmatch_T (used for multi-line matching).
typedef struct regprog
{
regengine_T *engine;
unsigned regflags;
unsigned re_engine; // automatic, backtracking or nfa engine
unsigned re_flags; // second argument for vim_regcomp()
int re_in_use; // prog is being executed
} regprog_T;
See also
A regprog_T* is used for a compiled regexp program in the AutoPat struct.