# This is a combination of 2 commits.
# The first commit's message is:

Add IslPTXGenerator

IslPTXGenerator is used to generate llvm IR for both the host and
device.

# This is the 2nd commit message:

Add setGPUKernel function to set the current kernel
Add IslPTXGenerator

IslPTXGenerator is used to generate llvm IR for both the host and
device.
Add struct gen_ext

This struct will be used to transmit all the output of the ppcg generated
isl* structures.
 - guard: guard of the host code.
 - tree: host code ast_node.
 - prog: gpu_prog struct.
Update generate_gpu to use gen_ext

So we can use gen_ext to output the generated ast_node and gpu_prog.
Add two flags for GPGPU codegen(isl)

 - enable-polly-gpgpu-isl: enable polly GPGPU codegen.
 - polly-gpgpu-triple-isl: set the GPU triple string.
Add dump_ast_node debug option
Add print_ast_node_as_c_format function
Add an IslPTXGenerator member to isl NodeBuilder
Trigger the gpgpu codegen in IslCodeGeneration::runOnScop
[Fix] Collect array and scopstmt info before collecting access
Update may_write and tagged_may_write calculation

In ppcg, may_write means all the writes (polly's may_writes plus
must_writes).
Set same ref_id to gpu_stmt_access and MemoryAccess
Add getHostGuard
Add createForGPGPU function to generate the LLVM IR
Add createForGPGPU function to generate the LLVM IR
Add createKernelDomain, createKernelCopy and createKernelSync
Get the current llvm::Value of grid ids and block ids
Set correct Value for GPU ids before we call createUser

Fill in the IDTOValue with Values of block ids and thread ids and their
corresponding isl_ids.
Add getGridSize function in IslNodeBuilder
Add missing {} to case statement