mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-13 06:06:27 +00:00
d23e0f81bc
to carry a SmallVector of flagged nodes, just calculate the flagged nodes dynamically when they are needed. The local-liveness change is due to a trivial scheduling change where the scheduler arbitrary decision differently. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59273 91177308-0d34-0410-b5e6-96231b3b80d8
32 lines
1.1 KiB
LLVM
32 lines
1.1 KiB
LLVM
; RUN: llvm-as < %s | llc -march=x86 -regalloc=local | grep {subl %eax, %edx}
|
|
|
|
; Local regalloc shouldn't assume that both the uses of the
|
|
; sub instruction are kills, because one of them is tied
|
|
; to an output. Previously, it was allocating both inputs
|
|
; in the same register.
|
|
|
|
define i32 @func_3() nounwind {
|
|
entry:
|
|
%retval = alloca i32 ; <i32*> [#uses=2]
|
|
%g_323 = alloca i8 ; <i8*> [#uses=2]
|
|
%p_5 = alloca i64, align 8 ; <i64*> [#uses=2]
|
|
%0 = alloca i32 ; <i32*> [#uses=2]
|
|
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
|
|
store i64 0, i64* %p_5, align 8
|
|
store i8 1, i8* %g_323, align 1
|
|
%1 = load i8* %g_323, align 1 ; <i8> [#uses=1]
|
|
%2 = sext i8 %1 to i64 ; <i64> [#uses=1]
|
|
%3 = load i64* %p_5, align 8 ; <i64> [#uses=1]
|
|
%4 = sub i64 %3, %2 ; <i64> [#uses=1]
|
|
%5 = icmp sge i64 %4, 0 ; <i1> [#uses=1]
|
|
%6 = zext i1 %5 to i32 ; <i32> [#uses=1]
|
|
store i32 %6, i32* %0, align 4
|
|
%7 = load i32* %0, align 4 ; <i32> [#uses=1]
|
|
store i32 %7, i32* %retval, align 4
|
|
br label %return
|
|
|
|
return: ; preds = %entry
|
|
%retval1 = load i32* %retval ; <i32> [#uses=1]
|
|
ret i32 %retval1
|
|
}
|