[PATCH] D146648: [MLIR][OpenMP] Added MLIR translation support for use_device clauses

Akash Banerjee via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 12 04:33:30 PDT 2023


TIFitis added a comment.

Here is an example of what clang generates:

C code:

  void foo(int *a, int *b, int *c){
  #pragma omp target data map(from:b, c) use_device_ptr(a) use_device_addr(b){
      *a = 10;
      *b = 20;
      *c = 30;
    }
  }

LLVM IR:

  @.offload_sizes = private unnamed_addr constant [3 x i64] [i64 8, i64 8, i64 0]
  @.offload_maptypes = private unnamed_addr constant [3 x i64] [i64 66, i64 2, i64 64]
  
  define dso_local void @foo(ptr noundef %a, ptr noundef %b, ptr noundef %c) #0 {
  entry:
    %a.addr = alloca ptr, align 8
    %b.addr = alloca ptr, align 8
    %c.addr = alloca ptr, align 8
    %.offload_baseptrs = alloca [3 x ptr], align 8
    %.offload_ptrs = alloca [3 x ptr], align 8
    %.offload_mappers = alloca [3 x ptr], align 8
    %0 = alloca ptr, align 8
    store ptr %a, ptr %a.addr, align 8
    store ptr %b, ptr %b.addr, align 8
    store ptr %c, ptr %c.addr, align 8
    %1 = load ptr, ptr %a.addr, align 8
    %2 = getelementptr inbounds [3 x ptr], ptr %.offload_baseptrs, i32 0, i32 0
    store ptr %b.addr, ptr %2, align 8
    %3 = getelementptr inbounds [3 x ptr], ptr %.offload_ptrs, i32 0, i32 0
    store ptr %b.addr, ptr %3, align 8
    %4 = getelementptr inbounds [3 x ptr], ptr %.offload_mappers, i64 0, i64 0
    store ptr null, ptr %4, align 8
    %5 = getelementptr inbounds [3 x ptr], ptr %.offload_baseptrs, i32 0, i32 1
    store ptr %c.addr, ptr %5, align 8
    %6 = getelementptr inbounds [3 x ptr], ptr %.offload_ptrs, i32 0, i32 1
    store ptr %c.addr, ptr %6, align 8
    %7 = getelementptr inbounds [3 x ptr], ptr %.offload_mappers, i64 0, i64 1
    store ptr null, ptr %7, align 8
    %8 = getelementptr inbounds [3 x ptr], ptr %.offload_baseptrs, i32 0, i32 2
    store ptr %1, ptr %8, align 8
    %9 = getelementptr inbounds [3 x ptr], ptr %.offload_ptrs, i32 0, i32 2
    store ptr %1, ptr %9, align 8
    %10 = getelementptr inbounds [3 x ptr], ptr %.offload_mappers, i64 0, i64 2
    store ptr null, ptr %10, align 8
    %11 = getelementptr inbounds [3 x ptr], ptr %.offload_baseptrs, i32 0, i32 0
    %12 = getelementptr inbounds [3 x ptr], ptr %.offload_ptrs, i32 0, i32 0
    call void @__tgt_target_data_begin_mapper(ptr @1, i64 -1, i32 3, ptr %11, ptr %12, ptr @.offload_sizes, ptr @.offload_maptypes, ptr null, ptr null)
    %13 = load ptr, ptr %8, align 8
    store ptr %13, ptr %0, align 8
    %14 = load ptr, ptr %2, align 8
    %15 = load ptr, ptr %0, align 8
    store i32 10, ptr %15, align 4
    %16 = load ptr, ptr %14, align 8
    store i32 20, ptr %16, align 4
    %17 = load ptr, ptr %c.addr, align 8
    store i32 30, ptr %17, align 4
    %18 = getelementptr inbounds [3 x ptr], ptr %.offload_baseptrs, i32 0, i32 0
    %19 = getelementptr inbounds [3 x ptr], ptr %.offload_ptrs, i32 0, i32 0
    call void @__tgt_target_data_end_mapper(ptr @1, i64 -1, i32 3, ptr %18, ptr %19, ptr @.offload_sizes, ptr @.offload_maptypes, ptr null, ptr null)
    ret void
  }


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D146648/new/

https://reviews.llvm.org/D146648



More information about the llvm-commits mailing list