From 5f212fad886027a83cf0fb47c7be3fc228ab27ad Mon Sep 17 00:00:00 2001 From: Stephen Tozer Date: Mon, 16 Jun 2025 17:38:55 +0100 Subject: [PATCH] [SystemZ] Treat FAKE_USE instructions as instructions without a size This patch fixes an error in which FAKE_USE instructions would trigger an assertion in SystemZLongBranch due to them having a size of 0 without being excepted in the assertion that each instruction, other than a set of known 0-size instruction types, should have a non-0 size. --- llvm/lib/Target/SystemZ/SystemZLongBranch.cpp | 2 +- llvm/test/CodeGen/SystemZ/fake-use-size.ll | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 llvm/test/CodeGen/SystemZ/fake-use-size.ll diff --git a/llvm/lib/Target/SystemZ/SystemZLongBranch.cpp b/llvm/lib/Target/SystemZ/SystemZLongBranch.cpp index 54e1eb0954945..21a233b2ffa1d 100644 --- a/llvm/lib/Target/SystemZ/SystemZLongBranch.cpp +++ b/llvm/lib/Target/SystemZ/SystemZLongBranch.cpp @@ -215,7 +215,7 @@ static unsigned getInstSizeInBytes(const MachineInstr &MI, // These do not have a size: MI.isDebugOrPseudoInstr() || MI.isPosition() || MI.isKill() || MI.isImplicitDef() || MI.getOpcode() == TargetOpcode::MEMBARRIER || - MI.getOpcode() == TargetOpcode::INIT_UNDEF || + MI.getOpcode() == TargetOpcode::INIT_UNDEF || MI.isFakeUse() || // These have a size that may be zero: MI.isInlineAsm() || MI.getOpcode() == SystemZ::STACKMAP || MI.getOpcode() == SystemZ::PATCHPOINT || diff --git a/llvm/test/CodeGen/SystemZ/fake-use-size.ll b/llvm/test/CodeGen/SystemZ/fake-use-size.ll new file mode 100644 index 0000000000000..1690a046aad43 --- /dev/null +++ b/llvm/test/CodeGen/SystemZ/fake-use-size.ll @@ -0,0 +1,14 @@ +; RUN: llc -O0 < %s -mtriple=s390x-linux-gnu 2>&1 | FileCheck %s + +;; Tests that we can handle FAKE_USE instructions, emitting a comment for them +;; in the resulting assembly. + +; CHECK: .type idd,@function +; CHECK: # %bb.0: +; CHECK-NEXT: # fake_use: + +define double @idd(double %d) { +entry: + notail call void (...) @llvm.fake.use(double %d) + ret double %d +}