[llvm] [LoongArch][NFC] Add tests for bitwise with byte splat immediates (PR #192216)

via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 15 02:13:20 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-loongarch

Author: hev (heiher)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/192216.diff


8 Files Affected:

- (modified) llvm/test/CodeGen/LoongArch/lasx/ir-instruction/and.ll (+33) 
- (modified) llvm/test/CodeGen/LoongArch/lasx/ir-instruction/nor.ll (+36) 
- (modified) llvm/test/CodeGen/LoongArch/lasx/ir-instruction/or.ll (+33) 
- (modified) llvm/test/CodeGen/LoongArch/lasx/ir-instruction/xor.ll (+33) 
- (modified) llvm/test/CodeGen/LoongArch/lsx/ir-instruction/and.ll (+33) 
- (modified) llvm/test/CodeGen/LoongArch/lsx/ir-instruction/nor.ll (+36) 
- (modified) llvm/test/CodeGen/LoongArch/lsx/ir-instruction/or.ll (+33) 
- (modified) llvm/test/CodeGen/LoongArch/lsx/ir-instruction/xor.ll (+33) 


``````````diff
diff --git a/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/and.ll b/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/and.ll
index a2df7aa1ae6d7..91f50f28464d2 100644
--- a/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/and.ll
+++ b/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/and.ll
@@ -124,3 +124,36 @@ entry:
   store <4 x i64> %v1, ptr %res
   ret void
 }
+
+define <16 x i16> @and_u_v16i16_1(<16 x i16> %a) nounwind {
+; CHECK-LABEL: and_u_v16i16_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    xvrepli.b $xr1, 1
+; CHECK-NEXT:    xvand.v $xr0, $xr0, $xr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = and <16 x i16> %a, splat (i16 257)
+  ret <16 x i16> %0
+}
+
+define <8 x i32> @and_u_v8i32_1(<8 x i32> %a) nounwind {
+; CHECK-LABEL: and_u_v8i32_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    xvrepli.b $xr1, 1
+; CHECK-NEXT:    xvand.v $xr0, $xr0, $xr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = and <8 x i32> %a, splat (i32 16843009)
+  ret <8 x i32> %0
+}
+
+define <4 x i64> @and_u_v4i64_1(<4 x i64> %a) nounwind {
+; CHECK-LABEL: and_u_v4i64_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    xvrepli.b $xr1, 1
+; CHECK-NEXT:    xvand.v $xr0, $xr0, $xr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = and <4 x i64> %a, splat (i64 72340172838076673)
+  ret <4 x i64> %0
+}
diff --git a/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/nor.ll b/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/nor.ll
index 5050b6b0ccddc..691b98b0b1646 100644
--- a/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/nor.ll
+++ b/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/nor.ll
@@ -132,3 +132,39 @@ entry:
   store <4 x i64> %v2, ptr %res
   ret void
 }
+
+define <16 x i16> @nor_u_v16i16_1(<16 x i16> %a) nounwind {
+; CHECK-LABEL: nor_u_v16i16_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    xvrepli.b $xr1, 1
+; CHECK-NEXT:    xvnor.v $xr0, $xr0, $xr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = or <16 x i16> %a, splat (i16 257)
+  %1 = xor <16 x i16> %0, splat (i16 65535)
+  ret <16 x i16> %1
+}
+
+define <8 x i32> @nor_u_v8i32_1(<8 x i32> %a) nounwind {
+; CHECK-LABEL: nor_u_v8i32_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    xvrepli.b $xr1, 1
+; CHECK-NEXT:    xvnor.v $xr0, $xr0, $xr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = or <8 x i32> %a, splat (i32 16843009)
+  %1 = xor <8 x i32> %0, splat (i32 4294967295)
+  ret <8 x i32> %1
+}
+
+define <4 x i64> @nor_u_v4i64_1(<4 x i64> %a) nounwind {
+; CHECK-LABEL: nor_u_v4i64_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    xvrepli.b $xr1, 1
+; CHECK-NEXT:    xvnor.v $xr0, $xr0, $xr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = or <4 x i64> %a, splat (i64 72340172838076673)
+  %1 = xor <4 x i64> %0, splat (i64 18446744073709551615)
+  ret <4 x i64> %1
+}
diff --git a/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/or.ll b/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/or.ll
index 07ccb88f2bbad..a6f5e473d643d 100644
--- a/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/or.ll
+++ b/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/or.ll
@@ -124,3 +124,36 @@ entry:
   store <4 x i64> %v1, ptr %res
   ret void
 }
