Index: lib/CodeGen/SafeStack.cpp =================================================================== --- lib/CodeGen/SafeStack.cpp +++ lib/CodeGen/SafeStack.cpp @@ -394,9 +394,12 @@ Value *StackGuardVar = nullptr; if (TL) StackGuardVar = TL->getIRStackGuard(IRB); - if (!StackGuardVar) - StackGuardVar = - F.getParent()->getOrInsertGlobal("__stack_chk_guard", StackPtrTy); + if (!StackGuardVar) { + Module *M = F.getParent(); + TL->insertSSPDeclarations(*M); + Function *SG = Intrinsic::getDeclaration(M, Intrinsic::stackguard); + return IRB.CreateCall(SG); + } return IRB.CreateLoad(StackGuardVar, "StackGuard"); } Index: test/Transforms/SafeStack/X86/ssp.ll =================================================================== --- test/Transforms/SafeStack/X86/ssp.ll +++ test/Transforms/SafeStack/X86/ssp.ll @@ -8,7 +8,7 @@ ; CHECK: %[[A:.*]] = getelementptr i8, i8* %[[USP]], i32 -8 ; CHECK: %[[StackGuardSlot:.*]] = bitcast i8* %[[A]] to i8** -; CHECK: %[[StackGuard:.*]] = load i8*, i8** @__stack_chk_guard +; CHECK: %[[StackGuard:.*]] = call i8* @llvm.stackguard() ; CHECK: store i8* %[[StackGuard]], i8** %[[StackGuardSlot]] %a = alloca i8, align 1