[llvm] a4e507d - [AArch64][GlobalISel] Do not create LIFETIME instructions in functions. (#115669)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 11 01:27:44 PST 2024
Author: David Green
Date: 2024-11-11T09:27:40Z
New Revision: a4e507df7a07f234350669395d3521ed343a06ea
URL: https://github.com/llvm/llvm-project/commit/a4e507df7a07f234350669395d3521ed343a06ea
DIFF: https://github.com/llvm/llvm-project/commit/a4e507df7a07f234350669395d3521ed343a06ea.diff
LOG: [AArch64][GlobalISel] Do not create LIFETIME instructions in functions. (#115669)
For the same reason that we do not translate lifetime markers in a -O0,
we should not translate them for optnone functions too.
Added:
Modified:
llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
index 349c35b3781d16..056f4f41ffca79 100644
--- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
@@ -2166,7 +2166,8 @@ bool IRTranslator::translateKnownIntrinsic(const CallInst &CI, Intrinsic::ID ID,
case Intrinsic::lifetime_start:
case Intrinsic::lifetime_end: {
// No stack colouring in O0, discard region information.
- if (MF->getTarget().getOptLevel() == CodeGenOptLevel::None)
+ if (MF->getTarget().getOptLevel() == CodeGenOptLevel::None ||
+ MF->getFunction().hasOptNone())
return true;
unsigned Op = ID == Intrinsic::lifetime_start ? TargetOpcode::LIFETIME_START
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll
index ed7bcff5160f81..7a67cf3fd4c942 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll
@@ -1477,6 +1477,20 @@ define void @test_lifetime_intrin() {
ret void
}
+define void @test_lifetime_intrin_optnone() optnone noinline {
+; CHECK-LABEL: name: test_lifetime_intrin_optnone
+; CHECK: RET_ReallyLR
+; O3-LABEL: name: test_lifetime_intrin_optnone
+; O3: {{%[0-9]+}}:_(p0) = G_FRAME_INDEX %stack.0.slot
+; O3-NEXT: G_STORE
+; O3-NEXT: RET_ReallyLR
+ %slot = alloca i8, i32 4
+ call void @llvm.lifetime.start.p0(i64 0, ptr %slot)
+ store volatile i8 10, ptr %slot
+ call void @llvm.lifetime.end.p0(i64 0, ptr %slot)
+ ret void
+}
+
define void @test_load_store_atomics(ptr %addr) {
; CHECK-LABEL: name: test_load_store_atomics
; CHECK: [[ADDR:%[0-9]+]]:_(p0) = COPY $x0
More information about the llvm-commits
mailing list