+
+define <16 x i16> @or_u_v16i16_1(<16 x i16> %a) nounwind {
+; CHECK-LABEL: or_u_v16i16_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    xvrepli.b $xr1, 1
+; CHECK-NEXT:    xvor.v $xr0, $xr0, $xr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = or <16 x i16> %a, splat (i16 257)
+  ret <16 x i16> %0
+}
+
+define <8 x i32> @or_u_v8i32_1(<8 x i32> %a) nounwind {
+; CHECK-LABEL: or_u_v8i32_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    xvrepli.b $xr1, 1
+; CHECK-NEXT:    xvor.v $xr0, $xr0, $xr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = or <8 x i32> %a, splat (i32 16843009)
+  ret <8 x i32> %0
+}
+
+define <4 x i64> @or_u_v4i64_1(<4 x i64> %a) nounwind {
+; CHECK-LABEL: or_u_v4i64_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    xvrepli.b $xr1, 1
+; CHECK-NEXT:    xvor.v $xr0, $xr0, $xr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = or <4 x i64> %a, splat (i64 72340172838076673)
+  ret <4 x i64> %0
+}
diff --git a/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/xor.ll b/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/xor.ll
index 5365685d395e4..a518148fe696c 100644
--- a/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/xor.ll
+++ b/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/xor.ll
@@ -124,3 +124,36 @@ entry:
   store <4 x i64> %v1, ptr %res
   ret void
 }
+
+define <16 x i16> @xor_u_v16i16_1(<16 x i16> %a) nounwind {
+; CHECK-LABEL: xor_u_v16i16_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    xvrepli.b $xr1, 1
+; CHECK-NEXT:    xvxor.v $xr0, $xr0, $xr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = xor <16 x i16> %a, splat (i16 257)
+  ret <16 x i16> %0
+}
+
+define <8 x i32> @xor_u_v8i32_1(<8 x i32> %a) nounwind {
+; CHECK-LABEL: xor_u_v8i32_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    xvrepli.b $xr1, 1
+; CHECK-NEXT:    xvxor.v $xr0, $xr0, $xr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = xor <8 x i32> %a, splat (i32 16843009)
+  ret <8 x i32> %0
+}
+
+define <4 x i64> @xor_u_v4i64_1(<4 x i64> %a) nounwind {
+; CHECK-LABEL: xor_u_v4i64_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    xvrepli.b $xr1, 1
+; CHECK-NEXT:    xvxor.v $xr0, $xr0, $xr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = xor <4 x i64> %a, splat (i64 72340172838076673)
+  ret <4 x i64> %0
+}
diff --git a/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/and.ll b/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/and.ll
index 2d6f0bea07122..f90ae0d34cb8c 100644
--- a/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/and.ll
+++ b/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/and.ll
@@ -124,3 +124,36 @@ entry:
   store <2 x i64> %v1, ptr %res
   ret void
 }
+
+define <8 x i16> @and_u_v8i16_1(<8 x i16> %a) nounwind {
+; CHECK-LABEL: and_u_v8i16_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    vrepli.b $vr1, 1
+; CHECK-NEXT:    vand.v $vr0, $vr0, $vr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = and <8 x i16> %a, splat (i16 257)
+  ret <8 x i16> %0
+}
+
+define <4 x i32> @and_u_v4i32_1(<4 x i32> %a) nounwind {
+; CHECK-LABEL: and_u_v4i32_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    vrepli.b $vr1, 1
+; CHECK-NEXT:    vand.v $vr0, $vr0, $vr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = and <4 x i32> %a, splat (i32 16843009)
+  ret <4 x i32> %0
+}
+
+define <2 x i64> @and_u_v2i64_1(<2 x i64> %a) nounwind {
+; CHECK-LABEL: and_u_v2i64_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    vrepli.b $vr1, 1
+; CHECK-NEXT:    vand.v $vr0, $vr0, $vr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = and <2 x i64> %a, splat (i64 72340172838076673)
+  ret <2 x i64> %0
+}
diff --git a/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/nor.ll b/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/nor.ll
index fc3e1645a0594..a23899c81ca04 100644
--- a/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/nor.ll
+++ b/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/nor.ll
@@ -132,3 +132,39 @@ entry:
   store <2 x i64> %v2, ptr %res
   ret void
 }
