Skip to content

Commit 9acedff

Browse files
thurstondLukacma
authored andcommitted
[msan][test] Add tests for target("aarch64.svcount") (llvm#164315)
target("aarch64.svcount") is not properly supported by MSan, and will lead to a crash: ``` fatal error: error in backend: Cannot implicitly convert a scalable size to a fixed-width size in `TypeSize::operator ScalarTy()` ``` This commit adds two test cases: a full test case for tracking any future improvements to the instrumentation (and also showing the crash), and a manually reduced test case to show the crash. Forked from llvm/test/CodeGen/AArch64/sme-aarch64-svcount.ll
1 parent 075b297 commit 9acedff

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt -S -passes=msan -mattr=+sme -o - %s | FileCheck %s
3+
4+
; XFAIL: *
5+
6+
; Forked from llvm/test/CodeGen/AArch64/sme-aarch64-svcount.ll
7+
; Manually minimized to show MSan leads to a compiler crash
8+
9+
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
10+
target triple = "aarch64--linux-android9001"
11+
12+
define target("aarch64.svcount") @test_return_arg1(target("aarch64.svcount") %arg0, target("aarch64.svcount") %arg1) nounwind {
13+
ret target("aarch64.svcount") %arg1
14+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt -S -passes=msan -mattr=+sme -o - %s | FileCheck %s
3+
4+
; XFAIL: *
5+
6+
; Forked from llvm/test/CodeGen/AArch64/sme-aarch64-svcount.ll
7+
8+
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
9+
target triple = "aarch64--linux-android9001"
10+
11+
;
12+
; Test simple loads, stores and return.
13+
;
14+
define target("aarch64.svcount") @test_load(ptr %ptr) nounwind {
15+
%res = load target("aarch64.svcount"), ptr %ptr
16+
ret target("aarch64.svcount") %res
17+
}
18+
19+
define void @test_store(ptr %ptr, target("aarch64.svcount") %val) nounwind {
20+
store target("aarch64.svcount") %val, ptr %ptr
21+
ret void
22+
}
23+
24+
define target("aarch64.svcount") @test_alloca_store_reload(target("aarch64.svcount") %val) nounwind {
25+
%ptr = alloca target("aarch64.svcount"), align 1
26+
store target("aarch64.svcount") %val, ptr %ptr
27+
%res = load target("aarch64.svcount"), ptr %ptr
28+
ret target("aarch64.svcount") %res
29+
}
30+
31+
;
32+
; Test passing as arguments (from perspective of callee)
33+
;
34+
35+
define target("aarch64.svcount") @test_return_arg1(target("aarch64.svcount") %arg0, target("aarch64.svcount") %arg1) nounwind {
36+
ret target("aarch64.svcount") %arg1
37+
}
38+
39+
define target("aarch64.svcount") @test_return_arg4(target("aarch64.svcount") %arg0, target("aarch64.svcount") %arg1, target("aarch64.svcount") %arg2, target("aarch64.svcount") %arg3, target("aarch64.svcount") %arg4) nounwind {
40+
ret target("aarch64.svcount") %arg4
41+
}
42+
43+
;
44+
; Test passing as arguments (from perspective of caller)
45+
;
46+
47+
declare void @take_svcount_1(target("aarch64.svcount") %arg)
48+
define void @test_pass_1arg(target("aarch64.svcount") %arg) nounwind {
49+
call void @take_svcount_1(target("aarch64.svcount") %arg)
50+
ret void
51+
}
52+
53+
declare void @take_svcount_5(target("aarch64.svcount") %arg0, target("aarch64.svcount") %arg1, target("aarch64.svcount") %arg2, target("aarch64.svcount") %arg3, target("aarch64.svcount") %arg4)
54+
define void @test_pass_5args(target("aarch64.svcount") %arg) nounwind {
55+
call void @take_svcount_5(target("aarch64.svcount") %arg, target("aarch64.svcount") %arg, target("aarch64.svcount") %arg, target("aarch64.svcount") %arg, target("aarch64.svcount") %arg)
56+
ret void
57+
}
58+
59+
define target("aarch64.svcount") @test_sel(target("aarch64.svcount") %x, target("aarch64.svcount") %y, i1 %cmp) sanitize_memory {
60+
%x.y = select i1 %cmp, target("aarch64.svcount") %x, target("aarch64.svcount") %y
61+
ret target("aarch64.svcount") %x.y
62+
}
63+
64+
define target("aarch64.svcount") @test_sel_cc(target("aarch64.svcount") %x, target("aarch64.svcount") %y, i32 %k) sanitize_memory {
65+
%cmp = icmp sgt i32 %k, 42
66+
%x.y = select i1 %cmp, target("aarch64.svcount") %x, target("aarch64.svcount") %y
67+
ret target("aarch64.svcount") %x.y
68+
}

0 commit comments

Comments
 (0)