mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-24 22:32:47 +00:00
4a76317ebb
The included test case would fail, because the MI PHI node would have two operands from the same predecessor. This problem occurs when a switch instruction couldn't be selected. This happens always, because there is no default switch support for FastISel to begin with. The problem was that FastISel would first add the operand to the PHI nodes and then fall-back to SelectionDAG, which would then in turn add the same operands to the PHI nodes again. This fix removes these duplicate PHI node operands by reseting the PHINodesToUpdate to its original state before FastISel tried to select the instruction. This fixes <rdar://problem/18155224>. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216640 91177308-0d34-0410-b5e6-96231b3b80d8
27 lines
573 B
LLVM
27 lines
573 B
LLVM
; RUN: llc -mtriple=aarch64-apple-darwin -fast-isel -verify-machineinstrs < %s
|
|
; REQUIRES: asserts
|
|
|
|
; Test that the Machine Instruction PHI node doesn't have more than one operand
|
|
; from the same predecessor.
|
|
define i32 @foo(i32 %a, i32 %b, i1 %c) {
|
|
entry:
|
|
br i1 %c, label %switch, label %direct
|
|
|
|
switch:
|
|
switch i32 %a, label %exit [
|
|
i32 43, label %continue
|
|
i32 45, label %continue
|
|
]
|
|
|
|
direct:
|
|
%var = add i32 %b, 1
|
|
br label %continue
|
|
|
|
continue:
|
|
%var.phi = phi i32 [ %var, %direct ], [ 0, %switch ], [ 0, %switch ]
|
|
ret i32 %var.phi
|
|
|
|
exit:
|
|
ret i32 1
|
|
}
|