This fixes a verifier error I ran into at -O0. A subregister copy had an implicit kill of an overlapping superregister, which was partially redefined by the copy. The preserved implicit operand killed subregisters made live earlier in the sequence. AMDGPU already uses similar logic for whether to preserve the kill of the superregister on the final instruction if there's overlap.
14 lines
364 B
LLVM
14 lines
364 B
LLVM
; RUN: llc -mtriple=i686-pc-linux -print-after=postrapseudos < %s 2>&1 | FileCheck %s
|
|
|
|
; CHECK: MOV8rr ${{[a-d]}}l, implicit $e[[R:[a-d]]]x, implicit-def $e[[R]]x
|
|
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
|
|
}
|