[llvm] a00ad85 - [Test] rewrite inline_nossp.ll
Nick Desaulniers via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 28 13:53:06 PDT 2021
Author: Nick Desaulniers
Date: 2021-06-28T13:52:45-07:00
New Revision: a00ad8599045ce7d0b5d2a64a8d22267df37bd14
URL: https://github.com/llvm/llvm-project/commit/a00ad8599045ce7d0b5d2a64a8d22267df37bd14
DIFF: https://github.com/llvm/llvm-project/commit/a00ad8599045ce7d0b5d2a64a8d22267df37bd14.diff
LOG: [Test] rewrite inline_nossp.ll
While adding remark based tests in D104944, I noticed that the tests
that we were passing were passing for the wrong reason. They were
passing because the dynamic allocas were preventing inlining, not the
code I added in D91816.
Rewrite and simplify the test. Add remark based checks to validate we're
preventing inline substitutions for the right reasons.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D104958
Added:
Modified:
llvm/test/Transforms/Inline/inline_nossp.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/Inline/inline_nossp.ll b/llvm/test/Transforms/Inline/inline_nossp.ll
index dde75cc524344..586735ec81992 100644
--- a/llvm/test/Transforms/Inline/inline_nossp.ll
+++ b/llvm/test/Transforms/Inline/inline_nossp.ll
@@ -1,97 +1,37 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
-; RUN: opt -inline -o - -S %s | FileCheck %s
-; RUN: opt -passes='cgscc(inline)' %s -S | FileCheck %s
+; RUN: opt -inline -o - -S %s -pass-remarks-missed=inline 2>&1 | FileCheck --check-prefixes=CHECK,CHECK-INLINE %s
+; RUN: opt -passes='cgscc(inline)' %s -S -pass-remarks-missed=inline 2>&1 | FileCheck --check-prefixes=CHECK,CHECK-INLINE %s
; RUN: opt -always-inline -o - -S %s | FileCheck %s
; RUN: opt -passes=always-inline -o - -S %s | FileCheck %s
-declare dso_local void @foo(i8*)
+; CHECK-INLINE: ssp not inlined into nossp_caller because it should never be inlined (cost=never): stack protected callee but caller requested no stack protector
+; CHECK-INLINE: nossp not inlined into ssp_caller because it should never be inlined (cost=never): stack protected caller but callee requested no stack protector
; Not interesting to test.
-define dso_local void @ssp(i64 %0) #0 {
- %2 = alloca i64, align 8
- store i64 %0, i64* %2, align 8
- %3 = load i64, i64* %2, align 8
- %4 = alloca i8, i64 %3, align 16
- call void @foo(i8* %4)
- ret void
-}
-
-; Not interesting to test.
-define dso_local void @ssp_alwaysinline(i64 %0) #1 {
- %2 = alloca i64, align 8
- store i64 %0, i64* %2, align 8
- %3 = load i64, i64* %2, align 8
- %4 = alloca i8, i64 %3, align 16
- call void @foo(i8* %4)
- ret void
-}
+define i32 @nossp() { ret i32 41 }
+define i32 @ssp() sspstrong { ret i32 42 }
+define i32 @nossp_alwaysinline() alwaysinline { ret i32 43 }
+define i32 @ssp_alwaysinline() sspstrong alwaysinline { ret i32 44 }
; @ssp should not be inlined due to mismatch stack protector.
; @ssp_alwaysinline should be inlined due to alwaysinline.
-define dso_local void @nossp() {
-; CHECK-LABEL: @nossp(
-; CHECK-NEXT: [[TMP1:%.*]] = alloca i64, align 8
-; CHECK-NEXT: call void @ssp(i64 1024)
-; CHECK-NEXT: [[SAVEDSTACK:%.*]] = call i8* @llvm.stacksave()
-; CHECK-NEXT: [[TMP2:%.*]] = bitcast i64* [[TMP1]] to i8*
-; CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 8, i8* [[TMP2]])
-; CHECK-NEXT: store i64 1024, i64* [[TMP1]], align 8
-; CHECK-NEXT: [[TMP3:%.*]] = load i64, i64* [[TMP1]], align 8
-; CHECK-NEXT: [[TMP4:%.*]] = alloca i8, i64 [[TMP3]], align 16
-; CHECK-NEXT: call void @foo(i8* [[TMP4]])
-; CHECK-NEXT: [[TMP5:%.*]] = bitcast i64* [[TMP1]] to i8*
-; CHECK-NEXT: call void @llvm.lifetime.end.p0i8(i64 8, i8* [[TMP5]])
-; CHECK-NEXT: call void @llvm.stackrestore(i8* [[SAVEDSTACK]])
-; CHECK-NEXT: ret void
-;
- call void @ssp(i64 1024)
- call void @ssp_alwaysinline(i64 1024)
- ret void
-}
-
-; This is the same case as @nossp above. That the caller has alwaysinline is
-; irrelevant. Not interesting to test.
-define dso_local void @nossp_alwaysinline() #2 {
- call void @ssp(i64 1024)
- call void @ssp_alwaysinline(i64 1024)
- ret void
-}
-
-; @nossp_alwaysinline should be inlined due to alwaysinline.
-; @ssp should not be inlined due to mismatch stack protector.
-; @ssp_alwaysinline should be inlined due to alwaysinline.
-define dso_local void @nossp_caller() {
+define i32 @nossp_caller() {
; CHECK-LABEL: @nossp_caller(
-; CHECK-NEXT: [[TMP1:%.*]] = alloca i64, align 8
-; CHECK-NEXT: [[SAVEDSTACK:%.*]] = call i8* @llvm.stacksave()
-; CHECK-NEXT: call void @ssp(i64 1024)
-; CHECK-NEXT: [[SAVEDSTACK_I:%.*]] = call i8* @llvm.stacksave()
-; CHECK-NEXT: [[TMP2:%.*]] = bitcast i64* [[TMP1]] to i8*
-; CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 8, i8* [[TMP2]])
-; CHECK-NEXT: store i64 1024, i64* [[TMP1]], align 8
-; CHECK-NEXT: [[TMP3:%.*]] = load i64, i64* [[TMP1]], align 8
-; CHECK-NEXT: [[TMP4:%.*]] = alloca i8, i64 [[TMP3]], align 16
-; CHECK-NEXT: call void @foo(i8* [[TMP4]])
-; CHECK-NEXT: [[TMP5:%.*]] = bitcast i64* [[TMP1]] to i8*
-; CHECK-NEXT: call void @llvm.lifetime.end.p0i8(i64 8, i8* [[TMP5]])
-; CHECK-NEXT: call void @llvm.stackrestore(i8* [[SAVEDSTACK_I]])
-; CHECK-NEXT: call void @llvm.stackrestore(i8* [[SAVEDSTACK]])
-; CHECK-NEXT: ret void
+; CHECK-NEXT: [[TMP1:%.*]] = call i32 @ssp()
+; CHECK-NEXT: ret i32 44
;
- call void @nossp_alwaysinline()
- ret void
+ call i32 @ssp()
+ %2 = call i32 @ssp_alwaysinline()
+ ret i32 %2
}
-
; @nossp should not be inlined due to mismatch stack protector.
-define dso_local void @ssp2() #0 {
-; CHECK-LABEL: @ssp2(
-; CHECK-NEXT: call void @nossp()
-; CHECK-NEXT: ret void
+; @nossp_alwaysinline should be inlined due to alwaysinline.
+define i32 @ssp_caller() sspstrong {
+; CHECK-LABEL: @ssp_caller(
+; CHECK-NEXT: [[TMP1:%.*]] = call i32 @nossp()
+; CHECK-NEXT: ret i32 43
;
- call void @nossp()
- ret void
+ call i32 @nossp()
+ %2 = call i32 @nossp_alwaysinline()
+ ret i32 %2
}
-
-attributes #0 = { sspstrong }
-attributes #1 = { sspstrong alwaysinline }
-attributes #2 = { alwaysinline}
More information about the llvm-commits
mailing list