[llvm] [AArch64] Implement latency costs for loads (PR #201567)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 4 05:26:58 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-analysis
Author: John Brawn (john-brawn-arm)
<details>
<summary>Changes</summary>
Adjust AArch64TTIImpl::getMemoryOpCost to query the scheduling model to get the latency of loads, instead of using BasicTTIImpl which returns an arbitrary cost of 4.
The test changes here are mostly CostModel tests being updated to the correct latency, but some selectopt tests also need to be adjusted as the default scheduling model is cortex-a510 which has low enough load latency that the optimization isn't applied.
---
Patch is 205.52 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/201567.diff
16 Files Affected:
- (modified) llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp (+55-5)
- (modified) llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h (+5-1)
- (modified) llvm/test/Analysis/CostModel/AArch64/cast.ll (+10-10)
- (modified) llvm/test/Analysis/CostModel/AArch64/gep.ll (+36-36)
- (modified) llvm/test/Analysis/CostModel/AArch64/insert-extract.ll (+134-50)
- (modified) llvm/test/Analysis/CostModel/AArch64/masked_expand_load.ll (+36-36)
- (modified) llvm/test/Analysis/CostModel/AArch64/masked_ldst.ll (+18-18)
- (modified) llvm/test/Analysis/CostModel/AArch64/mem-op-cost-model.ll (+43-43)
- (modified) llvm/test/Analysis/CostModel/AArch64/shuffle-load.ll (+82-82)
- (modified) llvm/test/Analysis/CostModel/AArch64/store.ll (+4-4)
- (modified) llvm/test/Analysis/CostModel/AArch64/sve-cast.ll (+48-48)
- (modified) llvm/test/Analysis/CostModel/AArch64/sve-intrinsics.ll (+13-13)
- (modified) llvm/test/Analysis/CostModel/AArch64/sve-ldst.ll (+31-31)
- (modified) llvm/test/Analysis/CostModel/AArch64/vec3-ops.ll (+21-21)
- (modified) llvm/test/CodeGen/AArch64/selectopt-cast.ll (+2-2)
- (modified) llvm/test/DebugInfo/AArch64/select-optimize-trailing-dbg-records.ll (+1-1)
``````````diff
diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
index 730bec428a38e..e33311d7ead25 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
@@ -5029,9 +5029,8 @@ InstructionCost AArch64TTIImpl::getMemoryOpCost(unsigned Opcode, Type *Ty,
TTI::OperandValueInfo OpInfo,
const Instruction *I) const {
EVT VT = TLI->getValueType(DL, Ty, true);
- // Type legalization can't handle structs, and load latency isn't handled here
- if (VT == MVT::Other ||
- (Opcode == Instruction::Load && CostKind == TTI::TCK_Latency))
+ // Type legalization can't handle structs
+ if (VT == MVT::Other)
return BaseT::getMemoryOpCost(Opcode, Ty, Alignment, AddressSpace,
CostKind);
@@ -5055,8 +5054,59 @@ InstructionCost AArch64TTIImpl::getMemoryOpCost(unsigned Opcode, Type *Ty,
if (CostKind == TTI::TCK_CodeSize || CostKind == TTI::TCK_SizeAndLatency)
return LT.first;
- if (CostKind != TTI::TCK_RecipThroughput)
- return 1;
+ if (CostKind == TTI::TCK_Latency) {
+ // Latency doesn't make much sense for stores, so just return 1
+ if (Opcode == Instruction::Store)
+ return 1;
+ // We expect the load to become LT.first loads of type LT.second. The
+ // latency will be the latency of the last load plus the time it gets to get
+ // there, which will be the amount of other loads before that (i.e. total
+ // loads - 1). We get the latency from the SchedModel, and assume that the
+ // loads become the variant with unsigned integer offset.
+ unsigned Inst = 0;
+ if (LT.second.isScalableVector() ||
+ ST->useSVEForFixedLengthVectors(LT.second)) {
+ Inst = AArch64::LDR_ZXI;
+ } else if (LT.second.isVector() || LT.second.isFloatingPoint()) {
+ switch (LT.second.getSizeInBits()) {
+ case 8:
+ Inst = AArch64::LDRBui;
+ break;
+ case 16:
+ Inst = AArch64::LDRHui;
+ break;
+ case 32:
+ Inst = AArch64::LDRSui;
+ break;
+ case 64:
+ Inst = AArch64::LDRDui;
+ break;
+ case 128:
+ Inst = AArch64::LDRQui;
+ break;
+ default:
+ llvm_unreachable("Unexpected float or vector type");
+ }
+ } else {
+ switch (LT.second.getSizeInBits()) {
+ case 8:
+ Inst = AArch64::LDRBBui;
+ break;
+ case 16:
+ Inst = AArch64::LDRHHui;
+ break;
+ case 32:
+ Inst = AArch64::LDRWui;
+ break;
+ case 64:
+ Inst = AArch64::LDRXui;
+ break;
+ default:
+ llvm_unreachable("Unexpected integer type");
+ }
+ }
+ return (LT.first - 1) + SchedModel.computeInstrLatency(Inst);
+ }
if (ST->isMisaligned128StoreSlow() && Opcode == Instruction::Store &&
LT.second.is128BitVector() && Alignment < Align(16)) {
diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h
index 200b4c9fba196..cc9f57e94a50e 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h
+++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h
@@ -21,6 +21,7 @@
#include "AArch64TargetMachine.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/CodeGen/BasicTTIImpl.h"
+#include "llvm/CodeGen/TargetSchedule.h"
#include "llvm/IR/FMF.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Intrinsics.h"
@@ -48,6 +49,7 @@ class AArch64TTIImpl final : public BasicTTIImplBase<AArch64TTIImpl> {
const AArch64Subtarget *ST;
const AArch64TargetLowering *TLI;
+ TargetSchedModel SchedModel;
static const FeatureBitset InlineInverseFeatures;
@@ -82,7 +84,9 @@ class AArch64TTIImpl final : public BasicTTIImplBase<AArch64TTIImpl> {
public:
explicit AArch64TTIImpl(const AArch64TargetMachine *TM, const Function &F)
: BaseT(TM, F.getDataLayout()), ST(TM->getSubtargetImpl(F)),
- TLI(ST->getTargetLowering()) {}
+ TLI(ST->getTargetLowering()) {
+ SchedModel.init(ST);
+ }
bool areInlineCompatible(const Function *Caller,
const Function *Callee) const override;
diff --git a/llvm/test/Analysis/CostModel/AArch64/cast.ll b/llvm/test/Analysis/CostModel/AArch64/cast.ll
index 7f5be9f100442..9863f8d3e17e9 100644
--- a/llvm/test/Analysis/CostModel/AArch64/cast.ll
+++ b/llvm/test/Analysis/CostModel/AArch64/cast.ll
@@ -859,16 +859,16 @@ define i32 @bitcasts() {
define i32 @load_extends() {
; CHECK-LABEL: 'load_extends'
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %loadi8 = load i8, ptr undef, align 1
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %loadi16 = load i16, ptr undef, align 2
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %loadi32 = load i32, ptr undef, align 4
-; CHECK-NEXT: Cost Model: Found costs of RThru:4 CodeSize:1 Lat:4 SizeLat:1 for: %loadv2i8 = load <2 x i8>, ptr undef, align 2
-; CHECK-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:4 SizeLat:1 for: %loadv4i8 = load <4 x i8>, ptr undef, align 4
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %loadv8i8 = load <8 x i8>, ptr undef, align 8
-; CHECK-NEXT: Cost Model: Found costs of RThru:4 CodeSize:1 Lat:4 SizeLat:1 for: %loadv2i16 = load <2 x i16>, ptr undef, align 4
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %loadv4i16 = load <4 x i16>, ptr undef, align 8
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %loadv2i32 = load <2 x i32>, ptr undef, align 8
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %loadv4i32 = load <4 x i32>, ptr undef, align 16
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %loadi8 = load i8, ptr undef, align 1
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %loadi16 = load i16, ptr undef, align 2
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %loadi32 = load i32, ptr undef, align 4
+; CHECK-NEXT: Cost Model: Found costs of RThru:4 CodeSize:1 Lat:2 SizeLat:1 for: %loadv2i8 = load <2 x i8>, ptr undef, align 2
+; CHECK-NEXT: Cost Model: Found costs of RThru:2 CodeSize:1 Lat:2 SizeLat:1 for: %loadv4i8 = load <4 x i8>, ptr undef, align 4
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %loadv8i8 = load <8 x i8>, ptr undef, align 8
+; CHECK-NEXT: Cost Model: Found costs of RThru:4 CodeSize:1 Lat:2 SizeLat:1 for: %loadv2i16 = load <2 x i16>, ptr undef, align 4
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %loadv4i16 = load <4 x i16>, ptr undef, align 8
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %loadv2i32 = load <2 x i32>, ptr undef, align 8
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %loadv4i32 = load <4 x i32>, ptr undef, align 16
; CHECK-NEXT: Cost Model: Found costs of 0 for: %r0 = sext i8 %loadi8 to i16
; CHECK-NEXT: Cost Model: Found costs of 0 for: %r1 = zext i8 %loadi8 to i16
; CHECK-NEXT: Cost Model: Found costs of 0 for: %r2 = sext i8 %loadi8 to i32
diff --git a/llvm/test/Analysis/CostModel/AArch64/gep.ll b/llvm/test/Analysis/CostModel/AArch64/gep.ll
index a1239b246f2fb..a96d4ebea6a77 100644
--- a/llvm/test/Analysis/CostModel/AArch64/gep.ll
+++ b/llvm/test/Analysis/CostModel/AArch64/gep.ll
@@ -7,7 +7,7 @@ target triple = "aarch64-linux-gnu"
define i8 @test1(ptr %p) {
; CHECK-LABEL: 'test1'
; CHECK-NEXT: Cost Model: Found costs of 0 for: %a = getelementptr inbounds i8, ptr %p, i32 1
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i8, ptr %a, align 1
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i8, ptr %a, align 1
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i8 %v
;
%a = getelementptr inbounds i8, ptr %p, i32 1
@@ -18,7 +18,7 @@ define i8 @test1(ptr %p) {
define i16 @test2(ptr %p) {
; CHECK-LABEL: 'test2'
; CHECK-NEXT: Cost Model: Found costs of 0 for: %a = getelementptr inbounds i16, ptr %p, i32 1
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i16, ptr %a, align 2
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i16, ptr %a, align 2
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i16 %v
;
%a = getelementptr inbounds i16, ptr %p, i32 1
@@ -29,7 +29,7 @@ define i16 @test2(ptr %p) {
define i32 @test3(ptr %p) {
; CHECK-LABEL: 'test3'
; CHECK-NEXT: Cost Model: Found costs of 0 for: %a = getelementptr inbounds i32, ptr %p, i32 1
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i32, ptr %a, align 4
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i32, ptr %a, align 4
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i32 %v
;
%a = getelementptr inbounds i32, ptr %p, i32 1
@@ -40,7 +40,7 @@ define i32 @test3(ptr %p) {
define i64 @test4(ptr %p) {
; CHECK-LABEL: 'test4'
; CHECK-NEXT: Cost Model: Found costs of 0 for: %a = getelementptr inbounds i64, ptr %p, i32 1
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i64, ptr %a, align 8
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i64, ptr %a, align 8
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i64 %v
;
%a = getelementptr inbounds i64, ptr %p, i32 1
@@ -51,7 +51,7 @@ define i64 @test4(ptr %p) {
define i8 @test5(ptr %p) {
; CHECK-LABEL: 'test5'
; CHECK-NEXT: Cost Model: Found costs of 0 for: %a = getelementptr inbounds i8, ptr %p, i32 1024
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i8, ptr %a, align 1
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i8, ptr %a, align 1
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i8 %v
;
%a = getelementptr inbounds i8, ptr %p, i32 1024
@@ -62,7 +62,7 @@ define i8 @test5(ptr %p) {
define i16 @test6(ptr %p) {
; CHECK-LABEL: 'test6'
; CHECK-NEXT: Cost Model: Found costs of 0 for: %a = getelementptr inbounds i16, ptr %p, i32 1024
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i16, ptr %a, align 2
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i16, ptr %a, align 2
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i16 %v
;
%a = getelementptr inbounds i16, ptr %p, i32 1024
@@ -73,7 +73,7 @@ define i16 @test6(ptr %p) {
define i32 @test7(ptr %p) {
; CHECK-LABEL: 'test7'
; CHECK-NEXT: Cost Model: Found costs of 0 for: %a = getelementptr inbounds i32, ptr %p, i32 1024
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i32, ptr %a, align 4
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i32, ptr %a, align 4
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i32 %v
;
%a = getelementptr inbounds i32, ptr %p, i32 1024
@@ -84,7 +84,7 @@ define i32 @test7(ptr %p) {
define i64 @test8(ptr %p) {
; CHECK-LABEL: 'test8'
; CHECK-NEXT: Cost Model: Found costs of 0 for: %a = getelementptr inbounds i64, ptr %p, i32 1024
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i64, ptr %a, align 8
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i64, ptr %a, align 8
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i64 %v
;
%a = getelementptr inbounds i64, ptr %p, i32 1024
@@ -95,7 +95,7 @@ define i64 @test8(ptr %p) {
define i8 @test9(ptr %p) {
; CHECK-LABEL: 'test9'
; CHECK-NEXT: Cost Model: Found costs of 1 for: %a = getelementptr inbounds i8, ptr %p, i32 4096
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i8, ptr %a, align 1
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i8, ptr %a, align 1
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i8 %v
;
%a = getelementptr inbounds i8, ptr %p, i32 4096
@@ -106,7 +106,7 @@ define i8 @test9(ptr %p) {
define i16 @test10(ptr %p) {
; CHECK-LABEL: 'test10'
; CHECK-NEXT: Cost Model: Found costs of 1 for: %a = getelementptr inbounds i16, ptr %p, i32 4096
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i16, ptr %a, align 2
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i16, ptr %a, align 2
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i16 %v
;
%a = getelementptr inbounds i16, ptr %p, i32 4096
@@ -117,7 +117,7 @@ define i16 @test10(ptr %p) {
define i32 @test11(ptr %p) {
; CHECK-LABEL: 'test11'
; CHECK-NEXT: Cost Model: Found costs of 1 for: %a = getelementptr inbounds i32, ptr %p, i32 4096
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i32, ptr %a, align 4
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i32, ptr %a, align 4
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i32 %v
;
%a = getelementptr inbounds i32, ptr %p, i32 4096
@@ -128,7 +128,7 @@ define i32 @test11(ptr %p) {
define i64 @test12(ptr %p) {
; CHECK-LABEL: 'test12'
; CHECK-NEXT: Cost Model: Found costs of 1 for: %a = getelementptr inbounds i64, ptr %p, i32 4096
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i64, ptr %a, align 8
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i64, ptr %a, align 8
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i64 %v
;
%a = getelementptr inbounds i64, ptr %p, i32 4096
@@ -139,7 +139,7 @@ define i64 @test12(ptr %p) {
define i8 @test13(ptr %p) {
; CHECK-LABEL: 'test13'
; CHECK-NEXT: Cost Model: Found costs of 0 for: %a = getelementptr inbounds i8, ptr %p, i32 -64
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i8, ptr %a, align 1
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i8, ptr %a, align 1
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i8 %v
;
%a = getelementptr inbounds i8, ptr %p, i32 -64
@@ -150,7 +150,7 @@ define i8 @test13(ptr %p) {
define i16 @test14(ptr %p) {
; CHECK-LABEL: 'test14'
; CHECK-NEXT: Cost Model: Found costs of 0 for: %a = getelementptr inbounds i16, ptr %p, i32 -64
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i16, ptr %a, align 2
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i16, ptr %a, align 2
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i16 %v
;
%a = getelementptr inbounds i16, ptr %p, i32 -64
@@ -161,7 +161,7 @@ define i16 @test14(ptr %p) {
define i32 @test15(ptr %p) {
; CHECK-LABEL: 'test15'
; CHECK-NEXT: Cost Model: Found costs of 0 for: %a = getelementptr inbounds i32, ptr %p, i32 -64
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i32, ptr %a, align 4
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i32, ptr %a, align 4
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i32 %v
;
%a = getelementptr inbounds i32, ptr %p, i32 -64
@@ -172,7 +172,7 @@ define i32 @test15(ptr %p) {
define i64 @test16(ptr %p) {
; CHECK-LABEL: 'test16'
; CHECK-NEXT: Cost Model: Found costs of 1 for: %a = getelementptr inbounds i64, ptr %p, i32 -64
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i64, ptr %a, align 8
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i64, ptr %a, align 8
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i64 %v
;
%a = getelementptr inbounds i64, ptr %p, i32 -64
@@ -183,7 +183,7 @@ define i64 @test16(ptr %p) {
define i8 @test17(ptr %p) {
; CHECK-LABEL: 'test17'
; CHECK-NEXT: Cost Model: Found costs of 1 for: %a = getelementptr inbounds i8, ptr %p, i32 -1024
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i8, ptr %a, align 1
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i8, ptr %a, align 1
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i8 %v
;
%a = getelementptr inbounds i8, ptr %p, i32 -1024
@@ -194,7 +194,7 @@ define i8 @test17(ptr %p) {
define i16 @test18(ptr %p) {
; CHECK-LABEL: 'test18'
; CHECK-NEXT: Cost Model: Found costs of 1 for: %a = getelementptr inbounds i16, ptr %p, i32 -1024
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i16, ptr %a, align 2
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i16, ptr %a, align 2
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i16 %v
;
%a = getelementptr inbounds i16, ptr %p, i32 -1024
@@ -205,7 +205,7 @@ define i16 @test18(ptr %p) {
define i32 @test19(ptr %p) {
; CHECK-LABEL: 'test19'
; CHECK-NEXT: Cost Model: Found costs of 1 for: %a = getelementptr inbounds i32, ptr %p, i32 -1024
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i32, ptr %a, align 4
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i32, ptr %a, align 4
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i32 %v
;
%a = getelementptr inbounds i32, ptr %p, i32 -1024
@@ -216,7 +216,7 @@ define i32 @test19(ptr %p) {
define i64 @test20(ptr %p) {
; CHECK-LABEL: 'test20'
; CHECK-NEXT: Cost Model: Found costs of 1 for: %a = getelementptr inbounds i64, ptr %p, i32 -1024
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i64, ptr %a, align 8
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i64, ptr %a, align 8
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i64 %v
;
%a = getelementptr inbounds i64, ptr %p, i32 -1024
@@ -227,7 +227,7 @@ define i64 @test20(ptr %p) {
define i8 @test21(ptr %p, i32 %i) {
; CHECK-LABEL: 'test21'
; CHECK-NEXT: Cost Model: Found costs of 0 for: %a = getelementptr inbounds i8, ptr %p, i32 %i
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i8, ptr %a, align 1
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i8, ptr %a, align 1
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i8 %v
;
%a = getelementptr inbounds i8, ptr %p, i32 %i
@@ -238,7 +238,7 @@ define i8 @test21(ptr %p, i32 %i) {
define i16 @test22(ptr %p, i32 %i) {
; CHECK-LABEL: 'test22'
; CHECK-NEXT: Cost Model: Found costs of 0 for: %a = getelementptr inbounds i16, ptr %p, i32 %i
-; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:4 SizeLat:1 for: %v = load i16, ptr %a, align 2
+; CHECK-NEXT: Cost Model: Found costs of RThru:1 CodeSize:1 Lat:2 SizeLat:1 for: %v = load i16, ptr %a, align 2
; CHECK-NEXT: Cost Model: Found costs of RThru:0 CodeSize:1 Lat:1 SizeLat:1 for: ret i16 %v
;
%a = getelementptr inbounds i16, ptr %p, i32 %i
@@ -249,7 +249,7 @@ define i16 @te...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/201567
More information about the llvm-commits
mailing list