[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