The 2nd loop calculates spill costs but reports free registers as cost 0 anyway, so there is little benefit from having a separate early loop. Surprisingly this is not NFC, as many register are marked regDisabled so the first loop often picks up later registers unnecessarily instead of the first one available in the allocation order... Patch by Matthias Braun llvm-svn: 356499
26 lines
942 B
LLVM
26 lines
942 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc < %s -mtriple=x86_64-apple-darwin -O0 | FileCheck %s
|
|
|
|
; Make sure we only use the less significant bit of the value that feeds the
|
|
; select. Otherwise, we may account for a non-zero value whereas the
|
|
; lsb is zero.
|
|
; <rdar://problem/15651765>
|
|
|
|
define i32 @fastisel_select(i1 %exchSub2211_, i1 %trunc_8766) {
|
|
; CHECK-LABEL: fastisel_select:
|
|
; CHECK: ## %bb.0:
|
|
; CHECK-NEXT: movb %sil, %al
|
|
; CHECK-NEXT: movb %dil, %cl
|
|
; CHECK-NEXT: xorl %edx, %edx
|
|
; CHECK-NEXT: subb %al, %cl
|
|
; CHECK-NEXT: testb $1, %cl
|
|
; CHECK-NEXT: movl $1204476887, %esi ## imm = 0x47CADBD7
|
|
; CHECK-NEXT: cmovnel %esi, %edx
|
|
; CHECK-NEXT: movl %edx, %eax
|
|
; CHECK-NEXT: retq
|
|
%shuffleInternal15257_8932 = sub i1 %exchSub2211_, %trunc_8766
|
|
%counter_diff1345 = select i1 %shuffleInternal15257_8932, i32 1204476887, i32 0
|
|
ret i32 %counter_diff1345
|
|
}
|
|
|