diff --git a/llvm/test/ThinLTO/X86/Inputs/nossp.ll b/llvm/test/ThinLTO/X86/Inputs/nossp.ll new file mode 100644 --- /dev/null +++ b/llvm/test/ThinLTO/X86/Inputs/nossp.ll @@ -0,0 +1,14 @@ +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-pc-linux-gnu" + +declare void @foo() + +define void @nossp_callee() nossp { + call void @foo() + ret void +} + +define void @ssp_callee() ssp { + call void @foo() + ret void +} diff --git a/llvm/test/ThinLTO/X86/nossp.ll b/llvm/test/ThinLTO/X86/nossp.ll new file mode 100644 --- /dev/null +++ b/llvm/test/ThinLTO/X86/nossp.ll @@ -0,0 +1,51 @@ +; RUN: opt -module-summary %s -o %t1.bc +; RUN: opt -module-summary %p/Inputs/nossp.ll -o %t2.bc +; RUN: llvm-lto2 run %t1.bc %t2.bc -o %t3.bc -save-temps \ +; RUN: -r=%t1.bc,nossp_caller,px \ +; RUN: -r=%t1.bc,ssp_caller,px \ +; RUN: -r=%t1.bc,nossp_caller2,px \ +; RUN: -r=%t1.bc,ssp_caller2,px \ +; RUN: -r=%t1.bc,nossp_callee,x \ +; RUN: -r=%t1.bc,ssp_callee,x \ +; RUN: -r=%t2.bc,nossp_callee,px \ +; RUN: -r=%t2.bc,ssp_callee,px \ +; RUN: -r=%t2.bc,foo +; RUN: llvm-dis %t3.bc.1.4.opt.bc -o - | FileCheck %s + +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-pc-linux-gnu" + +declare void @nossp_callee() nossp +declare void @ssp_callee() ssp + +; nossp caller should be able to inline nossp callee. +define void @nossp_caller() nossp { +; CHECK-LABEL: @nossp_caller +; CHECK-NEXT: tail call void @foo + tail call void @nossp_callee() + ret void +} + +; ssp caller should be able to inline ssp callee. +define void @ssp_caller() ssp { +; CHECK-LABEL: @ssp_caller +; CHECK-NEXT: tail call void @foo + tail call void @ssp_callee() + ret void +} + +; nossp caller should *NOT* be able to inline ssp callee. +define void @nossp_caller2() nossp { +; CHECK-LABEL: @nossp_caller2 +; CHECK-NEXT: tail call void @ssp_callee + tail call void @ssp_callee() + ret void +} + +; ssp caller should *NOT* be able to inline nossp callee. +define void @ssp_caller2() ssp { +; CHECK-LABEL: @ssp_caller2 +; CHECK-NEXT: tail call void @nossp_callee + tail call void @nossp_callee() + ret void +}