================
@@ -0,0 +1,143 @@
+; XFAIL: hexagon-registered-target
+; Tests for emitted warnings when IEEE type is used as qf and vice-versa
+; Test program source code with line number:
+
+;1 #include <hexagon_types.h>
+;2 HEXAGON_Vect2048 foo(HEXAGON_Vect1024 vina, HEXAGON_Vect1024 vinb) {
+;3   const HEXAGON_Vect1024 ishf1 = __builtin_HEXAGON_V6_lvsplath_128B(0x3C00);
+;4   const HEXAGON_Vect1024 ishf2 = __builtin_HEXAGON_V6_lvsplath_128B(0xBC00);
+;5   const HEXAGON_Vect1024 issf1 = __builtin_HEXAGON_V6_lvsplatw_128B(0xAC00);
+;6   const HEXAGON_Vect1024 issf2 = __builtin_HEXAGON_V6_lvsplatw_128B(0xDC00);
+;7   const HEXAGON_Vect1024 isqf16 = 
__builtin_HEXAGON_V6_vadd_qf16_mix_128B(ishf1, ishf2);
+;8   const HEXAGON_Vect1024 isqf32 = 
__builtin_HEXAGON_V6_vadd_qf32_mix_128B(issf1, issf2);
+;9   HEXAGON_Vect2048 isqf32_1 = 
__builtin_HEXAGON_V6_vmpy_qf32_qf16_128B(vina,isqf16);
+;10   HEXAGON_Vect2048 isqf32_2 = 
__builtin_HEXAGON_V6_vmpy_qf32_hf_128B(vinb,isqf16);
+;11   HEXAGON_Vect1024 add1 = 
__builtin_HEXAGON_V6_vsub_qf32_mix_128B(__builtin_HEXAGON_V6_hi_128B(isqf32_1),isqf32);
+;12   HEXAGON_Vect1024 add2 = 
__builtin_HEXAGON_V6_vsub_qf32_128B(__builtin_HEXAGON_V6_hi_128B(isqf32_2),isqf32);
+;13   return __builtin_HEXAGON_V6_vcombine_128B(add2,add1);
+;14 }
+
+; RUN: llc --mtriple=hexagon-- -mhvx -mcpu=hexagonv79 
-mattr=+hvxv79,+hvx-length128b,+hvx-qfloat -enable-xqf-gen=true \
+; RUN: -verify-machineinstrs \
+; RUN: -hexagon-qfloat-mode=ieee 2>&1 < %s -o /dev/null | FileCheck %s
+; RUN: llc --mtriple=hexagon-- -mhvx -mcpu=hexagonv81 
-mattr=+hvxv81,+hvx-length128b,+hvx-qfloat -enable-xqf-gen=true \
+; RUN: -verify-machineinstrs \
+; RUN: -hexagon-qfloat-mode=ieee 2>&1 < %s -o /dev/null | FileCheck %s
+
+define dso_local inreg <64 x i32> @foo(<32 x i32> noundef %vina, <32 x i32> 
noundef %vinb) local_unnamed_addr #0 !dbg !8 {
+; CHECK-NOT: warning: test.c:3:
+; CHECK-NOT: warning: test.c:4:
+; CHECK-NOT: warning: test.c:5:
+; CHECK-NOT: warning: test.c:6:
+; CHECK: warning: test.c:7:35: in function foo <64 x i32> (<32 x i32>, <32 x 
i32>): hf type used as qf16 at operand 1
+; CHECK: warning: test.c:8:35: in function foo <64 x i32> (<32 x i32>, <32 x 
i32>): sf type used as qf32 at operand 1
+; CHECK: warning: test.c:9:31: in function foo <64 x i32> (<32 x i32>, <32 x 
i32>): hf type used as qf16 at operand 1
+; CHECK: warning: test.c:10:31: in function foo <64 x i32> (<32 x i32>, <32 x 
i32>): qf16 type used as hf at operand 2
+; CHECK: warning: test.c:11:67: in function foo <64 x i32> (<32 x i32>, <32 x 
i32>): qf32 type used as sf at operand 1
+; CHECK: warning: test.c:11:27: in function foo <64 x i32> (<32 x i32>, <32 x 
i32>): sf type used as qf32 at operand 1
+; CHECK: warning: test.c:11:27: in function foo <64 x i32> (<32 x i32>, <32 x 
i32>): qf32 type used as sf at operand 2
+; CHECK: warning: test.c:12:63: in function foo <64 x i32> (<32 x i32>, <32 x 
i32>): qf32 type used as sf at operand 1
+; CHECK: warning: test.c:12:27: in function foo <64 x i32> (<32 x i32>, <32 x 
i32>): sf type used as qf32 at operand 1
+; CHECK-NOT: warning: test.c:12: {{.*}}: qf32 type used as sf at operand 2
+; CHECK-NOT: warning: test.c:12: {{.*}}: sf type used as qf32 at operand 2
+; CHECK: warning: test.c:13:10: in function foo <64 x i32> (<32 x i32>, <32 x 
i32>): qf32 type used as sf at operand 1
+; CHECK: warning: test.c:13:10: in function foo <64 x i32> (<32 x i32>, <32 x 
i32>): qf32 type used as sf at operand 2
+entry:
+  call void @llvm.dbg.value(metadata <32 x i32> %vina, metadata !22, metadata 
!DIExpression()), !dbg !35
+  call void @llvm.dbg.value(metadata <32 x i32> %vinb, metadata !23, metadata 
!DIExpression()), !dbg !35
+  %0 = tail call <32 x i32> @llvm.hexagon.V6.lvsplath.128B(i32 15360), !dbg !36
+  call void @llvm.dbg.value(metadata <32 x i32> %0, metadata !24, metadata 
!DIExpression()), !dbg !35
+  %1 = tail call <32 x i32> @llvm.hexagon.V6.lvsplath.128B(i32 48128), !dbg !37
+  call void @llvm.dbg.value(metadata <32 x i32> %1, metadata !26, metadata 
!DIExpression()), !dbg !35
+  %2 = tail call <32 x i32> @llvm.hexagon.V6.lvsplatw.128B(i32 44032), !dbg !38
+  call void @llvm.dbg.value(metadata <32 x i32> %2, metadata !27, metadata 
!DIExpression()), !dbg !35
+  %3 = tail call <32 x i32> @llvm.hexagon.V6.lvsplatw.128B(i32 56320), !dbg !39
+  call void @llvm.dbg.value(metadata <32 x i32> %3, metadata !28, metadata 
!DIExpression()), !dbg !35
+  %4 = tail call <32 x i32> @llvm.hexagon.V6.vadd.qf16.mix.128B(<32 x i32> %0, 
<32 x i32> %1), !dbg !40
+  call void @llvm.dbg.value(metadata <32 x i32> %4, metadata !29, metadata 
!DIExpression()), !dbg !35
+  %5 = tail call <32 x i32> @llvm.hexagon.V6.vadd.qf32.mix.128B(<32 x i32> %2, 
<32 x i32> %3), !dbg !41
+  call void @llvm.dbg.value(metadata <32 x i32> %5, metadata !30, metadata 
!DIExpression()), !dbg !35
+  %6 = tail call <64 x i32> @llvm.hexagon.V6.vmpy.qf32.qf16.128B(<32 x i32> 
%vina, <32 x i32> %4), !dbg !42
+  call void @llvm.dbg.value(metadata <64 x i32> %6, metadata !31, metadata 
!DIExpression()), !dbg !35
+  %7 = tail call <64 x i32> @llvm.hexagon.V6.vmpy.qf32.hf.128B(<32 x i32> 
%vinb, <32 x i32> %4), !dbg !43
+  call void @llvm.dbg.value(metadata <64 x i32> %7, metadata !32, metadata 
!DIExpression()), !dbg !35
+  %8 = tail call <32 x i32> @llvm.hexagon.V6.hi.128B(<64 x i32> %6), !dbg !44
+  %9 = tail call <32 x i32> @llvm.hexagon.V6.vsub.qf32.mix.128B(<32 x i32> %8, 
<32 x i32> %5), !dbg !45
+  call void @llvm.dbg.value(metadata <32 x i32> %9, metadata !33, metadata 
!DIExpression()), !dbg !35
+  %10 = tail call <32 x i32> @llvm.hexagon.V6.hi.128B(<64 x i32> %7), !dbg !46
+  %11 = tail call <32 x i32> @llvm.hexagon.V6.vsub.qf32.128B(<32 x i32> %10, 
<32 x i32> %5), !dbg !47
+  call void @llvm.dbg.value(metadata <32 x i32> %11, metadata !34, metadata 
!DIExpression()), !dbg !35
+  %12 = tail call <64 x i32> @llvm.hexagon.V6.vcombine.128B(<32 x i32> %11, 
<32 x i32> %9), !dbg !48
+  ret <64 x i32> %12, !dbg !49
+}
+
+declare <32 x i32> @llvm.hexagon.V6.lvsplath.128B(i32) #1
+declare <32 x i32> @llvm.hexagon.V6.lvsplatw.128B(i32) #1
+declare <32 x i32> @llvm.hexagon.V6.vadd.qf16.mix.128B(<32 x i32>, <32 x i32>) 
#1
+declare <32 x i32> @llvm.hexagon.V6.vadd.qf32.mix.128B(<32 x i32>, <32 x i32>) 
#1
+declare <64 x i32> @llvm.hexagon.V6.vmpy.qf32.qf16.128B(<32 x i32>, <32 x 
i32>) #1
+declare <64 x i32> @llvm.hexagon.V6.vmpy.qf32.hf.128B(<32 x i32>, <32 x i32>) 
#1
+declare <32 x i32> @llvm.hexagon.V6.vsub.qf32.mix.128B(<32 x i32>, <32 x i32>) 
#1
+declare <32 x i32> @llvm.hexagon.V6.hi.128B(<64 x i32>) #1
+declare <32 x i32> @llvm.hexagon.V6.vsub.qf32.128B(<32 x i32>, <32 x i32>) #1
+declare <64 x i32> @llvm.hexagon.V6.vcombine.128B(<32 x i32>, <32 x i32>) #1
+declare void @llvm.dbg.value(metadata, metadata, metadata) #2
+
+attributes #0 = { mustprogress nofree nosync nounwind willreturn memory(none) 
"approx-func-fp-math"="true" "frame-pointer"="all" "no-infs-fp-math"="true" 
"no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" 
"no-trapping-math"="true" "stack-protector-buffer-size"="8" 
"target-cpu"="hexagonv79" 
"target-features"="+hvx-length128b,+hvx-qfloat,+hvxv79,+v79,-long-calls" 
"unsafe-fp-math"="true" }
+attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn 
memory(none) }
+attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn 
memory(none) }
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!2, !3, !4, !5, !6}
+!llvm.ident = !{!7}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C11, file: !1, producer: "QuIC 
LLVM Hexagon Clang version 8.8-alpha2 Engineering Release: 
hexagon-clang-88-5172", isOptimized: true, runtimeVersion: 0, emissionKind: 
FullDebug, splitDebugInlining: false, debugInfoForProfiling: true, 
nameTableKind: None)
+!1 = !DIFile(filename: "test.c", directory: 
"/local/mnt/workspace/santdas/src/8_8/build")
+!2 = !{i32 7, !"Dwarf Version", i32 4}
+!3 = !{i32 2, !"Debug Info Version", i32 3}
+!4 = !{i32 1, !"wchar_size", i32 4}
+!5 = !{i32 7, !"frame-pointer", i32 2}
+!6 = !{i32 7, !"debug-info-assignment-tracking", i1 true}
----------------
fhossein-quic wrote:

Done

https://github.com/llvm/llvm-project/pull/198902
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to