2016-02-13 06:53:35 +08:00
|
|
|
; Check that a callee-saved register will be saved correctly if
|
|
|
|
; the predicate-to-GPR spilling code uses it.
|
|
|
|
;
|
2018-08-03 06:17:53 +08:00
|
|
|
; RUN: llc -march=hexagon -hexagon-initial-cfg-cleanup=0 < %s | FileCheck %s
|
2016-02-13 06:53:35 +08:00
|
|
|
;
|
|
|
|
; We expect to spill p0 into a general-purpose register and keep it there,
|
|
|
|
; without adding an extra spill of that register.
|
|
|
|
;
|
|
|
|
; CHECK: PredSpill:
|
|
|
|
; CHECK-DAG: r{{[0-9]+}} = p0
|
|
|
|
; CHECK-DAG: p0 = r{{[0-9]+}}
|
|
|
|
; CHECK-NOT: = memw(r29
|
|
|
|
;
|
|
|
|
|
|
|
|
define void @PredSpill() {
|
|
|
|
entry:
|
|
|
|
br i1 undef, label %if.then, label %if.else.14
|
|
|
|
|
|
|
|
if.then: ; preds = %entry
|
|
|
|
br i1 undef, label %if.end.57, label %if.else
|
|
|
|
|
|
|
|
if.else: ; preds = %if.then
|
|
|
|
unreachable
|
|
|
|
|
|
|
|
if.else.14: ; preds = %entry
|
|
|
|
br i1 undef, label %if.then.17, label %if.end.57
|
|
|
|
|
|
|
|
if.then.17: ; preds = %if.else.14
|
|
|
|
br i1 undef, label %if.end.57, label %if.then.20
|
|
|
|
|
|
|
|
if.then.20: ; preds = %if.then.17
|
|
|
|
%call21 = tail call i32 @myfun()
|
|
|
|
%tobool22 = icmp eq i32 %call21, 0
|
|
|
|
%0 = tail call i32 @myfun()
|
|
|
|
br i1 %tobool22, label %if.else.42, label %if.then.23
|
|
|
|
|
|
|
|
if.then.23: ; preds = %if.then.20
|
|
|
|
unreachable
|
|
|
|
|
|
|
|
if.else.42: ; preds = %if.then.20
|
|
|
|
ret void
|
|
|
|
|
|
|
|
if.end.57: ; preds = %if.then.17, %if.else.14, %if.then
|
|
|
|
ret void
|
|
|
|
}
|
|
|
|
|
|
|
|
declare i32 @myfun()
|
|
|
|
|