diff options
author | Jonas Paulsson <paulsson@linux.vnet.ibm.com> | 2019-09-03 13:31:22 +0000 |
---|---|---|
committer | Jonas Paulsson <paulsson@linux.vnet.ibm.com> | 2019-09-03 13:31:22 +0000 |
commit | a0a811739dd0464b178e8c7351d6d4eb9e6838c6 (patch) | |
tree | 149eff0dc3fc47ece0b4decc762155fb547820cb | |
parent | 600f5c572723d7979a779ea1483a4b1e8b83f465 (diff) | |
download | bcm5719-llvm-a0a811739dd0464b178e8c7351d6d4eb9e6838c6.tar.gz bcm5719-llvm-a0a811739dd0464b178e8c7351d6d4eb9e6838c6.zip |
[SystemZ] Recognize INLINEASM_BR in backend.
SystemZInstrInfo::analyzeBranch() needs to check for INLINEASM_BR
instructions, or it will crash.
Review: Ulrich Weigand
llvm-svn: 370753
-rw-r--r-- | llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp | 4 | ||||
-rw-r--r-- | llvm/test/CodeGen/SystemZ/asm-20.ll | 15 |
2 files changed, 17 insertions, 2 deletions
diff --git a/llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp b/llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp index da71759cc3f..24a234481d3 100644 --- a/llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp +++ b/llvm/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/llvm/test/CodeGen/SystemZ/asm-20.ll b/llvm/test/CodeGen/SystemZ/asm-20.ll new file mode 100644 index 00000000000..402c038f022 --- /dev/null +++ b/llvm/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 +} |