[llvm] [Hexagon] Add regression test for V6_vconv_qf16_f8 in PostRA QFP pass (PR #226927)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 28 02:18:53 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-hexagon
Author: pkarveti
<details>
<summary>Changes</summary>
[Hexagon] Add regression test for V6_vconv_qf16_f8 in PostRA QFP pass
---
Full diff: https://github.com/llvm/llvm-project/pull/226927.diff
1 Files Affected:
- (added) llvm/test/CodeGen/Hexagon/qf16-double-wide-postra.ll (+66)
``````````diff
diff --git a/llvm/test/CodeGen/Hexagon/qf16-double-wide-postra.ll b/llvm/test/CodeGen/Hexagon/qf16-double-wide-postra.ll
new file mode 100644
index 00000000000000..046c10b54e6438
--- /dev/null
+++ b/llvm/test/CodeGen/Hexagon/qf16-double-wide-postra.ll
@@ -0,0 +1,66 @@
+; RUN: llc -march=hexagon -mcpu=hexagonv81 -mattr=+hvxv81,+hvx-length128b -enable-xqf-gen=true -hexagon-commgep=false -hexagon-qfloat-mode=lossy -hexagon-noopt < %s | FileCheck %s
+
+; CHECK: v{{[0-9]+}}:{{[0-9]+}}.qf16 = v{{[0-9]+}}.f8
+; CHECK: v{{[0-9]+}}.hf = v{{[0-9]+}}.qf16
+; CHECK: v{{[0-9]+}}.hf = v{{[0-9]+}}.qf16
+; CHECK: vmem(r{{[0-9]+}}+#{{[0-9]+}}) = v{{[0-9]+}}
+; CHECK: vmem(r{{[0-9]+}}+#{{[0-9]+}}) = v{{[0-9]+}}
+; CHECK: v{{[0-9]+}}.qf16 = v{{[0-9]+}}.hf
+; CHECK: v{{[0-9]+}}.hf = v{{[0-9]+}}.qf16
+; CHECK: v{{[0-9]+}} = v{{[0-9]+}}
+; CHECK: v{{[0-9]+}}.qf16 = v{{[0-9]+}}.hf
+; CHECK: v{{[0-9]+}}.hf = v{{[0-9]+}}.qf16
+
+ at __const.main.input = private unnamed_addr constant <{ [8 x i8], [120 x i8] }> <{ [8 x i8] c"\00\01\02\03\04\05\06\07", [120 x i8] zeroinitializer }>, align 128
+
+define dso_local noundef i32 @main() {
+entry:
+ %result.i3 = alloca [64 x i16], align 128
+ %result.i = alloca [64 x i16], align 128
+ %0 = load <32 x i32>, ptr @__const.main.input, align 128
+ %1 = tail call <64 x i32> @llvm.hexagon.V6.vconv.qf16.f8.128B(<32 x i32> %0)
+ %2 = tail call <32 x i32> @llvm.hexagon.V6.lo.128B(<64 x i32> %1)
+ %3 = tail call <32 x i32> @llvm.hexagon.V6.vconv.hf.qf16.128B(<32 x i32> %2)
+ call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %result.i)
+ store <32 x i32> %3, ptr %result.i, align 128
+ br label %for.body.i
+
+for.body.i: ; preds = %for.body.i, %entry
+ %arrayidx1.phi.i = phi ptr [ %result.i, %entry ], [ %arrayidx1.inc.i, %for.body.i ]
+ %i.06.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ]
+ %4 = load i16, ptr %arrayidx1.phi.i, align 2
+ %conv.i = zext i16 %4 to i32
+ %inc.i = add nuw nsw i32 %i.06.i, 1
+ %exitcond.not.i = icmp eq i32 %inc.i, 64
+ %arrayidx1.inc.i = getelementptr i8, ptr %arrayidx1.phi.i, i32 2
+ br i1 %exitcond.not.i, label %_Z5printItEvDv32_lPc.exit, label %for.body.i
+
+_Z5printItEvDv32_lPc.exit: ; preds = %for.body.i
+ %5 = tail call <32 x i32> @llvm.hexagon.V6.hi.128B(<64 x i32> %1)
+ %6 = tail call <32 x i32> @llvm.hexagon.V6.vconv.hf.qf16.128B(<32 x i32> %5)
+ call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %result.i)
+ call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %result.i3)
+ store <32 x i32> %6, ptr %result.i3, align 128
+ br label %for.body.i5
+
+for.body.i5: ; preds = %for.body.i5, %_Z5printItEvDv32_lPc.exit
+ %arrayidx1.phi.i6 = phi ptr [ %result.i3, %_Z5printItEvDv32_lPc.exit ], [ %arrayidx1.inc.i12, %for.body.i5 ]
+ %i.06.i7 = phi i32 [ 0, %_Z5printItEvDv32_lPc.exit ], [ %inc.i10, %for.body.i5 ]
+ %7 = load i16, ptr %arrayidx1.phi.i6, align 2
+ %conv.i8 = zext i16 %7 to i32
+ %inc.i10 = add nuw nsw i32 %i.06.i7, 1
+ %exitcond.not.i11 = icmp eq i32 %inc.i10, 64
+ %arrayidx1.inc.i12 = getelementptr i8, ptr %arrayidx1.phi.i6, i32 2
+ br i1 %exitcond.not.i11, label %_Z5printItEvDv32_lPc.exit14, label %for.body.i5
+
+_Z5printItEvDv32_lPc.exit14: ; preds = %for.body.i5
+ call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %result.i3)
+ ret i32 0
+}
+
+declare void @llvm.lifetime.start.p0(i64 immarg, ptr captures(none))
+declare <64 x i32> @llvm.hexagon.V6.vconv.qf16.f8.128B(<32 x i32>)
+declare <32 x i32> @llvm.hexagon.V6.vconv.hf.qf16.128B(<32 x i32>)
+declare <32 x i32> @llvm.hexagon.V6.lo.128B(<64 x i32>)
+declare <32 x i32> @llvm.hexagon.V6.hi.128B(<64 x i32>)
+declare void @llvm.lifetime.end.p0(i64 immarg, ptr captures(none))
``````````
</details>
https://github.com/llvm/llvm-project/pull/226927
More information about the llvm-commits
mailing list