diff options
author | Christudasan Devadasan <Christudasan.Devadasan@amd.com> | 2019-07-22 12:50:30 +0000 |
---|---|---|
committer | Christudasan Devadasan <Christudasan.Devadasan@amd.com> | 2019-07-22 12:50:30 +0000 |
commit | 69147b7c62a3f8eb2f8f3223da453b31e7bb650d (patch) | |
tree | 86eee232690e750e6f0d2902e05968b7f6619cd8 | |
parent | f30586d208f878f51297375dcb7dabfe694a53c3 (diff) | |
download | clang-69147b7c62a3f8eb2f8f3223da453b31e7bb650d.tar.gz |
Updated the signature for some stack related intrinsics (CLANG)
Modified the intrinsics
int_addressofreturnaddress,
int_frameaddress & int_sponentry.
This commit depends on the changes in rL366679
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D64563
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@366683 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/CGBuiltin.cpp | 24 | ||||
-rw-r--r-- | lib/CodeGen/CGException.cpp | 3 | ||||
-rw-r--r-- | test/CodeGen/builtin-sponentry.c | 2 | ||||
-rw-r--r-- | test/CodeGen/exceptions-seh.c | 4 | ||||
-rw-r--r-- | test/CodeGen/integer-overflow.c | 8 | ||||
-rw-r--r-- | test/CodeGen/ms-intrinsics.c | 2 | ||||
-rw-r--r-- | test/CodeGen/ms-setjmp.c | 8 | ||||
-rw-r--r-- | test/CodeGenOpenCL/builtins-generic-amdgcn.cl | 5 |
8 files changed, 33 insertions, 23 deletions
diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index dee1e207ef..82c089e722 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -843,10 +843,12 @@ static RValue EmitMSVCRTSetJmp(CodeGenFunction &CGF, MSVCSetJmpKind SJKind, Name = SJKind == MSVCSetJmpKind::_setjmp ? "_setjmp" : "_setjmpex"; Arg1Ty = CGF.Int8PtrTy; if (CGF.getTarget().getTriple().getArch() == llvm::Triple::aarch64) { - Arg1 = CGF.Builder.CreateCall(CGF.CGM.getIntrinsic(Intrinsic::sponentry)); + Arg1 = CGF.Builder.CreateCall( + CGF.CGM.getIntrinsic(Intrinsic::sponentry, CGF.AllocaInt8PtrTy)); } else - Arg1 = CGF.Builder.CreateCall(CGF.CGM.getIntrinsic(Intrinsic::frameaddress), - llvm::ConstantInt::get(CGF.Int32Ty, 0)); + Arg1 = CGF.Builder.CreateCall( + CGF.CGM.getIntrinsic(Intrinsic::frameaddress, CGF.AllocaInt8PtrTy), + llvm::ConstantInt::get(CGF.Int32Ty, 0)); } // Mark the call site and declaration with ReturnsTwice. @@ -2556,7 +2558,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, case Builtin::BI__builtin_frame_address: { Value *Depth = ConstantEmitter(*this).emitAbstract(E->getArg(0), getContext().UnsignedIntTy); - Function *F = CGM.getIntrinsic(Intrinsic::frameaddress); + Function *F = CGM.getIntrinsic(Intrinsic::frameaddress, AllocaInt8PtrTy); return RValue::get(Builder.CreateCall(F, Depth)); } case Builtin::BI__builtin_extract_return_addr: { @@ -2637,9 +2639,9 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, Address Buf = EmitPointerWithAlignment(E->getArg(0)); // Store the frame pointer to the setjmp buffer. - Value *FrameAddr = - Builder.CreateCall(CGM.getIntrinsic(Intrinsic::frameaddress), - ConstantInt::get(Int32Ty, 0)); + Value *FrameAddr = Builder.CreateCall( + CGM.getIntrinsic(Intrinsic::frameaddress, AllocaInt8PtrTy), + ConstantInt::get(Int32Ty, 0)); Builder.CreateStore(FrameAddr, Buf); // Store the stack pointer to the setjmp buffer. @@ -7293,12 +7295,13 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID, } if (BuiltinID == AArch64::BI_AddressOfReturnAddress) { - llvm::Function *F = CGM.getIntrinsic(Intrinsic::addressofreturnaddress); + llvm::Function *F = + CGM.getIntrinsic(Intrinsic::addressofreturnaddress, AllocaInt8PtrTy); return Builder.CreateCall(F); } if (BuiltinID == AArch64::BI__builtin_sponentry) { - llvm::Function *F = CGM.getIntrinsic(Intrinsic::sponentry); + llvm::Function *F = CGM.getIntrinsic(Intrinsic::sponentry, AllocaInt8PtrTy); return Builder.CreateCall(F); } @@ -12113,7 +12116,8 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, } case X86::BI_AddressOfReturnAddress: { - Function *F = CGM.getIntrinsic(Intrinsic::addressofreturnaddress); + Function *F = + CGM.getIntrinsic(Intrinsic::addressofreturnaddress, AllocaInt8PtrTy); return Builder.CreateCall(F); } case X86::BI__stosb: { diff --git a/lib/CodeGen/CGException.cpp b/lib/CodeGen/CGException.cpp index 3b7a88a0b7..4c94cfb233 100644 --- a/lib/CodeGen/CGException.cpp +++ b/lib/CodeGen/CGException.cpp @@ -1774,7 +1774,8 @@ void CodeGenFunction::EmitCapturedLocals(CodeGenFunction &ParentCGF, // EH registration is passed in as the EBP physical register. We can // recover that with llvm.frameaddress(1). EntryFP = Builder.CreateCall( - CGM.getIntrinsic(llvm::Intrinsic::frameaddress), {Builder.getInt32(1)}); + CGM.getIntrinsic(llvm::Intrinsic::frameaddress, AllocaInt8PtrTy), + {Builder.getInt32(1)}); } else { // Otherwise, for x64 and 32-bit finally functions, the parent FP is the // second parameter. diff --git a/test/CodeGen/builtin-sponentry.c b/test/CodeGen/builtin-sponentry.c index 0a85089106..46bfa2557a 100644 --- a/test/CodeGen/builtin-sponentry.c +++ b/test/CodeGen/builtin-sponentry.c @@ -4,5 +4,5 @@ void *test_sponentry() { return __builtin_sponentry(); } // CHECK-LABEL: define dso_local i8* @test_sponentry() -// CHECK: = tail call i8* @llvm.sponentry() +// CHECK: = tail call i8* @llvm.sponentry.p0i8() // CHECK: ret i8* diff --git a/test/CodeGen/exceptions-seh.c b/test/CodeGen/exceptions-seh.c index 8c952a04be..8a54a56d19 100644 --- a/test/CodeGen/exceptions-seh.c +++ b/test/CodeGen/exceptions-seh.c @@ -51,7 +51,7 @@ int safe_div(int numerator, int denominator, int *res) { // 32-bit SEH needs this filter to save the exception code. // // X86-LABEL: define internal i32 @"?filt$0@0@safe_div@@"() -// X86: %[[ebp:[^ ]*]] = call i8* @llvm.frameaddress(i32 1) +// X86: %[[ebp:[^ ]*]] = call i8* @llvm.frameaddress.p0i8(i32 1) // X86: %[[fp:[^ ]*]] = call i8* @llvm.eh.recoverfp(i8* bitcast (i32 (i32, i32, i32*)* @safe_div to i8*), i8* %[[ebp]]) // X86: call i8* @llvm.localrecover(i8* bitcast (i32 (i32, i32, i32*)* @safe_div to i8*), i8* %[[fp]], i32 0) // X86: load i8*, i8** @@ -103,7 +103,7 @@ int filter_expr_capture(void) { // ARM64: call i8* @llvm.localrecover(i8* bitcast (i32 ()* @filter_expr_capture to i8*), i8* %[[fp]], i32 0) // // X86-LABEL: define internal i32 @"?filt$0@0@filter_expr_capture@@"() -// X86: %[[ebp:[^ ]*]] = call i8* @llvm.frameaddress(i32 1) +// X86: %[[ebp:[^ ]*]] = call i8* @llvm.frameaddress.p0i8(i32 1) // X86: %[[fp:[^ ]*]] = call i8* @llvm.eh.recoverfp(i8* bitcast (i32 ()* @filter_expr_capture to i8*), i8* %[[ebp]]) // X86: call i8* @llvm.localrecover(i8* bitcast (i32 ()* @filter_expr_capture to i8*), i8* %[[fp]], i32 0) // diff --git a/test/CodeGen/integer-overflow.c b/test/CodeGen/integer-overflow.c index 0b28bc5b8a..dd78908502 100644 --- a/test/CodeGen/integer-overflow.c +++ b/test/CodeGen/integer-overflow.c @@ -99,8 +99,8 @@ void test1() { // PR24256: don't instrument __builtin_frame_address. __builtin_frame_address(0 + 0); - // DEFAULT: call i8* @llvm.frameaddress(i32 0) - // WRAPV: call i8* @llvm.frameaddress(i32 0) - // TRAPV: call i8* @llvm.frameaddress(i32 0) - // CATCH_UB: call i8* @llvm.frameaddress(i32 0) + // DEFAULT: call i8* @llvm.frameaddress.p0i8(i32 0) + // WRAPV: call i8* @llvm.frameaddress.p0i8(i32 0) + // TRAPV: call i8* @llvm.frameaddress.p0i8(i32 0) + // CATCH_UB: call i8* @llvm.frameaddress.p0i8(i32 0) } diff --git a/test/CodeGen/ms-intrinsics.c b/test/CodeGen/ms-intrinsics.c index cf41d23d35..fed789e60d 100644 --- a/test/CodeGen/ms-intrinsics.c +++ b/test/CodeGen/ms-intrinsics.c @@ -142,7 +142,7 @@ void *test_AddressOfReturnAddress() { return _AddressOfReturnAddress(); } // CHECK-INTEL-LABEL: define dso_local i8* @test_AddressOfReturnAddress() -// CHECK-INTEL: = tail call i8* @llvm.addressofreturnaddress() +// CHECK-INTEL: = tail call i8* @llvm.addressofreturnaddress.p0i8() // CHECK-INTEL: ret i8* #endif diff --git a/test/CodeGen/ms-setjmp.c b/test/CodeGen/ms-setjmp.c index 5df9ce5ad2..d1edf3ab0f 100644 --- a/test/CodeGen/ms-setjmp.c +++ b/test/CodeGen/ms-setjmp.c @@ -20,12 +20,12 @@ int test_setjmp() { // I386-NEXT: ret i32 %[[call]] // X64-LABEL: define dso_local i32 @test_setjmp - // X64: %[[addr:.*]] = call i8* @llvm.frameaddress(i32 0) + // X64: %[[addr:.*]] = call i8* @llvm.frameaddress.p0i8(i32 0) // X64: %[[call:.*]] = call i32 @_setjmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @jb, i64 0, i64 0), i8* %[[addr]]) // X64-NEXT: ret i32 %[[call]] // AARCH64-LABEL: define dso_local i32 @test_setjmp - // AARCH64: %[[addr:.*]] = call i8* @llvm.sponentry() + // AARCH64: %[[addr:.*]] = call i8* @llvm.sponentry.p0i8() // AARCH64: %[[call:.*]] = call i32 @_setjmpex(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @jb, i64 0, i64 0), i8* %[[addr]]) // AARCH64-NEXT: ret i32 %[[call]] } @@ -33,12 +33,12 @@ int test_setjmp() { int test_setjmpex() { return _setjmpex(jb); // X64-LABEL: define dso_local i32 @test_setjmpex - // X64: %[[addr:.*]] = call i8* @llvm.frameaddress(i32 0) + // X64: %[[addr:.*]] = call i8* @llvm.frameaddress.p0i8(i32 0) // X64: %[[call:.*]] = call i32 @_setjmpex(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @jb, i64 0, i64 0), i8* %[[addr]]) // X64-NEXT: ret i32 %[[call]] // AARCH64-LABEL: define dso_local i32 @test_setjmpex - // AARCH64: %[[addr:.*]] = call i8* @llvm.sponentry() + // AARCH64: %[[addr:.*]] = call i8* @llvm.sponentry.p0i8() // AARCH64: %[[call:.*]] = call i32 @_setjmpex(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @jb, i64 0, i64 0), i8* %[[addr]]) // AARCH64-NEXT: ret i32 %[[call]] } diff --git a/test/CodeGenOpenCL/builtins-generic-amdgcn.cl b/test/CodeGenOpenCL/builtins-generic-amdgcn.cl index 5a4756bacb..993b0bb7cb 100644 --- a/test/CodeGenOpenCL/builtins-generic-amdgcn.cl +++ b/test/CodeGenOpenCL/builtins-generic-amdgcn.cl @@ -14,3 +14,8 @@ void test_builtin_clzl(global long* out, long a) { *out = __builtin_clzl(a); } + +// CHECK: tail call i8 addrspace(5)* @llvm.frameaddress.p5i8(i32 0) +void test_builtin_frame_address(int *out) { + *out = __builtin_frame_address(0); +} |