From 7235002bd131dd850633cad530da6853af852ee5 Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Tue, 18 Nov 2008 07:30:57 +0000 Subject: [PATCH] Remove the stackprotector_check intrinsic. Use a volatile load instead. llvm-svn: 59504 --- llvm/include/llvm/Intrinsics.td | 7 ++----- llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp | 13 ------------- llvm/lib/CodeGen/StackProtector.cpp | 10 ++++------ 3 files changed, 6 insertions(+), 24 deletions(-) diff --git a/llvm/include/llvm/Intrinsics.td b/llvm/include/llvm/Intrinsics.td index c654c10eb8ee..1e7f3d68da51 100644 --- a/llvm/include/llvm/Intrinsics.td +++ b/llvm/include/llvm/Intrinsics.td @@ -180,14 +180,11 @@ def int_pcmarker : Intrinsic<[llvm_void_ty], [llvm_i32_ty]>; def int_readcyclecounter : Intrinsic<[llvm_i64_ty]>; -// Stack Protector Intrinsics - The stackprotector_create writes the stack guard -// to the correct place on the stack frame. The stackprotector_check reads back -// the stack guard that the stackprotector_create stored. +// Stack Protector Intrinsic - The stackprotector_create writes the stack guard +// to the correct place on the stack frame. def int_stackprotector_create : Intrinsic<[llvm_void_ty], [llvm_ptr_ty, llvm_ptrptr_ty], [IntrWriteMem]>; -def int_stackprotector_check : Intrinsic<[llvm_ptr_ty], [llvm_ptrptr_ty], - [IntrReadMem]>; //===------------------- Standard C Library Intrinsics --------------------===// // diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp index 4a934526895f..140b85670366 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp @@ -4041,19 +4041,6 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { DAG.setRoot(Result); return 0; } - case Intrinsic::stackprotector_check: { - // Emit code into the DAG to retrieve the stack guard off of the stack. - MachineFunction &MF = DAG.getMachineFunction(); - MachineFrameInfo *MFI = MF.getFrameInfo(); - MVT PtrTy = TLI.getPointerTy(); - - // Load the value stored on the stack. - int FI = MFI->getStackProtectorIndex(); - SDValue FIN = DAG.getFrameIndex(MFI->getStackProtectorIndex(), PtrTy); - setValue(&I, DAG.getLoad(PtrTy, getRoot(), FIN, - PseudoSourceValue::getFixedStack(FI), 0, true)); - return 0; - } case Intrinsic::var_annotation: // Discard annotate attributes return 0; diff --git a/llvm/lib/CodeGen/StackProtector.cpp b/llvm/lib/CodeGen/StackProtector.cpp index 10b5d6d07f85..8fe6529ef448 100644 --- a/llvm/lib/CodeGen/StackProtector.cpp +++ b/llvm/lib/CodeGen/StackProtector.cpp @@ -177,7 +177,7 @@ bool StackProtector::InsertStackProtectors() { // return: // ... // %1 = load __stack_chk_guard - // %2 = call i8* @llvm.stackprotect.check(StackGuardSlot) + // %2 = load StackGuardSlot // %3 = cmp i1 %1, %2 // br i1 %3, label %SP_return, label %CallStackCheckFailBlk // @@ -196,11 +196,9 @@ bool StackProtector::InsertStackProtectors() { NewBB->moveAfter(BB); // Generate the stack protector instructions in the old basic block. - LoadInst *LI = new LoadInst(StackGuardVar, "", false, BB); - CallInst *CI = CallInst:: - Create(Intrinsic::getDeclaration(M, Intrinsic::stackprotector_check), - AI, "", BB); - ICmpInst *Cmp = new ICmpInst(CmpInst::ICMP_EQ, CI, LI, "", BB); + LoadInst *LI1 = new LoadInst(StackGuardVar, "", false, BB); + LoadInst *LI2 = new LoadInst(AI, "", true, BB); + ICmpInst *Cmp = new ICmpInst(CmpInst::ICMP_EQ, LI1, LI2, "", BB); BranchInst::Create(NewBB, FailBB, Cmp, BB); }