Skip to content

Commit 724fde3

Browse files
authored
[msan][NFCI] Add tests for sum long across vector (#125761)
Currently handled (suboptimally) by handleUnknownInstruction: - llvm.aarch64.neon.saddlv - llvm.aarch64.neon.uaddlv Forked from llvm/test/CodeGen/AArch64/arm64-vaddlv.ll
1 parent 32be90d commit 724fde3

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2+
; RUN: opt < %s -passes=msan -S | FileCheck %s
3+
;
4+
; Forked from llvm/test/CodeGen/AArch64/arm64-vaddlv.ll
5+
;
6+
; Currently handled (suboptimally) by handleUnknownInstruction:
7+
; - llvm.aarch64.neon.saddlv
8+
; - llvm.aarch64.neon.uaddlv
9+
10+
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
11+
target triple = "aarch64--linux-android9001"
12+
13+
define i64 @test_vaddlv_s32(<2 x i32> %a1) nounwind readnone #0 {
14+
; CHECK-LABEL: define i64 @test_vaddlv_s32(
15+
; CHECK-SAME: <2 x i32> [[A1:%.*]]) #[[ATTR0:[0-9]+]] {
16+
; CHECK-NEXT: entry:
17+
; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 8
18+
; CHECK-NEXT: call void @llvm.donothing()
19+
; CHECK-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to i64
20+
; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
21+
; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1:![0-9]+]]
22+
; CHECK: 2:
23+
; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR3:[0-9]+]]
24+
; CHECK-NEXT: unreachable
25+
; CHECK: 3:
26+
; CHECK-NEXT: [[VADDLV_I:%.*]] = tail call i64 @llvm.aarch64.neon.saddlv.i64.v2i32(<2 x i32> [[A1]]) #[[ATTR2:[0-9]+]]
27+
; CHECK-NEXT: store i64 0, ptr @__msan_retval_tls, align 8
28+
; CHECK-NEXT: ret i64 [[VADDLV_I]]
29+
;
30+
entry:
31+
%vaddlv.i = tail call i64 @llvm.aarch64.neon.saddlv.i64.v2i32(<2 x i32> %a1) nounwind
32+
ret i64 %vaddlv.i
33+
}
34+
35+
define i64 @test_vaddlv_u32(<2 x i32> %a1) nounwind readnone #0 {
36+
; CHECK-LABEL: define i64 @test_vaddlv_u32(
37+
; CHECK-SAME: <2 x i32> [[A1:%.*]]) #[[ATTR0]] {
38+
; CHECK-NEXT: entry:
39+
; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 8
40+
; CHECK-NEXT: call void @llvm.donothing()
41+
; CHECK-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[TMP0]] to i64
42+
; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
43+
; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
44+
; CHECK: 2:
45+
; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
46+
; CHECK-NEXT: unreachable
47+
; CHECK: 3:
48+
; CHECK-NEXT: [[VADDLV_I:%.*]] = tail call i64 @llvm.aarch64.neon.uaddlv.i64.v2i32(<2 x i32> [[A1]]) #[[ATTR2]]
49+
; CHECK-NEXT: store i64 0, ptr @__msan_retval_tls, align 8
50+
; CHECK-NEXT: ret i64 [[VADDLV_I]]
51+
;
52+
entry:
53+
%vaddlv.i = tail call i64 @llvm.aarch64.neon.uaddlv.i64.v2i32(<2 x i32> %a1) nounwind
54+
ret i64 %vaddlv.i
55+
}
56+
57+
declare i64 @llvm.aarch64.neon.uaddlv.i64.v2i32(<2 x i32>) nounwind readnone
58+
59+
declare i64 @llvm.aarch64.neon.saddlv.i64.v2i32(<2 x i32>) nounwind readnone
60+
61+
attributes #0 = { sanitize_memory }
62+
;.
63+
; CHECK: [[PROF1]] = !{!"branch_weights", i32 1, i32 1048575}
64+
;.

0 commit comments

Comments
 (0)