[Openmp-dev] Size of kmp_task_t

César divcesar at gmail.com
Mon Apr 13 13:43:39 PDT 2015


I'm doing some experiments with the RTL and I'm seeing something that I
could not understand. When I compile this code with clang (clang -S
emit-llvm test.c -fopenmp):

#pragma omp parallel
#pragma omp task

the LLVM IR produced contains the following call to "task_alloc", which, in
this case, returns a structure with *five* fields:

%.task_t.val.addr = call { i8*, i32 (i32, i8*)*, i32, i32 (i32, i8*)*, i32
}* @__kmpc_omp_task_alloc({ i32, i32, i32, i32, i8* }* %.__kmpc_ident_t.2.,
i32 %.gtid., i32 %.flags., i64 ptrtoint ({ i8*, i32 (i32, i8*)*, i32, i32
(i32, i8*)*, i32 }* getelementptr ({ i8*, i32 (i32, i8*)*, i32, i32 (i32,
i8*)*, i32 }* null, i32 1) to i64), i64 0, i32 (i32, i8*)* @.omp_ptask.)

the point is, when I inspect the RTL source code the structure kmp_task_t
contains only *four* fields:

typedef struct kmp_task {                   /* GEH: Shouldn't this be
aligned somehow? */
    void *              shareds;            /**< pointer to block of
pointers to shared vars   */
    kmp_routine_entry_t routine;            /**< pointer to routine to call
for executing task */
    kmp_int32           part_id;            /**< part id for the task
    kmp_routine_entry_t destructors;        /* pointer to function to
invoke deconstructors of firstprivate C++ objects */
#endif // OMP_40_ENABLED
    /*  private vars  */
} kmp_task_t;

What am I doing wrong here? Am I using the wrong version of some library?
To install the RTL and LLVM I followed the steps from:
http://openmp.llvm.org/ and http://clang-omp.github.io/

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/openmp-dev/attachments/20150413/2e21bb29/attachment.html>

More information about the Openmp-dev mailing list