We can do that, but there are two things we have to think about:
Will it make it harder to understand and modify the code, because master and single are two unrelated constructs that have one function.
Master has no clauses, while single has clauses (the handling for allocate and nowait has not been added because it has not been handled by the IRBuilder yet, but they will be added) and will having a common function make it harder to handle both?
I suppose with careful handling, we could carve out a part of both these functions into one function, but intuitively what will that function will doing (what would be it's name)? I can give it a shot if you'd like to see how that would look like. Please let me know.
The code here is probably very similar to the master translation, is there any scope for codesharing?