llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clangir Author: Haocong Lu (Luhaocong) <details> <summary>Changes</summary> Part of https://github.com/llvm/llvm-project/issues/167765 --- Full diff: https://github.com/llvm/llvm-project/pull/171974.diff 2 Files Affected: - (modified) clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp (+6-1) - (added) clang/test/CIR/CodeGen/ms-intrinsics.c (+40) ``````````diff diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp index f9e1f75a51143..5b6e0537c32d1 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp @@ -1706,7 +1706,12 @@ CIRGenFunction::emitX86BuiltinExpr(unsigned builtinID, const CallExpr *expr) { cir::SyncScopeKind::SingleThread)); return mlir::Value{}; } - case X86::BI_AddressOfReturnAddress: + case X86::BI_AddressOfReturnAddress: { + mlir::Location loc = getLoc(expr->getExprLoc()); + mlir::Value addr = emitIntrinsicCallOp( + builder, loc, "addressofreturnaddress", allocaInt8PtrTy); + return builder.createCast(loc, cir::CastKind::bitcast, addr, voidPtrTy); + } case X86::BI__stosb: case X86::BI__ud2: case X86::BI__int2c: diff --git a/clang/test/CIR/CodeGen/ms-intrinsics.c b/clang/test/CIR/CodeGen/ms-intrinsics.c new file mode 100644 index 0000000000000..0d07db2beac46 --- /dev/null +++ b/clang/test/CIR/CodeGen/ms-intrinsics.c @@ -0,0 +1,40 @@ +// RUN: %clang_cc1 -x c -ffreestanding -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \ +// RUN: -triple x86_64-unknown-linux -Wno-implicit-function-declaration -fclangir -emit-cir -o %t.cir %s +// RUN: FileCheck --check-prefix=CIR --input-file=%t.cir %s +// RUN: %clang_cc1 -x c++ -ffreestanding -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \ +// RUN: -triple x86_64-unknown-linux -Wno-implicit-function-declaration -fclangir -emit-cir -o %t.cir %s +// RUN: FileCheck --check-prefix=CIR --input-file=%t.cir %s + +// RUN: %clang_cc1 -x c -ffreestanding -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \ +// RUN: -triple x86_64-unknown-linux -Wno-implicit-function-declaration -fclangir -emit-llvm -o %t.ll %s +// RUN: FileCheck --check-prefix=LLVM --input-file=%t.ll %s +// RUN: %clang_cc1 -x c++ -ffreestanding -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \ +// RUN: -triple x86_64-unknown-linux -Wno-implicit-function-declaration -fclangir -emit-llvm -o %t.ll %s +// RUN: FileCheck --check-prefix=LLVM --input-file=%t.ll %s + +// RUN: %clang_cc1 -x c -ffreestanding -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \ +// RUN: -triple x86_64-unknown-linux -emit-llvm -Wall -Werror %s -o - \ +// RUN: | FileCheck %s -check-prefix=OGCG +// RUN: %clang_cc1 -x c++ -ffreestanding -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \ +// RUN: -triple x86_64-unknown-linux -emit-llvm -Wall -Werror %s -o - \ +// RUN: | FileCheck %s -check-prefix=OGCG + +// This test mimics clang/test/CodeGen/ms-intrinsics.c, which eventually +// CIR shall be able to support fully. + +void *_AddressOfReturnAddress(void); + +#if defined(__i386__) || defined(__x86_64__) || defined (__aarch64__) +void *test_AddressOfReturnAddress(void) { + // CIR-LABEL: test_AddressOfReturnAddress + // CIR: %[[ADDR:.*]] = cir.call_llvm_intrinsic "addressofreturnaddress" : () -> !cir.ptr<!u8i> + // CIR: %{{.*}} = cir.cast bitcast %[[ADDR]] : !cir.ptr<!u8i> -> !cir.ptr<!void> + + // LLVM-LABEL: test_AddressOfReturnAddress + // LLVM: call ptr @llvm.addressofreturnaddress.p0() + + // OGCG-LABEL: test_AddressOfReturnAddress + // OGCG: call ptr @llvm.addressofreturnaddress.p0() + return _AddressOfReturnAddress(); +} +#endif `````````` </details> https://github.com/llvm/llvm-project/pull/171974 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
