| ; 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 } |