+
+define <8 x i16> @nor_u_v8i16_1(<8 x i16> %a) nounwind {
+; CHECK-LABEL: nor_u_v8i16_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    vrepli.b $vr1, 1
+; CHECK-NEXT:    vnor.v $vr0, $vr0, $vr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = or <8 x i16> %a, splat (i16 257)
+  %1 = xor <8 x i16> %0, splat (i16 65535)
+  ret <8 x i16> %1
+}
+
+define <4 x i32> @nor_u_v4i32_1(<4 x i32> %a) nounwind {
+; CHECK-LABEL: nor_u_v4i32_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    vrepli.b $vr1, 1
+; CHECK-NEXT:    vnor.v $vr0, $vr0, $vr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = or <4 x i32> %a, splat (i32 16843009)
+  %1 = xor <4 x i32> %0, splat (i32 4294967295)
+  ret <4 x i32> %1
+}
+
+define <2 x i64> @nor_u_v2i64_1(<2 x i64> %a) nounwind {
+; CHECK-LABEL: nor_u_v2i64_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    vrepli.b $vr1, 1
+; CHECK-NEXT:    vnor.v $vr0, $vr0, $vr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = or <2 x i64> %a, splat (i64 72340172838076673)
+  %1 = xor <2 x i64> %0, splat (i64 18446744073709551615)
+  ret <2 x i64> %1
+}
diff --git a/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/or.ll b/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/or.ll
index 94a1294384578..7188783b0ce56 100644
--- a/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/or.ll
+++ b/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/or.ll
@@ -124,3 +124,36 @@ entry:
   store <2 x i64> %v1, ptr %res
   ret void
 }
+
+define <8 x i16> @or_u_v8i16_1(<8 x i16> %a) nounwind {
+; CHECK-LABEL: or_u_v8i16_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    vrepli.b $vr1, 1
+; CHECK-NEXT:    vor.v $vr0, $vr0, $vr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = or <8 x i16> %a, splat (i16 257)
+  ret <8 x i16> %0
+}
+
+define <4 x i32> @or_u_v4i32_1(<4 x i32> %a) nounwind {
+; CHECK-LABEL: or_u_v4i32_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    vrepli.b $vr1, 1
+; CHECK-NEXT:    vor.v $vr0, $vr0, $vr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = or <4 x i32> %a, splat (i32 16843009)
+  ret <4 x i32> %0
+}
+
+define <2 x i64> @or_u_v2i64_1(<2 x i64> %a) nounwind {
+; CHECK-LABEL: or_u_v2i64_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    vrepli.b $vr1, 1
+; CHECK-NEXT:    vor.v $vr0, $vr0, $vr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = or <2 x i64> %a, splat (i64 72340172838076673)
+  ret <2 x i64> %0
+}
diff --git a/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/xor.ll b/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/xor.ll
index fd63b2122a8b7..e7298fc28273e 100644
--- a/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/xor.ll
+++ b/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/xor.ll
@@ -124,3 +124,36 @@ entry:
   store <2 x i64> %v1, ptr %res
   ret void
 }
+
+define <8 x i16> @xor_u_v8i16_1(<8 x i16> %a) nounwind {
+; CHECK-LABEL: xor_u_v8i16_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    vrepli.b $vr1, 1
+; CHECK-NEXT:    vxor.v $vr0, $vr0, $vr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = xor <8 x i16> %a, splat (i16 257)
+  ret <8 x i16> %0
+}
+
+define <4 x i32> @xor_u_v4i32_1(<4 x i32> %a) nounwind {
+; CHECK-LABEL: xor_u_v4i32_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    vrepli.b $vr1, 1
+; CHECK-NEXT:    vxor.v $vr0, $vr0, $vr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = xor <4 x i32> %a, splat (i32 16843009)
+  ret <4 x i32> %0
+}
+
+define <2 x i64> @xor_u_v2i64_1(<2 x i64> %a) nounwind {
+; CHECK-LABEL: xor_u_v2i64_1:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    vrepli.b $vr1, 1
+; CHECK-NEXT:    vxor.v $vr0, $vr0, $vr1
+; CHECK-NEXT:    ret
+entry:
+  %0 = xor <2 x i64> %a, splat (i64 72340172838076673)
+  ret <2 x i64> %0
+}

``````````

</details>


https://github.com/llvm/llvm-project/pull/192216


More information about the llvm-commits mailing list