Index: lib/CodeGen/MIRParser/MIParser.cpp =================================================================== --- lib/CodeGen/MIRParser/MIParser.cpp +++ lib/CodeGen/MIRParser/MIParser.cpp @@ -2083,8 +2083,11 @@ return true; StringRef V = S.substr(2); APInt A(V.size()*4, V, 16); - Result = APInt(A.getActiveBits(), - ArrayRef(A.getRawData(), A.getNumWords())); + + // If A is 0, then A.getActiveBits() is 0. This isn't a valid bitwidth. Make + // sure it isn't the case before constructing result. + unsigned NumBits = (A == 0) ? 32 : A.getActiveBits(); + Result = APInt(NumBits, ArrayRef(A.getRawData(), A.getNumWords())); return false; } Index: test/CodeGen/Generic/zero-probability.mir =================================================================== --- /dev/null +++ test/CodeGen/Generic/zero-probability.mir @@ -0,0 +1,39 @@ +# RUN: llc -o /dev/null %s +# REQUIRES: asserts +# Makes sure that having a probability of 0x00000000 to branch to a successor +# doesn't hit an APInt assert in the MIParser. + +--- | + define i32 @main() local_unnamed_addr #0 { + entry: + ret i32 0 + + other: + ret i32 0 + } + + attributes #0 = { nounwind } + + !llvm.module.flags = !{!0, !1} + !llvm.ident = !{!2} + + !0 = !{i32 1, !"wchar_size", i32 4} + !1 = !{i32 7, !"PIC Level", i32 2} + !2 = !{!"clang version 6.0.0"} + !3 = !{!"branch_weights", i32 0, i32 -1} + +... +--- +name: main +alignment: 2 +exposesReturnsTwice: false +legalized: false +regBankSelected: false +selected: false +tracksRegLiveness: true +body: | + bb.0.entry: + successors: %bb.1.other(0x00000000) + bb.1.other: + +...