[MIRPrinter] Print raw branch probabilities as expected by MIRParser

Fixes PR28751.

Reviewers: MatzeB, qcolombet

Subscribers: mcrosier, llvm-commits

Differential Revision: https://reviews.llvm.org/D26775

llvm-svn: 287368
This commit is contained in:
Geoff Berry 2016-11-18 19:37:24 +00:00
parent 2a3d10ae61
commit b51774ac8c
6 changed files with 37 additions and 7 deletions

View File

@ -488,7 +488,8 @@ bool MIParser::parseBasicBlockSuccessors(MachineBasicBlock &MBB) {
lex();
unsigned Weight = 0;
if (consumeIfPresent(MIToken::lparen)) {
if (Token.isNot(MIToken::IntegerLiteral))
if (Token.isNot(MIToken::IntegerLiteral) &&
Token.isNot(MIToken::HexLiteral))
return error("expected an integer literal after '('");
if (getUnsigned(Weight))
return true;

View File

@ -32,6 +32,7 @@
#include "llvm/IR/Module.h"
#include "llvm/IR/ModuleSlotTracker.h"
#include "llvm/MC/MCSymbol.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/YAMLTraits.h"
#include "llvm/Support/raw_ostream.h"
@ -481,7 +482,9 @@ void MIPrinter::print(const MachineBasicBlock &MBB) {
OS << ", ";
printMBBReference(**I);
if (MBB.hasSuccessorProbabilities())
OS << '(' << MBB.getSuccProbability(I) << ')';
OS << '('
<< format("0x%08" PRIx32, MBB.getSuccProbability(I).getNumerator())
<< ')';
}
OS << "\n";
HasLineAttributes = true;

View File

@ -0,0 +1,26 @@
; RUN: llc -stop-after machine-sink %s -o %t.mir
; RUN: FileCheck %s < %t.mir
; RUN: llc %t.mir -run-pass machine-sink
; Check that branch probabilities are printed in a format that can then be parsed.
declare void @foo()
declare void @bar()
define void @test(i1 %c) {
; CHECK-LABEL: name: test
entry:
br i1 %c, label %then, label %else
then:
call void @foo()
br label %end
; CHECK: successors: %{{[a-z0-9\-\.]+}}({{0x[0-9a-f]+}}), %{{[a-z0-9\-\.]+}}({{0x[0-9a-f]+}})
else:
call void @bar()
br label %end
; CHECK: successors: %{{[a-z0-9\-\.]+}}({{0x[0-9a-f]+}})
end:
ret void
}

View File

@ -35,7 +35,7 @@ liveins:
# CHECK-LABEL: name: foo
# CHECK: body: |
# CHECK-NEXT: bb.0.entry:
# CHECK-NEXT: successors: %bb.1.less(0x40000000 / 0x80000000 = 50.00%), %bb.2.exit(0x40000000 / 0x80000000 = 50.00%)
# CHECK-NEXT: successors: %bb.1.less(0x40000000), %bb.2.exit(0x40000000)
# CHECK-NEXT: liveins: %edi
# CHECK: CMP32ri8 %edi, 10, implicit-def %eflags
# CHECK-NEXT: JG_1 %bb.2.exit, implicit killed %eflags
@ -79,7 +79,7 @@ liveins:
# CHECK-LABEL: name: bar
# CHECK: body: |
# CHECK-NEXT: bb.0.entry:
# CHECK-NEXT: successors: %bb.1.less(0x40000000 / 0x80000000 = 50.00%), %bb.2.exit(0x40000000 / 0x80000000 = 50.00%)
# CHECK-NEXT: successors: %bb.1.less(0x40000000), %bb.2.exit(0x40000000)
# CHECK-NEXT: liveins: %edi
# CHECK: CMP32ri8 %edi, 10, implicit-def %eflags
# CHECK-NEXT: JG_1 %bb.2.exit, implicit killed %eflags

View File

@ -21,7 +21,7 @@
name: foo
body: |
; CHECK-LABEL: bb.0.entry:
; CHECK: successors: %bb.1.less({{[0-9a-fx/= ]+}}33.00%), %bb.2.exit({{[0-9a-fx/= ]+}}67.00%)
; CHECK: successors: %bb.1.less(0x2a3d70a4), %bb.2.exit(0x55c28f5c)
; CHECK-LABEL: bb.1.less:
bb.0.entry:
successors: %bb.1.less (33), %bb.2.exit(67)

View File

@ -32,7 +32,7 @@
name: foo
body: |
; CHECK-LABEL: bb.0.entry:
; CHECK: successors: %bb.1.less(0x40000000 / 0x80000000 = 50.00%), %bb.2.exit(0x40000000 / 0x80000000 = 50.00%)
; CHECK: successors: %bb.1.less(0x40000000), %bb.2.exit(0x40000000)
; CHECK-LABEL: bb.1.less:
bb.0.entry:
successors: %bb.1.less, %bb.2.exit
@ -58,7 +58,7 @@ body: |
; Verify that we can have multiple lists of successors that will be merged
; into one.
; CHECK-LABEL: bb.0.entry:
; CHECK: successors: %bb.1(0x80000000 / 0x80000000 = 100.00%), %bb.2(0x00000000 / 0x80000000 = 0.00%)
; CHECK: successors: %bb.1(0x80000000), %bb.2(0x00000000)
bb.0.entry:
liveins: %edi
successors: %bb.1