[PATCH] D133578: [OpenMP] Add generation of SIMD align assumptions to OMPIRBuilder

Dominik Adamski via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 9 07:19:49 PDT 2022


domada created this revision.
domada added a reviewer: kiranchandramohan.
Herald added subscribers: bzcheeseman, awarzynski, sdasgup3, wenzhicui, wrengr, cota, teijeong, rdzhabarov, tatianashp, msifontes, jurahul, Kayjukh, grosul1, Joonsoo, liufengdb, aartbik, mgester, arpith-jacob, antiagainst, shauheen, rriddle, mehdi_amini, guansong, hiraditya, yaxunl.
Herald added a reviewer: ftynse.
Herald added a project: All.
domada requested review of this revision.
Herald added a reviewer: jdoerfert.
Herald added subscribers: llvm-commits, cfe-commits, pcwang-thead, sstefan1, stephenneuendorffer, nicolasvasilache.
Herald added a reviewer: dcaballe.
Herald added projects: clang, MLIR, LLVM.

Currently generation of align assumptions for OpenMP simd construct is done outside OMPIRBuilder for C code and it is not supported for Fortran.

According to OpenMP 5.0 standard (2.9.3) only pointers and arrays can be aligned for C code.

If given aligned variable is pointer, then Clang generates the following set of the LLVM IR instructions to support simd align clause:

  ; memory allocation for pointer address:
  %A.addr = alloca ptr, align 8
  ; some LLVM IR code
  ; Alignment instructions (alignment is equal to 32):
  %0 = load ptr, ptr %A.addr, align 8
  call void @llvm.assume(i1 true) [ "align"(ptr %0, i64 32) ]

If given aligned variable is array, then Clang generates the following set of the LLVM IR instructions to support simd align clause:

  ; memory allocation for array: 
  %B = alloca [10 x i32], align 16
  ; some LLVM IR code
  ; Alignment instructions (alignment is equal to 32):
  %arraydecay = getelementptr inbounds [10 x i32], ptr %B, i64 0, i64 0
  call void @llvm.assume(i1 true) [ "align"(ptr %arraydecay, i64 32) ]

OMPIRBuilder was modified to support this codegen scheme. Attached unit tests check if generation of align assumptions is successful.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D133578

Files:
  clang/lib/CodeGen/CGStmtOpenMP.cpp
  llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
  llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
  llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
  mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D133578.459054.patch
Type: text/x-patch
Size: 12234 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220909/1cf29a66/attachment-0001.bin>


More information about the cfe-commits mailing list