llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clangir Author: Amr Hesham (AmrDeveloper) <details> <summary>Changes</summary> Implement the OpenMPRequiredSimdAlign kind of UnaryExprOrTypeTraitExpr --- Full diff: https://github.com/llvm/llvm-project/pull/184214.diff 2 Files Affected: - (modified) clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp (+6-6) - (added) clang/test/CIR/CodeGen/openmp_default_simd_align.c (+28) ``````````diff diff --git a/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp b/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp index 03c8369753f35..0e53a96572b65 100644 --- a/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenExprScalar.cpp @@ -2632,12 +2632,12 @@ mlir::Value ScalarExprEmitter::VisitUnaryExprOrTypeTraitExpr( } } } else if (e->getKind() == UETT_OpenMPRequiredSimdAlign) { - cgf.getCIRGenModule().errorNYI( - e->getSourceRange(), "sizeof operator for OpenMpRequiredSimdAlign", - e->getStmtClassName()); - return builder.getConstant( - loc, cir::IntAttr::get(cgf.cgm.uInt64Ty, - llvm::APSInt(llvm::APInt(64, 1), true))); + clang::CharUnits::QuantityType alignment = + cgf.getContext() + .toCharUnitsFromBits(cgf.getContext().getOpenMPDefaultSimdAlign( + e->getTypeOfArgument()->getPointeeType())) + .getQuantity(); + return builder.getConstantInt(loc, cgf.cgm.sizeTy, alignment); } else if (e->getKind() == UETT_VectorElements) { auto vecTy = cast<cir::VectorType>(convertType(e->getTypeOfArgument())); if (vecTy.getIsScalable()) { diff --git a/clang/test/CIR/CodeGen/openmp_default_simd_align.c b/clang/test/CIR/CodeGen/openmp_default_simd_align.c new file mode 100644 index 0000000000000..8b4e25d8d09d9 --- /dev/null +++ b/clang/test/CIR/CodeGen/openmp_default_simd_align.c @@ -0,0 +1,28 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value -fclangir -emit-cir %s -o %t.cir +// RUN: FileCheck --input-file=%t.cir %s -check-prefix=CIR +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value -fclangir -emit-llvm %s -o %t-cir.ll +// RUN: FileCheck --input-file=%t-cir.ll %s -check-prefix=LLVM +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value -emit-llvm %s -o %t.ll +// RUN: FileCheck --input-file=%t.ll %s -check-prefix=OGCG + +enum e0 { E0 }; +struct s0 { + enum e0 a:31; +}; + +int f0(void) { + return __builtin_omp_required_simd_align(struct s0); +} + +// CIR: %[[RET_ADDR:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"] +// CIR: %[[CONST_16:.*]] = cir.const #cir.int<16> : !s32i +// CIR: cir.store %[[CONST_16]], %[[RET_ADDR]] : !s32i, !cir.ptr<!s32i> +// CIR: %[[TMP_RET:.*]] = cir.load %[[RET_ADDR]] : !cir.ptr<!s32i>, !s32i +// CIR: cir.return %[[TMP_RET]] : !s32i + +// LLVM: %[[RET_ADDR:.*]] = alloca i32 +// LLVM: store i32 16, ptr %[[RET_ADDR]], align 4 +// LLVM: %[[TMP_RET:.*]] = load i32, ptr %[[RET_ADDR]], align 4 +// LLVM: ret i32 %[[TMP_RET]] + +// OGCG: ret i32 16 `````````` </details> https://github.com/llvm/llvm-project/pull/184214 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
