1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-23 21:13:02 +02:00
llvm-mirror/test/CodeGen/ARM/ifcvt-branch-weight-bug.ll
Cong Hou 5747eb82f8 Let SelectionDAG start to use probability-based interface to add successors.
The patch in http://reviews.llvm.org/D13745 is broken into four parts:

1. New interfaces without functional changes.
2. Use new interfaces in SelectionDAG, while in other passes treat probabilities
as weights.
3. Use new interfaces in all other passes.
4. Remove old interfaces.

This the second patch above. In this patch SelectionDAG starts to use
probability-based interfaces in MBB to add successors but other MC passes are
still using weight-based interfaces. Therefore, we need to maintain correct
weight list in MBB even when probability-based interfaces are used. This is
done by updating weight list in probability-based interfaces by treating the
numerator of probabilities as weights. This change affects many test cases
that check successor weight values. I will update those test cases once this
patch looks good to you.


Differential revision: http://reviews.llvm.org/D14361

llvm-svn: 253965
2015-11-24 08:51:23 +00:00

64 lines
1.9 KiB
LLVM

; RUN: llc < %s -mtriple=armv4t--linux-androideabi -print-machineinstrs=if-converter -o /dev/null 2>&1 | FileCheck %s
; Fix a bug triggered in IfConverterTriangle when CvtBB has multiple
; predecessors.
; PR18752
%classK = type { i8, %classF }
%classF = type { i8 }
%classL = type { %classG, i32, i32 }
%classG = type { %classL* }
%classM2 = type { %classL }
define zeroext i1 @test(%classK* %this, %classM2* nocapture readnone %p1, %classM2* nocapture readnone %p2) align 2 {
entry:
br i1 undef, label %for.end, label %for.body
; Before if conversion, we have
; for.body -> lor.lhs.false.i (62)
; -> for.cond.backedge (62)
; lor.lhs.false.i -> for.cond.backedge (1048575)
; -> cond.false.i (1)
; Afer if conversion, we have
; for.body -> for.cond.backedge (130023362)
; -> cond.false.i (62)
; CHECK: BB#1: derived from LLVM BB %for.body
; CHECK: Successors according to CFG: BB#2(4294967291) BB#4(2048)
for.body:
br i1 undef, label %for.cond.backedge, label %lor.lhs.false.i, !prof !1
for.cond.backedge:
%tobool = icmp eq %classL* undef, null
br i1 %tobool, label %for.end, label %for.body
lor.lhs.false.i:
%tobool.i.i7 = icmp eq i32 undef, 0
br i1 %tobool.i.i7, label %for.cond.backedge, label %cond.false.i
cond.false.i:
call void @_Z3fn1v()
unreachable
for.end:
br i1 undef, label %if.else.i.i, label %if.then.i.i
if.then.i.i:
store %classL* null, %classL** undef, align 4
br label %_ZN1M6spliceEv.exit
if.else.i.i:
store %classL* null, %classL** null, align 4
br label %_ZN1M6spliceEv.exit
_ZN1M6spliceEv.exit:
%LIS = getelementptr inbounds %classK, %classK* %this, i32 0, i32 1
call void @_ZN1F10handleMoveEb(%classF* %LIS, i1 zeroext false)
unreachable
}
declare %classL* @_ZN1M1JI1LS1_EcvPS1_Ev(%classM2*)
declare void @_ZN1F10handleMoveEb(%classF*, i1 zeroext)
declare void @_Z3fn1v()
!0 = !{!"clang version 3.5"}
!1 = !{!"branch_weights", i32 62, i32 62}