mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-22 12:33:33 +02:00
5747eb82f8
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
86 lines
4.2 KiB
LLVM
86 lines
4.2 KiB
LLVM
; RUN: llc -march=x86-64 -print-machineinstrs=expand-isel-pseudos %s -o /dev/null 2>&1 | FileCheck %s
|
|
|
|
; Check if the edge weight to the catchpad is calculated correctly.
|
|
|
|
; CHECK: Successors according to CFG: BB#3(2147481600) BB#1(2048) BB#4(1024) BB#6(512) BB#8(256)
|
|
|
|
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64--windows-msvc18.0.0"
|
|
|
|
%rtti.TypeDescriptor7 = type { i8**, i8*, [8 x i8] }
|
|
%struct.HasDtor = type { i8 }
|
|
|
|
$"\01??_R0?AUA@@@8" = comdat any
|
|
|
|
$"\01??_R0?AUB@@@8" = comdat any
|
|
|
|
$"\01??_R0?AUC@@@8" = comdat any
|
|
|
|
@"\01??_7type_info@@6B@" = external constant i8*
|
|
@"\01??_R0?AUA@@@8" = linkonce_odr global %rtti.TypeDescriptor7 { i8** @"\01??_7type_info@@6B@", i8* null, [8 x i8] c".?AUA@@\00" }, comdat
|
|
@"\01??_R0?AUB@@@8" = linkonce_odr global %rtti.TypeDescriptor7 { i8** @"\01??_7type_info@@6B@", i8* null, [8 x i8] c".?AUB@@\00" }, comdat
|
|
@"\01??_R0?AUC@@@8" = linkonce_odr global %rtti.TypeDescriptor7 { i8** @"\01??_7type_info@@6B@", i8* null, [8 x i8] c".?AUC@@\00" }, comdat
|
|
|
|
; Function Attrs: uwtable
|
|
define i32 @main() #0 personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) {
|
|
entry:
|
|
%o = alloca %struct.HasDtor, align 1
|
|
%0 = getelementptr inbounds %struct.HasDtor, %struct.HasDtor* %o, i64 0, i32 0
|
|
call void @llvm.lifetime.start(i64 1, i8* %0) #4
|
|
invoke void @"\01?may_throw@@YAXXZ"()
|
|
to label %try.cont unwind label %catch.dispatch
|
|
|
|
catch.dispatch: ; preds = %entry
|
|
%1 = catchpad [%rtti.TypeDescriptor7* @"\01??_R0?AUA@@@8", i32 0, i8* null]
|
|
to label %catch.5 unwind label %catch.dispatch.1
|
|
|
|
catch.5: ; preds = %catch.dispatch
|
|
catchret %1 to label %try.cont
|
|
|
|
try.cont: ; preds = %entry, %catch, %catch.3, %catch.5
|
|
call void @"\01??1HasDtor@@QEAA@XZ"(%struct.HasDtor* nonnull %o) #4
|
|
call void @llvm.lifetime.end(i64 1, i8* %0) #4
|
|
ret i32 0
|
|
|
|
catch.dispatch.1: ; preds = %catch.dispatch
|
|
%2 = catchpad [%rtti.TypeDescriptor7* @"\01??_R0?AUB@@@8", i32 0, i8* null]
|
|
to label %catch.3 unwind label %catch.dispatch.2
|
|
|
|
catch.3: ; preds = %catch.dispatch.1
|
|
catchret %2 to label %try.cont
|
|
|
|
catch.dispatch.2: ; preds = %catch.dispatch.1
|
|
%3 = catchpad [%rtti.TypeDescriptor7* @"\01??_R0?AUC@@@8", i32 0, i8* null]
|
|
to label %catch unwind label %catchendblock
|
|
|
|
catch: ; preds = %catch.dispatch.2
|
|
catchret %3 to label %try.cont
|
|
|
|
catchendblock: ; preds = %catch.dispatch.2
|
|
catchendpad unwind label %ehcleanup
|
|
|
|
ehcleanup: ; preds = %catchendblock
|
|
%4 = cleanuppad []
|
|
call void @"\01??1HasDtor@@QEAA@XZ"(%struct.HasDtor* nonnull %o) #4
|
|
cleanupret %4 unwind to caller
|
|
}
|
|
|
|
; Function Attrs: nounwind argmemonly
|
|
declare void @llvm.lifetime.start(i64, i8* nocapture) #1
|
|
|
|
declare void @"\01?may_throw@@YAXXZ"() #2
|
|
|
|
declare i32 @__CxxFrameHandler3(...)
|
|
|
|
; Function Attrs: nounwind
|
|
declare void @"\01??1HasDtor@@QEAA@XZ"(%struct.HasDtor*) #3
|
|
|
|
; Function Attrs: nounwind argmemonly
|
|
declare void @llvm.lifetime.end(i64, i8* nocapture) #1
|
|
|
|
attributes #0 = { uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
attributes #1 = { nounwind argmemonly }
|
|
attributes #2 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
attributes #3 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
attributes #4 = { nounwind }
|