
After TwoAddressInstructionPass calls TargetInstrInfo::convertToThreeAddress, improve the LiveIntervals repair to cope with convertToThreeAddress creating more than one new instruction. This mostly seems to benefit X86. For example in test/CodeGen/X86/zext-trunc.ll it converts: %4:gr32 = ADD32rr %3:gr32(tied-def 0), %2:gr32, implicit-def dead $eflags to: undef %6.sub_32bit:gr64 = COPY %3:gr32 undef %7.sub_32bit:gr64_nosp = COPY %2:gr32 %4:gr32 = LEA64_32r killed %6:gr64, 1, killed %7:gr64_nosp, 0, $noreg Differential Revision: https://reviews.llvm.org/D110335
16 lines
505 B
LLVM
16 lines
505 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s
|
|
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -early-live-intervals -verify-machineinstrs | FileCheck %s
|
|
; rdar://7570931
|
|
|
|
define i64 @foo(i64 %a, i64 %b) nounwind {
|
|
; CHECK-LABEL: foo:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: leal (%rdi,%rsi), %eax
|
|
; CHECK-NEXT: retq
|
|
%c = add i64 %a, %b
|
|
%d = trunc i64 %c to i32
|
|
%e = zext i32 %d to i64
|
|
ret i64 %e
|
|
}
|