ARM cost model: Fix costs for some vector selects
authorArnold Schwaighofer <aschwaighofer@apple.com>
Fri, 15 Mar 2013 18:31:01 +0000 (18:31 +0000)
committerArnold Schwaighofer <aschwaighofer@apple.com>
Fri, 15 Mar 2013 18:31:01 +0000 (18:31 +0000)
commit5193e4ebe216dd5a07ab9cc58d40de5aafaa990c
treeaf0fd56a4789a5e950a4ffaf8f62ff0d0ea5ff3e
parentbcbf3fddef46f1f6e2f2408064c4b75e4b6c90f5
ARM cost model: Fix costs for some vector selects

I was too pessimistic in r177105. Vector selects that fit into a legal register
type lower just fine. I was mislead by the code fragment that I was using. The
stores/loads that I saw in those cases came from lowering the conditional off
an address.

Changing the code fragment to:

%T0_3 = type <8 x i18>
%T1_3 = type <8 x i1>

define void @func_blend3(%T0_3* %loadaddr, %T0_3* %loadaddr2,
                         %T1_3* %blend, %T0_3* %storeaddr) {
  %v0 = load %T0_3* %loadaddr
  %v1 = load %T0_3* %loadaddr2
==> FROM:
  ;%c = load %T1_3* %blend
==> TO:
  %c = icmp slt %T0_3 %v0, %v1
==> USE:
  %r = select %T1_3 %c, %T0_3 %v0, %T0_3 %v1

  store %T0_3 %r, %T0_3* %storeaddr
  ret void
}

revealed this mistake.

radar://13403975

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177170 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM/ARMTargetTransformInfo.cpp
test/Analysis/CostModel/ARM/select.ll
test/CodeGen/ARM/vselect_imax.ll