1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 20:43:44 +02:00
llvm-mirror/test/CodeGen/Hexagon/rdf-extra-livein.ll
Krzysztof Parzyszek fb5ebe2217 [RDF] Fix liveness propagation through shadows
Each shadow only represents data flow that is restricted to its reaching
def. Propagating more than that could lead to spurious register liveness,
resulting in extra (incorrectly) block live-ins.

llvm-svn: 283143
2016-10-03 20:17:20 +00:00

74 lines
2.4 KiB
LLVM

; RUN: llc -march=hexagon -verify-machineinstrs < %s | FileCheck %s
; Verify that the code compiles successfully.
; CHECK: call printf
target triple = "hexagon"
%struct.0 = type { i32, i32, i32, i32, i32, i32, i32, i32, i32 }
@.str.13 = external unnamed_addr constant [60 x i8], align 1
declare void @printf(i8* nocapture readonly, ...) local_unnamed_addr #0
declare void @danny() local_unnamed_addr #0
declare zeroext i8 @sammy() local_unnamed_addr #0
; Function Attrs: nounwind
define void @main() local_unnamed_addr #0 {
entry:
br i1 undef, label %if.then8, label %if.end10
if.then8: ; preds = %entry
ret void
if.end10: ; preds = %entry
br label %do.body
do.body: ; preds = %if.end88.do.body_crit_edge, %if.end10
%cond = icmp eq i32 undef, 0
br i1 %cond, label %if.end49, label %if.then124
if.end49: ; preds = %do.body
br i1 undef, label %if.end55, label %if.then53
if.then53: ; preds = %if.end49
call void @danny()
br label %if.end55
if.end55: ; preds = %if.then53, %if.end49
%call76 = call zeroext i8 @sammy() #0
switch i8 %call76, label %sw.epilog79 [
i8 0, label %sw.bb77
i8 3, label %sw.bb77
]
sw.bb77: ; preds = %if.end55, %if.end55
unreachable
sw.epilog79: ; preds = %if.end55
br i1 undef, label %if.end88, label %if.then81
if.then81: ; preds = %sw.epilog79
%div87 = fdiv float 0.000000e+00, undef
br label %if.end88
if.end88: ; preds = %if.then81, %sw.epilog79
%t.1 = phi float [ undef, %sw.epilog79 ], [ %div87, %if.then81 ]
%div89 = fdiv float 1.000000e+00, %t.1
%mul92 = fmul float undef, %div89
%div93 = fdiv float %mul92, 1.000000e+06
%conv107 = fpext float %div93 to double
call void (i8*, ...) @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.13, i32 0, i32 0), double %conv107, double undef, i64 undef, i32 undef) #0
br i1 undef, label %if.end88.do.body_crit_edge, label %if.then124
if.end88.do.body_crit_edge: ; preds = %if.end88
br label %do.body
if.then124: ; preds = %if.end88, %do.body
unreachable
}
attributes #0 = { nounwind }