Skip to content

Commit

Permalink
[TTI] Fix cast cost on vector types.
Browse files Browse the repository at this point in the history
- Only split vector types when both src and dst types are splittable.
  • Loading branch information
darkbuck committed Nov 13, 2019
1 parent 1ca85b3 commit 2bf9b9a
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 3 deletions.
7 changes: 4 additions & 3 deletions llvm/include/llvm/CodeGen/BasicTTIImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -781,9 +781,10 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
// cost of the split itself. Count that as 1, to be consistent with
// TLI->getTypeLegalizationCost().
if ((TLI->getTypeAction(Src->getContext(), TLI->getValueType(DL, Src)) ==
TargetLowering::TypeSplitVector) ||
(TLI->getTypeAction(Dst->getContext(), TLI->getValueType(DL, Dst)) ==
TargetLowering::TypeSplitVector)) {
TargetLowering::TypeSplitVector ||
TLI->getTypeAction(Dst->getContext(), TLI->getValueType(DL, Dst)) ==
TargetLowering::TypeSplitVector) &&
Src->getVectorNumElements() > 1 && Dst->getVectorNumElements() > 1) {
Type *SplitDst = VectorType::get(Dst->getVectorElementType(),
Dst->getVectorNumElements() / 2);
Type *SplitSrc = VectorType::get(Src->getVectorElementType(),
Expand Down
21 changes: 21 additions & 0 deletions llvm/test/Transforms/LICM/AMDGPU/bitcast.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
; RUN: opt -licm -mtriple=amdgcn -S -o - %s | FileCheck %s

; CHECK-LABEL: foo
; CHECK: ret
define void @foo(i8* %d, <1 x i32>* %s, i32 %idx) {
entry:
br label %for.body

for.body:
%v0 = load <1 x i32>, <1 x i32>* %s
%v1 = bitcast <1 x i32> %v0 to <4 x i8>
br label %for.cond

for.cond:
%e0 = extractelement <4 x i8> %v1, i32 %idx
store i8 %e0, i8* %d
br i1 false, label %for.exit, label %for.body

for.exit:
ret void
}
2 changes: 2 additions & 0 deletions llvm/test/Transforms/LICM/AMDGPU/lit.local.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
if not 'AMDGPU' in config.root.targets:
config.unsupported = True

0 comments on commit 2bf9b9a

Please sign in to comment.