36 lines
1.1 KiB
LLVM
36 lines
1.1 KiB
LLVM
|
; RUN: llc -march=hexagon -enable-pipeliner -verify-machineinstrs < %s
|
||
|
; REQUIRES: asserts
|
||
|
|
||
|
; This test fails in the machine verifier because the verifier thinks the
|
||
|
; return register is undefined, and because there is a basic block that
|
||
|
; ends with an unconditional branch that is not marked as a barrier.
|
||
|
;
|
||
|
; Enabling SWP exposes these bugs because the live variable analysis is
|
||
|
; performed earlier than the process implicit def pass. This ordering
|
||
|
; causes the JMPR machine instruction to contain two R0 operands, one
|
||
|
; with an undef and one with a kill flag.
|
||
|
|
||
|
@g0 = common global i32 0, align 4
|
||
|
|
||
|
; Function Attrs: nounwind
|
||
|
define i32 @f0(i32 %a0) #0 {
|
||
|
b0:
|
||
|
%v0 = icmp eq i32 %a0, 0
|
||
|
br i1 %v0, label %b2, label %b1
|
||
|
|
||
|
b1: ; preds = %b0
|
||
|
%v1 = tail call i32 bitcast (i32 (...)* @f1 to i32 (i32)*)(i32 %a0) #0
|
||
|
br label %b3
|
||
|
|
||
|
b2: ; preds = %b0
|
||
|
store i32 0, i32* @g0, align 4
|
||
|
br label %b3
|
||
|
|
||
|
b3: ; preds = %b2, %b1
|
||
|
ret i32 undef
|
||
|
}
|
||
|
|
||
|
declare i32 @f1(...)
|
||
|
|
||
|
attributes #0 = { nounwind }
|