summaryrefslogtreecommitdiffstats
path: root/clang/test/OpenMP/parallel_copyin_codegen.cpp
Commit message (Collapse)AuthorAgeFilesLines
* [OPENMP] Emit __kmpc_cancel_barrier() and code for 'cancellation point' only ↵Alexey Bataev2015-09-151-12/+12
| | | | | | | | | | | | | | if 'cancel' is found. Patch improves codegen for OpenMP constructs. If the OpenMP region does not have internal 'cancel' construct, a call to 'void __kmpc_barrier()' runtime function is generated for all implicit/explicit barriers. If the region has inner 'cancel' directive, then ``` if (__kmpc_cancel_barrier()) exit from outer construct; ``` code is generated. Also, the code for 'canellation point' directive is not generated if parent directive does not have 'cancel' directive. llvm-svn: 247681
* [OPENMP] Propagate alignment from original variables to the private copies.Alexey Bataev2015-09-101-16/+16
| | | | | | Currently private copies of captured variables have default alignment. Patch makes private variables to have same alignment as original variables. llvm-svn: 247260
* [OPENMP] Outlined function for parallel and other regions with list of ↵Alexey Bataev2015-09-101-93/+51
| | | | | | | | | captured variables. Currently all variables used in OpenMP regions are captured into a record and passed to outlined functions in this record. It may result in some poor performance because of too complex analysis later in optimization passes. Patch makes to emit outlined functions for parallel-based regions with a list of captured variables. It reduces code for 2*n GEPs, stores and loads at least. Codegen for task-based regions remains unchanged because runtime requires that all captured variables are passed in captured record. llvm-svn: 247251
* [OpenMP] Fix copyin codegen test regression in order used in compareSamuel Antao2015-07-271-3/+3
| | | | | | instruction. llvm-svn: 243289
* [OpenMP] Fix copyin clause codegen regression caused by r243277. Samuel Antao2015-07-271-13/+13
| | | | llvm-svn: 243285
* [OpenMP] Add TLS requirement for the copyin clause codegen test. This is anSamuel Antao2015-07-271-1/+1
| | | | | | attempt to fix regressions triggered by r243277. llvm-svn: 243280
* [OpenMP] Add capture for threadprivate variables used in copyin clauseSamuel Antao2015-07-271-2/+257
| | | | | | if TLS is enabled in OpenMP code generation. llvm-svn: 243277
* [OpenMP] Add TLS-based implementation for threadprivate directive.Samuel Antao2015-07-131-6/+6
| | | | llvm-svn: 242080
* Account for calling convention specifiers in function definitions in IR test ↵David Blaikie2015-06-291-34/+34
| | | | | | | | | | | | | cases Several tests wouldn't pass when executed on an armv7a_pc_linux triple due to the non-default arm_aapcs calling convention produced on the function definitions in the IR output. Account for this with the application of a little regex. Patch by Ying Yi. llvm-svn: 240971
* [OPENMP] -fopenmp enables OpenMP support (fix for http://llvm.org/PR23492)Alexey Bataev2015-05-201-6/+6
| | | | | | | -fopenmp turns on OpenMP support and links libiomp5 as OpenMP library. Also there is -fopenmp={libiomp5|libgomp} option that allows to override effect of -fopenmp and link libgomp library (if -fopenmp=libgomp is specified). Differential Revision: http://reviews.llvm.org/D9736 llvm-svn: 237769
* [OPENMP] Fixed codegen for copying/initialization of array variables/parameters.Alexey Bataev2015-05-191-0/+24
| | | | | | This modification generates proper copyin/initialization sequences for array variables/parameters. Before they were considered as pointers, not arrays. llvm-svn: 237691
* [opaque pointer types] Explicit non-pointer type for call expressionsDavid Blaikie2015-04-161-8/+8
| | | | | | (migration for recent LLVM change to textual IR for calls) llvm-svn: 235147
* [OPENMP] Codegen for 'copyin' clause in 'parallel' directive.Alexey Bataev2015-04-161-0/+272
Emits the following code for the clause at the beginning of the outlined function for implicit threads: if (<not a master thread>) { ... <thread local copy of var> = <master thread local copy of var>; ... } <sync point>; Checking for a non-master thread is performed by comparing of the address of the thread local variable with the address of the master's variable. Master thread always uses original variables, so you always know the address of the variable in the master thread. Differential Revision: http://reviews.llvm.org/D9026 llvm-svn: 235075
OpenPOWER on IntegriCloud