From 8e4143afe8e67bf23ba31dc2a96e98dc76df3847 Mon Sep 17 00:00:00 2001 From: Jonas Paulsson Date: Tue, 3 Sep 2019 13:31:22 +0000 Subject: [PATCH] [SystemZ] Recognize INLINEASM_BR in backend. SystemZInstrInfo::analyzeBranch() needs to check for INLINEASM_BR instructions, or it will crash. Review: Ulrich Weigand git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@370753 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/SystemZ/SystemZInstrInfo.cpp | 4 ++-- test/CodeGen/SystemZ/asm-20.ll | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 test/CodeGen/SystemZ/asm-20.ll diff --git a/lib/Target/SystemZ/SystemZInstrInfo.cpp b/lib/Target/SystemZ/SystemZInstrInfo.cpp index da71759cc3f..24a234481d3 100644 --- a/lib/Target/SystemZ/SystemZInstrInfo.cpp +++ b/lib/Target/SystemZ/SystemZInstrInfo.cpp @@ -462,8 +462,8 @@ bool SystemZInstrInfo::analyzeBranch(MachineBasicBlock &MBB, break; // A terminator that isn't a branch can't easily be handled by this - // analysis. - if (!I->isBranch()) + // analysis. Asm goto is not understood / optimized. + if (!I->isBranch() || I->getOpcode() == SystemZ::INLINEASM_BR) return true; // Can't handle indirect branches. diff --git a/test/CodeGen/SystemZ/asm-20.ll b/test/CodeGen/SystemZ/asm-20.ll new file mode 100644 index 00000000000..402c038f022 --- /dev/null +++ b/test/CodeGen/SystemZ/asm-20.ll @@ -0,0 +1,15 @@ +; Test that asm goto can be compiled. +; +; RUN: llc < %s -mtriple=s390x-linux-gnu + +define i32 @c() { +entry: + callbr void asm sideeffect "", "X"(i8* blockaddress(@c, %d)) + to label %asm.fallthrough [label %d] + +asm.fallthrough: ; preds = %entry + br label %d + +d: ; preds = %asm.fallthrough, %entry + ret i32 undef +} -- 2.50.1