[llvm] [LoongArch][NFC] Pre-commit tests for vector type isLegalAddressingMode implementation (PR #151916)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Aug 10 21:10:01 PDT 2025
https://github.com/zhaoqi5 updated https://github.com/llvm/llvm-project/pull/151916
>From 1358e2fec8e20378157da6fe5a6a1ef913bace2a Mon Sep 17 00:00:00 2001
From: Qi Zhao <zhaoqi01 at loongson.cn>
Date: Mon, 4 Aug 2025 15:51:57 +0800
Subject: [PATCH 1/2] [LoongArch] Pre-commit tests for vector type
isLegalAddressingMode implementation
---
.../CodeGen/LoongArch/lasx/loop-reduce.ll | 51 +++++++++++++++++++
.../test/CodeGen/LoongArch/lsx/loop-reduce.ll | 43 ++++++++++++++++
2 files changed, 94 insertions(+)
create mode 100644 llvm/test/CodeGen/LoongArch/lasx/loop-reduce.ll
create mode 100644 llvm/test/CodeGen/LoongArch/lsx/loop-reduce.ll
diff --git a/llvm/test/CodeGen/LoongArch/lasx/loop-reduce.ll b/llvm/test/CodeGen/LoongArch/lasx/loop-reduce.ll
new file mode 100644
index 0000000000000..9739d3012bf3c
--- /dev/null
+++ b/llvm/test/CodeGen/LoongArch/lasx/loop-reduce.ll
@@ -0,0 +1,51 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc --mtriple=loongarch64 -mattr=+lasx --verify-machineinstrs < %s \
+; RUN: | FileCheck %s
+
+;; Modified based on llvm-test-suite:
+;; SingleSource/Regression/C/gcc-c-torture/execute/pr56837.c
+
+ at a = dso_local local_unnamed_addr global [1024 x { i32, i32 }] zeroinitializer, align 4
+
+define dso_local void @foo() local_unnamed_addr {
+; CHECK-LABEL: foo:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: lu12i.w $a0, -2
+; CHECK-NEXT: pcalau12i $a1, %pc_hi20(.LCPI0_0)
+; CHECK-NEXT: xvld $xr0, $a1, %pc_lo12(.LCPI0_0)
+; CHECK-NEXT: pcalau12i $a1, %pc_hi20(.LCPI0_1)
+; CHECK-NEXT: xvld $xr1, $a1, %pc_lo12(.LCPI0_1)
+; CHECK-NEXT: pcalau12i $a1, %pc_hi20(a)
+; CHECK-NEXT: addi.d $a1, $a1, %pc_lo12(a)
+; CHECK-NEXT: lu12i.w $a2, 2
+; CHECK-NEXT: .p2align 4, , 16
+; CHECK-NEXT: .LBB0_1: # %vector.body
+; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
+; CHECK-NEXT: add.d $a3, $a1, $a0
+; CHECK-NEXT: xvldx $xr2, $a3, $a2
+; CHECK-NEXT: xvpermi.d $xr3, $xr2, 78
+; CHECK-NEXT: xvori.b $xr4, $xr0, 0
+; CHECK-NEXT: xvshuf.d $xr4, $xr0, $xr3
+; CHECK-NEXT: xvori.b $xr3, $xr1, 0
+; CHECK-NEXT: xvshuf.w $xr3, $xr4, $xr2
+; CHECK-NEXT: addi.d $a0, $a0, 16
+; CHECK-NEXT: xvstx $xr3, $a3, $a2
+; CHECK-NEXT: bnez $a0, .LBB0_1
+; CHECK-NEXT: # %bb.2: # %for.end
+; CHECK-NEXT: ret
+entry:
+ br label %vector.body
+
+vector.body: ; preds = %vector.body, %entry
+ %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]
+ %0 = getelementptr inbounds nuw [1024 x { i32, i32 }], ptr @a, i64 0, i64 %index
+ %a = load <8 x i32>, ptr %0, align 4
+ %b = shufflevector <8 x i32> %a, <8 x i32> undef, <8 x i32> <i32 1, i32 7, i32 undef, i32 0, i32 undef, i32 undef, i32 3, i32 5>
+ store <8 x i32> %b, ptr %0, align 4
+ %index.next = add nuw i64 %index, 2
+ %1 = icmp eq i64 %index.next, 1024
+ br i1 %1, label %for.end, label %vector.body
+
+for.end: ; preds = %vector.body
+ ret void
+}
diff --git a/llvm/test/CodeGen/LoongArch/lsx/loop-reduce.ll b/llvm/test/CodeGen/LoongArch/lsx/loop-reduce.ll
new file mode 100644
index 0000000000000..fbb4d060c9412
--- /dev/null
+++ b/llvm/test/CodeGen/LoongArch/lsx/loop-reduce.ll
@@ -0,0 +1,43 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; RUN: llc --mtriple=loongarch64 -mattr=+lsx --verify-machineinstrs < %s \
+; RUN: | FileCheck %s
+
+;; Modified based on llvm-test-suite:
+;; SingleSource/Regression/C/gcc-c-torture/execute/pr56837.c
+
+ at a = dso_local local_unnamed_addr global [1024 x { i32, i32 }] zeroinitializer, align 4
+
+define dso_local void @foo() local_unnamed_addr {
+; CHECK-LABEL: foo:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: lu12i.w $a0, -2
+; CHECK-NEXT: pcalau12i $a1, %pc_hi20(a)
+; CHECK-NEXT: addi.d $a1, $a1, %pc_lo12(a)
+; CHECK-NEXT: lu12i.w $a2, 2
+; CHECK-NEXT: .p2align 4, , 16
+; CHECK-NEXT: .LBB0_1: # %vector.body
+; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
+; CHECK-NEXT: add.d $a3, $a1, $a0
+; CHECK-NEXT: vldx $vr0, $a3, $a2
+; CHECK-NEXT: vshuf4i.w $vr0, $vr0, 9
+; CHECK-NEXT: addi.d $a0, $a0, 16
+; CHECK-NEXT: vstx $vr0, $a3, $a2
+; CHECK-NEXT: bnez $a0, .LBB0_1
+; CHECK-NEXT: # %bb.2: # %for.end
+; CHECK-NEXT: ret
+entry:
+ br label %vector.body
+
+vector.body: ; preds = %vector.body, %entry
+ %index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]
+ %0 = getelementptr inbounds nuw [1024 x { i32, i32 }], ptr @a, i64 0, i64 %index
+ %a = load <4 x i32>, ptr %0, align 4
+ %b = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 undef, i32 0>
+ store <4 x i32> %b, ptr %0, align 4
+ %index.next = add nuw i64 %index, 2
+ %1 = icmp eq i64 %index.next, 1024
+ br i1 %1, label %for.end, label %vector.body
+
+for.end: ; preds = %vector.body
+ ret void
+}
>From e0ba234672430cff502506210a7b2db6ef704fc7 Mon Sep 17 00:00:00 2001
From: Qi Zhao <zhaoqi01 at loongson.cn>
Date: Mon, 4 Aug 2025 16:50:54 +0800
Subject: [PATCH 2/2] pass format
---
llvm/test/CodeGen/LoongArch/lasx/loop-reduce.ll | 2 +-
llvm/test/CodeGen/LoongArch/lsx/loop-reduce.ll | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/test/CodeGen/LoongArch/lasx/loop-reduce.ll b/llvm/test/CodeGen/LoongArch/lasx/loop-reduce.ll
index 9739d3012bf3c..957f6fc8e5be6 100644
--- a/llvm/test/CodeGen/LoongArch/lasx/loop-reduce.ll
+++ b/llvm/test/CodeGen/LoongArch/lasx/loop-reduce.ll
@@ -40,7 +40,7 @@ vector.body: ; preds = %vector.body, %entry
%index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]
%0 = getelementptr inbounds nuw [1024 x { i32, i32 }], ptr @a, i64 0, i64 %index
%a = load <8 x i32>, ptr %0, align 4
- %b = shufflevector <8 x i32> %a, <8 x i32> undef, <8 x i32> <i32 1, i32 7, i32 undef, i32 0, i32 undef, i32 undef, i32 3, i32 5>
+ %b = shufflevector <8 x i32> %a, <8 x i32> poison, <8 x i32> <i32 1, i32 7, i32 poison, i32 0, i32 poison, i32 poison, i32 3, i32 5>
store <8 x i32> %b, ptr %0, align 4
%index.next = add nuw i64 %index, 2
%1 = icmp eq i64 %index.next, 1024
diff --git a/llvm/test/CodeGen/LoongArch/lsx/loop-reduce.ll b/llvm/test/CodeGen/LoongArch/lsx/loop-reduce.ll
index fbb4d060c9412..b5e7bb6618766 100644
--- a/llvm/test/CodeGen/LoongArch/lsx/loop-reduce.ll
+++ b/llvm/test/CodeGen/LoongArch/lsx/loop-reduce.ll
@@ -32,7 +32,7 @@ vector.body: ; preds = %vector.body, %entry
%index = phi i64 [ 0, %entry ], [ %index.next, %vector.body ]
%0 = getelementptr inbounds nuw [1024 x { i32, i32 }], ptr @a, i64 0, i64 %index
%a = load <4 x i32>, ptr %0, align 4
- %b = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 2, i32 undef, i32 0>
+ %b = shufflevector <4 x i32> %a, <4 x i32> poison, <4 x i32> <i32 1, i32 2, i32 poison, i32 0>
store <4 x i32> %b, ptr %0, align 4
%index.next = add nuw i64 %index, 2
%1 = icmp eq i64 %index.next, 1024
More information about the llvm-commits
mailing list