[mlir][acc] Introduce privatization operations for codegen (#195273)
This change adds codegen-oriented operations for representing
private-variable storage and materializing the storage that a particular
parallel execution actually uses.
The two operations are meant to be used together:
- acc.privatize introduces an abstract handle for the privatized
storage,
including the parallel levels that determine the ultimate size of the
storage needed. Which parallel levels apply can be stated when that
structure is known, or omitted so the same representation can be refined
later as launch and loop parallelism are decided.
- acc.private_local takes that handle and yields the concrete storage
for the current execution context(for example the slice that corresponds
to this gang or worker).