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
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.
--- /dev/null
+; 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
+}