[PATCH] D146540: [SLP] Add test to check for GEP vectorization
Zain Jaffal via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 21 09:22:01 PDT 2023
zjaffal created this revision.
zjaffal added a reviewer: fhahn.
Herald added subscribers: vporpo, ctetreau, StephenFan.
Herald added a project: All.
zjaffal requested review of this revision.
Herald added subscribers: llvm-commits, pcwang-thead.
Herald added a project: LLVM.
add a test to check for gep vectorization after the change from D144128 <https://reviews.llvm.org/D144128> where the gep vectorization is dependant on the target hook `prefersVectorizedAddressing()`
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D146540
Files:
llvm/test/Transforms/SLPVectorizer/AArch64/getelementptr.ll
Index: llvm/test/Transforms/SLPVectorizer/AArch64/getelementptr.ll
===================================================================
--- llvm/test/Transforms/SLPVectorizer/AArch64/getelementptr.ll
+++ llvm/test/Transforms/SLPVectorizer/AArch64/getelementptr.ll
@@ -3,7 +3,7 @@
; RUN: cat %t | FileCheck -check-prefix=YAML %s
; RUN: opt -S -passes='slp-vectorizer,dce,instcombine' -slp-threshold=-7 -pass-remarks-output=%t < %s | FileCheck %s
; RUN: cat %t | FileCheck -check-prefix=YAML %s
-
+; RUN: opt -S -passes='slp-vectorizer' | FileCheck -check-prefix=CHECK-GEP
target datalayout = "e-m:e-i32:64-i128:128-n32:64-S128"
target triple = "aarch64--linux-gnu"
@@ -404,4 +404,80 @@
ret void
}
+define void @test_i32_extend() {
+; CHECK-GEP-LABEL: @test_i32_extend(
+; CHECK-GEP-NEXT: bb:
+; CHECK-GEP-NEXT: [[GETELEMENTPTR:%.*]] = getelementptr i32, ptr null, i64 1
+; CHECK-GEP-NEXT: [[LOAD:%.*]] = load i32, ptr null, align 2
+; CHECK-GEP-NEXT: [[ZEXT:%.*]] = zext i32 [[LOAD]] to i64
+; CHECK-GEP-NEXT: [[GETELEMENTPTR1:%.*]] = getelementptr i32, ptr null, i64 1
+; CHECK-GEP-NEXT: [[LOAD2:%.*]] = load i32, ptr null, align 2
+; CHECK-GEP-NEXT: [[ZEXT3:%.*]] = zext i32 [[LOAD2]] to i64
+; CHECK-GEP-NEXT: [[SUB:%.*]] = sub i64 [[ZEXT]], [[ZEXT3]]
+; CHECK-GEP-NEXT: [[GETELEMENTPTR4:%.*]] = getelementptr i32, ptr null, i64 [[SUB]]
+; CHECK-GEP-NEXT: [[GETELEMENTPTR5:%.*]] = getelementptr i32, ptr null, i64 2
+; CHECK-GEP-NEXT: [[LOAD6:%.*]] = load i32, ptr [[GETELEMENTPTR]], align 2
+; CHECK-GEP-NEXT: [[ZEXT7:%.*]] = zext i32 [[LOAD6]] to i64
+; CHECK-GEP-NEXT: [[GETELEMENTPTR8:%.*]] = getelementptr i32, ptr null, i64 2
+; CHECK-GEP-NEXT: [[LOAD9:%.*]] = load i32, ptr [[GETELEMENTPTR1]], align 2
+; CHECK-GEP-NEXT: [[ZEXT10:%.*]] = zext i32 [[LOAD9]] to i64
+; CHECK-GEP-NEXT: [[SUB11:%.*]] = sub i64 [[ZEXT7]], [[ZEXT10]]
+; CHECK-GEP-NEXT: [[GETELEMENTPTR12:%.*]] = getelementptr i32, ptr null, i64 [[SUB11]]
+; CHECK-GEP-NEXT: [[GETELEMENTPTR13:%.*]] = getelementptr i32, ptr null, i64 3
+; CHECK-GEP-NEXT: [[LOAD14:%.*]] = load i32, ptr [[GETELEMENTPTR5]], align 2
+; CHECK-GEP-NEXT: [[ZEXT15:%.*]] = zext i32 [[LOAD14]] to i64
+; CHECK-GEP-NEXT: [[GETELEMENTPTR16:%.*]] = getelementptr i32, ptr null, i64 3
+; CHECK-GEP-NEXT: [[LOAD17:%.*]] = load i32, ptr [[GETELEMENTPTR8]], align 2
+; CHECK-GEP-NEXT: [[ZEXT18:%.*]] = zext i32 [[LOAD17]] to i64
+; CHECK-GEP-NEXT: [[SUB19:%.*]] = sub i64 [[ZEXT15]], [[ZEXT18]]
+; CHECK-GEP-NEXT: [[GETELEMENTPTR20:%.*]] = getelementptr i32, ptr null, i64 [[SUB19]]
+; CHECK-GEP-NEXT: [[GETELEMENTPTR21:%.*]] = getelementptr i32, ptr null, i64 4
+; CHECK-GEP-NEXT: [[LOAD22:%.*]] = load i32, ptr [[GETELEMENTPTR13]], align 2
+; CHECK-GEP-NEXT: [[ZEXT23:%.*]] = zext i32 [[LOAD22]] to i64
+; CHECK-GEP-NEXT: [[GETELEMENTPTR24:%.*]] = getelementptr i32, ptr null, i64 4
+; CHECK-GEP-NEXT: [[LOAD25:%.*]] = load i32, ptr [[GETELEMENTPTR16]], align 2
+; CHECK-GEP-NEXT: [[ZEXT26:%.*]] = zext i32 [[LOAD25]] to i64
+; CHECK-GEP-NEXT: [[SUB27:%.*]] = sub i64 [[ZEXT23]], [[ZEXT26]]
+; CHECK-GEP-NEXT: [[GETELEMENTPTR28:%.*]] = getelementptr i32, ptr null, i64 [[SUB27]]
+; CHECK-GEP-NEXT: call void @use_4(ptr [[GETELEMENTPTR28]], ptr [[GETELEMENTPTR20]], ptr [[GETELEMENTPTR12]], ptr [[GETELEMENTPTR4]])
+; CHECK-GEP-NEXT: ret void
+;
+bb:
+ %getelementptr = getelementptr i32, ptr null, i64 1
+ %load = load i32, ptr null, align 2
+ %zext = zext i32 %load to i64
+ %getelementptr1 = getelementptr i32, ptr null, i64 1
+ %load2 = load i32, ptr null, align 2
+ %zext3 = zext i32 %load2 to i64
+ %sub = sub i64 %zext, %zext3
+ %getelementptr4 = getelementptr i32, ptr null, i64 %sub
+ %getelementptr5 = getelementptr i32, ptr null, i64 2
+ %load6 = load i32, ptr %getelementptr, align 2
+ %zext7 = zext i32 %load6 to i64
+ %getelementptr8 = getelementptr i32, ptr null, i64 2
+ %load9 = load i32, ptr %getelementptr1, align 2
+ %zext10 = zext i32 %load9 to i64
+ %sub11 = sub i64 %zext7, %zext10
+ %getelementptr12 = getelementptr i32, ptr null, i64 %sub11
+ %getelementptr13 = getelementptr i32, ptr null, i64 3
+ %load14 = load i32, ptr %getelementptr5, align 2
+ %zext15 = zext i32 %load14 to i64
+ %getelementptr16 = getelementptr i32, ptr null, i64 3
+ %load17 = load i32, ptr %getelementptr8, align 2
+ %zext18 = zext i32 %load17 to i64
+ %sub19 = sub i64 %zext15, %zext18
+ %getelementptr20 = getelementptr i32, ptr null, i64 %sub19
+ %getelementptr21 = getelementptr i32, ptr null, i64 4
+ %load22 = load i32, ptr %getelementptr13, align 2
+ %zext23 = zext i32 %load22 to i64
+ %getelementptr24 = getelementptr i32, ptr null, i64 4
+ %load25 = load i32, ptr %getelementptr16, align 2
+ %zext26 = zext i32 %load25 to i64
+ %sub27 = sub i64 %zext23, %zext26
+ %getelementptr28 = getelementptr i32, ptr null, i64 %sub27
+ call void @use_4(ptr %getelementptr28, ptr %getelementptr20, ptr %getelementptr12, ptr %getelementptr4)
+ ret void
+}
+
+declare void @use_4(ptr, ptr, ptr, ptr)
declare void @use(i32, i32, i32, i32, i32, i32, i32, i32)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D146540.507017.patch
Type: text/x-patch
Size: 5145 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230321/2e23e0e9/attachment.bin>
More information about the llvm-commits
mailing list