Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -1473,9 +1473,6 @@ class TargetTransformInfoImplCRTPBase : public TargetTransformInfoImplBase {
OpInfo, I);
}
case Instruction::Load: {
// FIXME: Arbitary cost which could come from the backend.
if (CostKind == TTI::TCK_Latency)
return 4;
auto *LI = cast<LoadInst>(U);
Type *LoadType = U->getType();
// If there is a non-register sized type, the cost estimation may expand
Expand Down
428 changes: 428 additions & 0 deletions llvm/lib/Target/LoongArch/LoongArchTargetTransformInfo.cpp

Large diffs are not rendered by default.

17 changes: 17 additions & 0 deletions llvm/lib/Target/LoongArch/LoongArchTargetTransformInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,23 @@ class LoongArchTTIImpl : public BasicTTIImplBase<LoongArchTTIImpl> {
bool enableWritePrefetching() const override;

bool shouldExpandReduction(const IntrinsicInst *II) const override;
InstructionCost getArithmeticInstrCost(
unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind,
TTI::OperandValueInfo Op1Info = {TTI::OK_AnyValue, TTI::OP_None},
TTI::OperandValueInfo Op2Info = {TTI::OK_AnyValue, TTI::OP_None},
ArrayRef<const Value *> Args = {},
const Instruction *CxtI = nullptr) const override;

using BaseT::getVectorInstrCost;
InstructionCost getVectorInstrCost(unsigned Opcode, Type *Val,
TTI::TargetCostKind CostKind,
unsigned Index, const Value *Op0,
const Value *Op1) const override;
InstructionCost getMemoryOpCost(
unsigned Opcode, Type *Src, Align Alignment, unsigned AddressSpace,
TTI::TargetCostKind CostKind,
TTI::OperandValueInfo OpInfo = {TTI::OK_AnyValue, TTI::OP_None},
const Instruction *I = nullptr) const override;

// TODO: Implement more hooks to provide TTI machinery for LoongArch.
};
Expand Down
135 changes: 135 additions & 0 deletions llvm/test/Analysis/CostModel/LoongArch/arith-fp.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 6
; RUN: opt < %s -passes="print<cost-model>" -cost-kind=all -mtriple=loongarch64 -mattr=+lsx 2>&1 -disable-output < %s | FileCheck %s --check-prefixes=LSX
; RUN: opt < %s -passes="print<cost-model>" -cost-kind=all -mtriple=loongarch64 -mattr=+lasx 2>&1 -disable-output < %s | FileCheck %s --check-prefixes=LASX

define void @fadd() {
; LSX-LABEL: 'fadd'
; LSX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V1F32 = fadd float poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V2F32 = fadd <2 x float> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V4F32 = fadd <4 x float> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:6 SizeLat:1 for: %V8F32 = fadd <8 x float> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V1F64 = fadd double poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V2F64 = fadd <2 x double> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:6 SizeLat:1 for: %V4F64 = fadd <4 x double> poison, poison
; LSX-NEXT: Cost Model: Found costs of 1 for: ret void
;
; LASX-LABEL: 'fadd'
; LASX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V1F32 = fadd float poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V2F32 = fadd <2 x float> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V4F32 = fadd <4 x float> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V8F32 = fadd <8 x float> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V1F64 = fadd double poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V2F64 = fadd <2 x double> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V4F64 = fadd <4 x double> poison, poison
; LASX-NEXT: Cost Model: Found costs of 1 for: ret void
;
%V1F32 = fadd float poison, poison
%V2F32 = fadd <2 x float> poison, poison
%V4F32 = fadd <4 x float> poison, poison
%V8F32 = fadd <8 x float> poison, poison

%V1F64 = fadd double poison, poison
%V2F64 = fadd <2 x double> poison, poison
%V4F64 = fadd <4 x double> poison, poison

ret void
}

define void @fsub() {
; LSX-LABEL: 'fsub'
; LSX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V1F32 = fsub float poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V2F32 = fsub <2 x float> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V4F32 = fsub <4 x float> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:6 SizeLat:1 for: %V8F32 = fsub <8 x float> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V1F64 = fsub double poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V2F64 = fsub <2 x double> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:6 SizeLat:1 for: %V4F64 = fsub <4 x double> poison, poison
; LSX-NEXT: Cost Model: Found costs of 1 for: ret void
;
; LASX-LABEL: 'fsub'
; LASX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V1F32 = fsub float poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V2F32 = fsub <2 x float> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V4F32 = fsub <4 x float> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V8F32 = fsub <8 x float> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V1F64 = fsub double poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V2F64 = fsub <2 x double> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:3 SizeLat:1 for: %V4F64 = fsub <4 x double> poison, poison
; LASX-NEXT: Cost Model: Found costs of 1 for: ret void
;
%V1F32 = fsub float poison, poison
%V2F32 = fsub <2 x float> poison, poison
%V4F32 = fsub <4 x float> poison, poison
%V8F32 = fsub <8 x float> poison, poison

%V1F64 = fsub double poison, poison
%V2F64 = fsub <2 x double> poison, poison
%V4F64 = fsub <4 x double> poison, poison

ret void
}

define void @fmul() {
; LSX-LABEL: 'fmul'
; LSX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:5 SizeLat:1 for: %V1F32 = fmul float poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:5 SizeLat:1 for: %V2F32 = fmul <2 x float> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:5 SizeLat:1 for: %V4F32 = fmul <4 x float> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:4 CodeSize:1 Lat:10 SizeLat:1 for: %V8F32 = fmul <8 x float> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:5 SizeLat:1 for: %V1F64 = fmul double poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:5 SizeLat:1 for: %V2F64 = fmul <2 x double> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:4 CodeSize:1 Lat:10 SizeLat:1 for: %V4F64 = fmul <4 x double> poison, poison
; LSX-NEXT: Cost Model: Found costs of 1 for: ret void
;
; LASX-LABEL: 'fmul'
; LASX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:5 SizeLat:1 for: %V1F32 = fmul float poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:5 SizeLat:1 for: %V2F32 = fmul <2 x float> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:5 SizeLat:1 for: %V4F32 = fmul <4 x float> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:5 SizeLat:1 for: %V8F32 = fmul <8 x float> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:5 SizeLat:1 for: %V1F64 = fmul double poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:5 SizeLat:1 for: %V2F64 = fmul <2 x double> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:5 SizeLat:1 for: %V4F64 = fmul <4 x double> poison, poison
; LASX-NEXT: Cost Model: Found costs of 1 for: ret void
;
%V1F32 = fmul float poison, poison
%V2F32 = fmul <2 x float> poison, poison
%V4F32 = fmul <4 x float> poison, poison
%V8F32 = fmul <8 x float> poison, poison

%V1F64 = fmul double poison, poison
%V2F64 = fmul <2 x double> poison, poison
%V4F64 = fmul <4 x double> poison, poison

ret void
}

define void @fdiv() {
; LSX-LABEL: 'fdiv'
; LSX-NEXT: Cost Model: Found costs of RThru:8 CodeSize:4 Lat:9 SizeLat:4 for: %V1F32 = fdiv float poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:26 CodeSize:4 Lat:16 SizeLat:4 for: %V2F32 = fdiv <2 x float> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:26 CodeSize:4 Lat:16 SizeLat:4 for: %V4F32 = fdiv <4 x float> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:52 CodeSize:4 Lat:32 SizeLat:4 for: %V8F32 = fdiv <8 x float> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:9 CodeSize:4 Lat:12 SizeLat:4 for: %V1F64 = fdiv double poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:18 CodeSize:4 Lat:12 SizeLat:4 for: %V2F64 = fdiv <2 x double> poison, poison
; LSX-NEXT: Cost Model: Found costs of RThru:36 CodeSize:4 Lat:24 SizeLat:4 for: %V4F64 = fdiv <4 x double> poison, poison
; LSX-NEXT: Cost Model: Found costs of 1 for: ret void
;
; LASX-LABEL: 'fdiv'
; LASX-NEXT: Cost Model: Found costs of RThru:8 CodeSize:4 Lat:9 SizeLat:4 for: %V1F32 = fdiv float poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:26 CodeSize:4 Lat:16 SizeLat:4 for: %V2F32 = fdiv <2 x float> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:26 CodeSize:4 Lat:16 SizeLat:4 for: %V4F32 = fdiv <4 x float> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:26 CodeSize:4 Lat:15 SizeLat:4 for: %V8F32 = fdiv <8 x float> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:9 CodeSize:4 Lat:12 SizeLat:4 for: %V1F64 = fdiv double poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:18 CodeSize:4 Lat:12 SizeLat:4 for: %V2F64 = fdiv <2 x double> poison, poison
; LASX-NEXT: Cost Model: Found costs of RThru:18 CodeSize:4 Lat:12 SizeLat:4 for: %V4F64 = fdiv <4 x double> poison, poison
; LASX-NEXT: Cost Model: Found costs of 1 for: ret void
;
%V1F32 = fdiv float poison, poison
%V2F32 = fdiv <2 x float> poison, poison
%V4F32 = fdiv <4 x float> poison, poison
%V8F32 = fdiv <8 x float> poison, poison

%V1F64 = fdiv double poison, poison
%V2F64 = fdiv <2 x double> poison, poison
%V4F64 = fdiv <4 x double> poison, poison

ret void
}
Loading
Loading