mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-12 23:40:54 +00:00
467260108e
Previously, we would expand: %BL<def> = COPY %DL<kill>, %EBX<imp-use,kill>, %EBX<imp-def> Into: %BL<def> = MOV8rr %DL<kill>, %EBX<imp-def> Dropping the imp-use on the floor. That confused CriticalAntiDepBreaker, which (correctly) assumes that if an instruction defs but doesn't use a register, that register is dead immediately before the instruction - while in this case, the high lanes of EBX can be very much alive. This fixes PR28560. Differential Revision: https://reviews.llvm.org/D22425 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275634 91177308-0d34-0410-b5e6-96231b3b80d8
14 lines
365 B
LLVM
14 lines
365 B
LLVM
; RUN: llc -mtriple=i686-pc-linux -print-after=postrapseudos < %s 2>&1 | FileCheck %s
|
|
|
|
; CHECK: MOV8rr %{{[A-D]}}L, %E[[R:[A-D]]]X<imp-use,kill>, %E[[R]]X<imp-def>
|
|
define i32 @foo(i32 %i, i32 %k, i8* %p) {
|
|
%f = icmp ne i32 %i, %k
|
|
%s = zext i1 %f to i8
|
|
%ret = zext i1 %f to i32
|
|
br label %next
|
|
next:
|
|
%d = add i8 %s, 5
|
|
store i8 %d, i8* %p
|
|
ret i32 %ret
|
|
}
|